C:堆栈实现

C: Stack implementation

下面的堆栈实现代码产生了运行时错误,尽管它确实编译了..谁能帮我找出错误?

#include<stdio.h>
#define size 5

// 声明了一个堆栈结构,它有一个 int 数组和 top 作为它的成员..

struct stack{
   int a[size],top;
}s;

// 以下方法在检查堆栈是否溢出后调用时将元素 'item' 压入堆栈?

void push(int item){
if(s.top >= size-1)
    printf("\nStack overflow..\n");
else
    s.a[++s.top] = item;
}

以下方法在调用时弹出一个元素..

int pop(){
if(s.top == -1){
    printf("\n..Stack underflow..\n");
    return 0;
}
return s.a[s.top];
}

//显示栈中的元素直到[top]

void display(){
int i;
for(i = s.top; i>=0; i--){
    printf("\n%d", &s.a[i]);
}
}

// main() 方法..

int main(){
s.top = -1;
int item, choice;
char ans;

printf("  ..Stack Implementation..\n");
printf("-----------------------------");
do{
    printf("\nMain Menu");
    printf("\n-------------");
    printf("\n     1. Push\n     2. Pop\n     3. Display\n     4. Exit\n");
    printf("\n  Enter your choice: ");
    scanf("%d", choice);

    switch(choice){
    case 1:
        printf("\nEnter item to be pushed:  ");
        scanf("%d", &item);
        push(item);
        break;
    case 2:
        pop();
        break;
    case 3:
        display();
        break;
    case 4:
        return 0;
    }
    printf("\n Want to continue? :");
    scanf("%c", &ans);
}while(ans == 'Y' || ans == 'y');
    return 0;
}

有一个小错别字[我认为是这样,因为你的其他出现是正确的]。变化

scanf("%d", choice);

scanf("%d", &choice);

另外,scanf("%c", &ans);有个小问题。它将遭受先前按下的 enter。使用

scanf(" %c", &ans);  //mind the space before %

其他问题:[编辑后添加]

  1. printf("\n%d", &s.a[i]); -- 去掉 &,不需要 printf()
  2. return s.a[s.top]; 应该是 return s.a[s.top--];