使用函数在c中进行堆栈操作

时间:2015-08-18 14:43:35

标签: c function stack pop

在这个程序中,pop函数没有被执行。

声明'弹出值'不会在输出中打印。

当我显示堆栈时,即使调用pop函数,也会打印我推送的所有元素。

我需要知道为什么会这样。

#include<stdio.h>

#define MAX 7

int x,st[MAX],i,top=-1;

// Entering the elements into stack
void push()
 {
     if(top>=MAX)
        printf("Stack overflow\n");
      else
      {
        printf("\nEnter element to be pushed: ");
        scanf("%d",&x);
        top++;
        st[top]=x;
      }
 }

//Deleting an element from the stack 
int pop()
 {
    if(top==-1)
       printf("Stack is empty");
    else
    {
      x=st[top];
      top--;
      return(x); 
    }

  }

//Displaying contents of stack
void display()
 {

   if(top<=-1)
    printf("Stack Empty");
   else
   {      
       printf("Stack contents\n");
       for(i=top;i>=0;i--)
       printf("%d\n",st[i]);
   }
} 

int main()
{
    int c,item;
    char ch='y';
    while(ch=='y')
    {
      printf("Enter choice\t");
      printf("1.Push 2.Pop 3.Display 4.Exit \n");
      scanf("%d",&c);
      switch(c)
      {
       case 1:
        push();
         break;
       case2:
         item=pop();
         printf("Popped value %d",item);
         break;
       case 3:
         display();
         break;
       case 4:
         exit(0);
         break; 
       }
     }
    getch();
 }

2 个答案:

答案 0 :(得分:0)

返回(x)处于pop函数的else条件。 如果top == - 1那么它将通过错误

答案 1 :(得分:0)

编写pop函数的正确方式(以编码方式)如下:

#include <exception>
//Deleting an element from the stack
int pop()
{
    if(top == -1)
       throw exception("Stack is empty");
    else
      return st[top--];
} 

在这种情况下,如果堆栈为空exception会引发而没有任何内容会返回,但正如您在printf之后写的那样必须在if语句中返回一些你没有的东西!!

此外,您case2中的拼写错误应为case 2