我做了一个使用结构创建堆栈的任务。 我的问题是当我在pop中定义一个变量(num)时,每当我弹出它时,会显示一个额外的0。 因此,不是打印num i打印st.stk [st.top],而是工作。
我想知道为什么当删除注释标记并且我打印num而不是st.stk [st.top]时,我将0作为输出
#include<stdio.h>
#include<stdio.h>
#define SIZE 4
struct stack{
int stk[SIZE];
int top;
} st;
main()
{
st.top=-1;
int option,ans;
printf("\nStack implementation in C");
do {
printf("\nChoose what you want to do \n1.Push\n2.Pop\n3.Display\n4.Exit");
scanf("%d",&option);
switch(option)
{
case 1:
push();
break;
case 2:
pop();
break;
/*case 3:
display();
break;
case 4:
exit(1);
break;*/
default:
printf("wrong choice");
break;
}
} while(ans != 4);
getch();
}
void push()
{
int num;
if(st.top==SIZE-1) //if top== 3 0.1.2.3 } 4 digits
{
printf("\nStack overflaow");
return; //exit from function if stack is overflowed
}
printf("\nPlease enter neumber you want to enter");
scanf("%d",&num);
st.stk[st.top]=num;
st.top++;
}
void pop()
{
//int num;
if(st.top==-1) //back to initial position
{
printf("\nStack underflow");
return;
}
//num=st.stk[st.top];
st.top--;
printf("\nItem popped is %d", st.stk[st.top]);M
}
感谢您的回答,这是我的第一个问题,当然我在发布前搜索过但无法找到任何答案:(
**如果需要,我可以发布整个代码
答案 0 :(得分:0)
您的push()
和pop()
函数中有几个可能导致令您头疼的错误。要解决这些问题,您只需修改操作顺序即可。
要修复pop()
功能,请尝试以下操作:
void pop()
{
int num;
if(st.top==-1) //back to initial position
{
printf("\nStack underflow");
return;
}
num = st.stk[st.top];
st.top--;
// At this point st.stk[st.top] is no longer the stacked element (since we changed st.top).
printf("\nItem popped is %d", num); // Use the value you red before you changed the stack.
}
要修复push()
功能,请尝试以下操作:
void push()
{
int num;
if(st.top == SIZE - 1) //if top== 3 0.1.2.3 } 4 digits
{
printf("\nStack overflaow");
return; //exit from function if stack is overflowed
}
printf("\nPlease enter neumber you want to enter");
scanf("%d",&num);
// Here st.top refers to the index of the last element that was pushed on the stack or -1 when the stack is empty.
// We must first increment it and then assign the value.
st.top++;
st.stk[st.top]=num;
}
将来尝试查找逐个错误时,有必要在纸上或脑中尝试在空堆栈上尝试pop()
和push()
函数,在一个完整的堆栈和一个半满/半空堆栈上。
答案 1 :(得分:0)
可能是你的top指向插入的最后一个元素旁边的位置,并且你试图评估num = st.stk [st.top],而不减少顶部指针。因此,你将num作为零。
答案 2 :(得分:0)
您的st.top
指向要推送新元素的位置。并且在没有递减的情况下,您计算num
。所以它会打印一个额外的数字。