• [잡담/일상] [자료구조] Stack ..뭐가 잘못됫는지 모르겟어요 ㅠㅠ2017.11.27 PM 07:14

게시물 주소 FONT글자 작게하기 글자 키우기

글적는데  타이핑 시작하자마자 마이피  페이지 스크롤이 자꾸 맨위로 올랴가네요 이건 또왜이래 ㅠㅠㅠㅠ

 

으으.. 공부한다고 주석달아가면서 타이핑합니다..

 

잘못적어도 이해해주세용  플밍알못이라... 양해를;ㅅ;

 

 

컴파일땐 안잡히느데 컨트롤F5하면 에러네요..

 

에러내용도 이해가안되공.. ;ㅅ;

 

 

도와주세오 ;ㅅ;

 

 

---------------------

 

 

 

#include<stdio.h>

#include <stdlib.h>




//스텍구조 ---------------------------

//데이터가 들어오고 나가고.. 쌓이는 구조

//스텍은 top통해서만 데이터의 삽입 삭제가능

//top는 자료의 삭제,삽입이 이루어지는 스택공간의 위치를 표시하는 포인터 




//구조체에서 idx를 top로 바꾸면 스텍구조가 된다.

//제일 나중에 들어온 데이터부터 나간다.

// Stack

// push : 데이터를 넣을때

// pop : 데이터를 삭제할때



//연결리스트 : 자기참조 구조체를 이용..

// 데이터의 제한이없다.




//구조체 stack 노드 선언-------------------


typedef struct node {

int no; //stack 데이터 수 값  (현재 몇개가 있는지..

int data; // stack 노드 데이터 필드

struct node *bot; //하위 노드의 위치값을 가지는 필드

}Stack;


int num = 0;

//-------------------------------------------------

void Push(Stack **dptop); //stack에 데이터 추가하는 함수

void Pop(Stack **dptop);  //stack에 테이터 삭제하는함수

void ShowStack(Stack *); //stack에 테이터 출력하는 함수

int InputData(); // 데이터값 입력받는 함수






//-------------------------------------------------

int main() {

Stack *top = NULL; //위치값, NULL로 초기화





   //Push 함수호출 : top의 주소값을 넘겨준다.

Push(&top);

Push(&top);

Push(&top);

//데이터 출력함수, : top의값을 넘겨준다.

ShowStack(top);



// pop함수 호출 : top의 주소값을 넘겨준다.

Pop(&top);

}



//-------------------------------------------------

void Pop(Stack **dptop) {

//stack에 데이터가 없으면 종료

if (*dptop == NULL) {

puts("스텍이 비어있습니다");

return;

}

//노드삭제 후 top은 마지막 노드의 위치를 가리켜야 하므로

//삭제노드의 Bot필드의 값을 임시변수에 보관한다.

Stack *tmp = (*dptop)->bot;

// 노드의 개수를 표현하는 num값 1감소

--num;

// 노드삭제

free(*dptop);

//top 현재의 마지막노드의 위치값을 넣어준다.

*dptop = tmp;


}

void ShowStack(Stack *current) {

//stack에 데이터가 없으면 종료

if (current == NULL) {

puts("스텍이 비어있습니다");

return;



}

//반복문 실행해서 노드 이동하면서 노드의 테이터 출력

while (1) {

//현재노드의 데이터 출력

puts("지금 쌓인 데이터는");



//하위노드로 이동


}

}




//-------------------

void Push(Stack **dptop) {




// 노드 추가시 새노드의 bot필드의 하위노드의 위치값을 넣어주어야한다

// main의 top이 가진값이 하위노드의 위치값이므로..

// main의 top의 값을 임시변수(tmp)에 보관한다.

Stack *tmp = *dptop;


// 새노드  생성하고 새노드의 위치값을 top에게 넣어준다.

*dptop = (Stack*)malloc(sizeof(Stack));




// 새노드의 no필드에 num값을  1증가해서 넣어준다.

(*dptop)->no = ++num;




// 새노드의 데이터 필드에 데이터 입력

(*dptop)->data = InputData();

// 새노드의 bot필드에 하위노드의 위치값을 넣어줌

(*dptop)->bot = tmp;

}




댓글 : 2 개
슬적 봤는데 Stack 내부에 있는 노드에 대한 메모리 할당 부분이 없는 것 같아요
차..찾아보겟습니당
친구글 비밀글 댓글 쓰기