You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组实现栈:执行操作后栈未更新问题求助

问题原因与修复方案

核心错误点

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:15:31