我是c编程的新手,在使用c程序实现堆栈时,它给了我一个错误。
尽管我的堆栈数组中有5个元素空间,但它在for循环的第二次迭代(While Pushing elements)中给了我“Stack Overflow”(消息)。
&安培;弹出数字时,只弹出第一个数字(5次)
什么似乎是错的?
tempFile.setAutoRemove(false)
答案 0 :(得分:0)
你不应该使用' for '循环进行弹出,推送。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
# define MAX 5
int stack1[MAX];
int top=-1;
void push(int);
int pop();
void display();
main()
{
int choice,num;
while(1)
{
printf("\nEnter Your Choice: \n");
printf("Enter 1. to Push \n");
printf("Enter 2. to pop \n");
printf("Enter 3. to Display \n");
printf("Enter 4. To Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter Elements to be pushed\n");
int z;
for(z=1;z<=5;z++)
{
printf("Enter a the code In Room %d: ",z);
scanf("%d",&num);
push(num);//Function call, Calling push
}
break;
case 2:
printf("Numbers to be poped\n");
int b;
for(b=1;b<=5;b++)
{
num=pop();
}//Return a integer Value;
break;
case 3:
display();
break;
case 4:
exit(1);
default:
printf("Invalid Choice\n");
}
}
}
void push(int element)//Push Function
{
int x;
if(top== MAX-1)//Check if Stack is Full
{
printf("Stack Overflow \n");
return;//Terminate the function
}
top=top+1;//start from -1 and gets incremented
stack1[top]=element;//insert elements at each step
}
int pop()
{
int a;
int element;
if(top==-1)
{
printf("Stack EMPTY can't delete anything");
return;
}
element=stack1[top];//In stack Elements are Always delete from TOP
top=top-1;//To shift the pointer
printf("%d has been deleted \n", element);
return element;
}
void display()
{
int i;
if(top==-1)
{
printf("Stack Is empty can't display");
return;//Terminates Display function
}
printf("\n\n");
for(i=top;i>=0;i--)//Displays top elements and decrements on each step
printf("%d\n",stack1[i]);
}
答案 1 :(得分:0)
你有2个for循环。主函数中有一个循环,在开关内部,list.remove(Integer.valueOf(intereger_parameter));
和push
函数内部也有一个循环。
pop
和push
函数将pop
或push
只有一个元素,并且不需要在其中包含循环。
如果在编写代码时使用缩进,这将更加明显。这是正确缩进代码的原因之一。
答案 2 :(得分:0)
让我们一步一步。
1)。你开始一个for循环,这样用户就可以为你的堆栈输入5个元素。一旦他输入了数字,你的推送功能就会被调用。在推送中,你有一个运行5次的循环。因此,相同的元素被推动5次到堆栈。所以在你的下一个选择中,堆栈已经满了。因此堆栈溢出消息。
2)。现在你的堆栈就像 - [5,5,5,5,5],假设5是输入的5号,你的pop函数再次运行一个循环。理想情况下,您只应该为用户一次弹出一个元素。因此,由于您正在运行循环,所有5个元素都会弹出,因为只有第一个元素在堆栈中,这就是您在输出中看到的内容。