Stack을 짜는데..
의사양반
질문 요약 :오랜만에 Stack을 짜는데 나름 제대로 짰다고 생각하는데 Delete부분이 실행이 제대로 안되네요.
insert는.. 숫자를 넣고나서 그 값을 출력하게 했는데 제대로 되는걸 보니 입력이 된것 같은데
delete할때는 자꾸 stack이 비었다고 나오네요(분명 값을 넣었는데 empty함수가 적용되나봐요)
도와주세요.ㅠㅠ
=================================
#include stdio.h
#define Max_size 10
typedef int element;
int *top;
int i, data;
element student[Max_size];
int Is_empty(int *t) // Empty
{
if( t == NULL )
{
return 1;
}
else
return 0;
}
int Is_full(int *t) // Full
{
if(t == &student[Max_size-1])
{
printf(Stack is full.\n);
return 1;
}
else
return 0;
}
void Push(element d, int *t)
{
if( Is_full(t) == 1)
return;
else
{
if( Is_empty(t) == 1)
{
t = student;
*t = d;
}
else
*(++t) = d;
printf(%d was put in the stack.\n, *t);
return;
}
}
element Pop(int *t)
{
if( Is_empty(t) == 1)
return 0;
else
return (*t)--;
}
void main()
{
top = NULL;
do
{
printf(===Menu===\n1. Insert\n2. Delete\n3. Exit\nEnter the number: \n);
scanf(%d, &i);
switch(i)
{
case 1: printf(Enter an any number: );
scanf(%d, &data);
Push(data, top);
break;
case 2: data = Pop(top);
if( data == 0)
printf(Stack is empty\n);
else
printf(%d was deleted.\n, data);
break;
case 3: printf(Thank you.\n);
break;
default: printf(Wrong number.);
&nbs림}
}while(i != 3);
}
=========================================
-
중독적
아!! t값의 변화를 top에게 돌려주지 않았군요.. 감사합니다!! 그리고, 혜읍님 element를 지정해준건, 제가 혹시 나중에 stack의 자료형을 변화를 줘보고 싶을때(비슷한데 char로 받고싶다거나..) 그럴때 편하게 한번에 바꾸려고 한거였답니다^^; 두분 다 감사해요~
-
크나
여기서는 더블 포인터를 이용해서 포인터를 가리키는 포인터를 사용하면 됩니다.
혹은 정수형 변수로 스택에 들어있는 개수를 저장하고 그 값을 배열의 인덱스로 사용하면 비슷하게 떨어지겠죠.. 초기값은 -1로 하면 되겠구요 ^^ -
Glisten
전역변수 top과 지역변수 t가 같다 라는 생각에서 오류가 생긴거 같습니다.
top와 t의 값은 같지만 동일하지는 않습니다. top의 내용이 t로 복사된후 t를 이용해서 스택값을 저장합니다. 그리고 t의 값을 증가시켜 다음 인덱스를 가르키게 하지요. 하지만 t는 top가 아니죠..
t는 함수가 종료된후.. 사라집니다. top는 여전히 null 이죠 ^^