在堆栈中出错(Push& Pop)

时间:2017-03-08 06:58:26

标签: c data-structures stack

我是c编程的新手,在使用c程序实现堆栈时,它给了我一个错误。

尽管我的堆栈数组中有5个元素空间,但它在for循环的第二次迭代(While Pushing elements)中给了我“Stack Overflow”(消息)。

&安培;弹出数字时,只弹出第一个数字(5次)

什么似乎是错的?

tempFile.setAutoRemove(false)

3 个答案:

答案 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函数内部也有一个循环。

poppush函数将poppush只有一个元素,并且不需要在其中包含循环。

如果在编写代码时使用缩进,这将更加明显。这是正确缩进代码的原因之一。

答案 2 :(得分:0)

让我们一步一步。

1)。你开始一个for循环,这样用户就可以为你的堆栈输入5个元素。一旦他输入了数字,你的推送功能就会被调用。在推送中,你有一个运行5次的循环。因此,相同的元素被推动5次到堆栈。所以在你的下一个选择中,堆栈已经满了。因此堆栈溢出消息。

2)。现在你的堆栈就像 - [5,5,5,5,5],假设5是输入的5号,你的pop函数再次运行一个循环。理想情况下,您只应该为用户一次弹出一个元素。因此,由于您正在运行循环,所有5个元素都会弹出,因为只有第一个元素在堆栈中,这就是您在输出中看到的内容。