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 %
其他问题:[编辑后添加]
printf("\n%d", &s.a[i]);
-- 去掉 &
,不需要 printf()
return s.a[s.top];
应该是 return s.a[s.top--];
下面的堆栈实现代码产生了运行时错误,尽管它确实编译了..谁能帮我找出错误?
#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 %
其他问题:[编辑后添加]
printf("\n%d", &s.a[i]);
-- 去掉&
,不需要printf()
return s.a[s.top];
应该是return s.a[s.top--];