数组实现栈:执行操作后栈未更新问题求助
问题原因与修复方案
核心错误点
1. displayStack函数破坏栈状态
你的displayStack存在两个致命问题:
- 循环打印时错误使用
stack[top]而非stack[i],导致输出全是同一个栈顶元素,无法正确遍历栈内容。 - 循环中直接修改全局变量
top,每次执行display后top会被递减到-1,栈的原始状态被彻底破坏,后续的push、pop操作都会基于这个错误的栈顶位置执行,这就是你觉得“操作后栈没更新”的根本原因。
2. 程序仅支持单次操作
main函数只接收一次用户选择就退出,无法连续执行多次操作,也会让你误以为后续操作未生效。
修复后的代码
#include <stdio.h> #define MAXSIZE 15 int stack[MAXSIZE]; int top = -1; void push(int x) { if (top == MAXSIZE - 1) { printf("Overflow Condition\n"); } else { top++; stack[top] = x; printf("Element %d pushed successfully\n", x); } } void pop() { int item; if (top == -1) { printf("Underflow Condition\n"); } else { item = stack[top]; top--; printf("The popped element is: %d\n", item); } } void peek() { if (top == -1) { printf("Underflow Condition\n"); } else { printf("Top element is: %d\n", stack[top]); } } void displayStack() { if (top == -1) { printf("Stack is empty\n"); return; } int i; printf("Stack elements (top to bottom): "); // 使用临时变量遍历,不修改全局top for (i = top; i >= 0; i--) { printf("%d ", stack[i]); } printf("\n"); } int main() { // Push initial elements push(2); push(3); push(4); push(5); push(6); int ch, a; // 循环接收用户操作,直到选择退出 while (1) { printf("\nEnter Choice: \n 1: push\n 2: pop\n 3: peek\n 4: display\n 5: exit\n\n"); scanf("%d", &ch); switch (ch) { case 1: printf("Enter the element you want to push to stack: "); scanf("%d", &a); push(a); break; case 2: pop(); break; case 3: peek(); break; case 4: displayStack(); break; case 5: printf("Exiting program...\n"); return 0; default: printf("Invalid Choice...\n"); } } }
修复说明
- 修正
displayStack:用stack[i]遍历打印栈元素,使用临时变量i而非修改全局top,同时增加栈空判断。 - main函数改为循环结构,增加退出选项(5),支持连续执行多次操作。
- 为各操作添加提示信息,方便确认操作是否生效。
内容的提问来源于stack exchange,提问作者Neilson Programmer
相关产品推荐
相关产品推荐

