#include <stdio.h>
void push(int);
int pop(void);
void display(void);
int main()
{
int choice=0,val=0;
do
{
printf("\n\t1.Push 2.Pop 3.Display 4.Exit\n\tSelect Your Choice : ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\tElement to be Pushed : ");
scanf("%d",&val);
push(val);
break;
case 2:
val=pop();
if(val!=-1)
printf("\tPopped Element : %d\n",val);
break;
case 3:
display();
break;
case 4:
break;
default:
printf("\tWrong Choice");
break;
}
} while (choice!=4);
return 0;
}
#define maxsize 100
int stack[maxsize];
int stacktop=0;
void push(int val)
{
if(stacktop<maxsize)
stack[stacktop++]=val;
else
printf("Stack Overflow");
}
int pop()
{
int a;
if(stacktop>0)
{
a=stack[stacktop];
return a;
}
else
{
printf("Stack is Empty");
return -1;
}
}
void display()
{
int i=0;
if(stacktop>0)
{
printf("\tElements are:");
while(i<stacktop)
{
printf("\t%d",stack[i++]);
}
printf("\n");
}
else
printf("\tStack is Empty\n");
}
每次我使用pop函数时,总是说pop值为0
答案 0 :(得分:5)
您调用pop
的方法不是修改堆栈;它只是返回它的顶级元素。这不是“流行”通常意味着什么。
答案 1 :(得分:1)
除了Gareth's answer之外,还有一个问题。当你把东西推到堆栈上时,你说的是
stack[stacktop++]=val;
这意味着stacktop
始终指向第一个空元素(即:始终位于堆栈顶部元素的正上方),这意味着您的pop()
将始终返回垃圾。即使你不打算删除顶部元素(你应该这样做;那就是“弹出”意味着什么),你需要返回堆栈指针正下方的元素。
在pop()
功能中,您返回stack[stacktop]
。如果你改为返回stack[--stacktop]
,那么堆栈指针将被适当调整(在它用于检索值之前,你将返回有效元素)。