Я новичок в программировании на языке C. При реализации стека с использованием программы на языке C это дает мне ошибку.
Несмотря на наличие 5-элементного пространства в моем массиве стека, он дает мне «Переполнение стека» (сообщение) во второй итерации цикла for (при нажатии элементов).
& При выводе чисел выводится только первое число (5 раз)
что кажется неправильным?
#include<stdio.h>
#include<conio.h>
#include <stdlib.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;
for(x=1;x<=5;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;
for(a=1;a<=5;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]);
}