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

C语言新手求教栈PUSH算法中TOP初始化及代码溢出问题

栈PUSH算法的TOP初始化与代码修正

TOP的正确初始化

栈的TOP变量用来标记当前栈顶元素的下标,标准初始化方式是设为-1,表示此时栈为空:

  • 栈空时TOP=-1,执行PUSH操作时先检查TOP是否等于MAXSIZE-1(栈满状态),若是则触发溢出;
  • 执行TOP++后变为0,正好对应数组第一个下标,将元素存入STACK[0],完全匹配你提供的算法步骤。

你的代码存在的核心问题

  1. 局部变量top未初始化且无法保存状态
    你在push函数里定义的int top;是局部变量,每次调用函数都会重新分配内存,值为随机垃圾值,第一次判断就大概率触发溢出逻辑。而且局部变量无法在多次调用push时跟踪栈的当前状态,必须把top定义为全局变量,或者通过指针传递给push函数。

  2. 函数参数与数组访问语法错误

    • 参数int(*stack)[item]写法错误,item是函数参数,不能用来定义数组指针的维度;
    • 访问数组指针元素时,*stack[top]优先级错误,应该写成(*stack)[top]——因为[]优先级高于*,原写法会先访问stack[top],不符合你访问数组元素的需求。
  3. 栈初始状态不符合逻辑
    main函数里初始化arr[4] = {0 , 1, 2, 3}相当于栈已经被填满,但按照栈的逻辑,初始应该是空栈,TOP=-1,数组的初始值可设为0,但有效元素由TOP标记的位置决定。

修正后的代码示例

方案一:使用全局变量保存TOP

#include <stdlib.h>
#include <stdio.h>

#define MAXSIZE 4  // 定义栈的最大容量

int top = -1;  // 全局变量保存栈顶位置,初始化为-1表示空栈

int push(int item, int stack[]) {
    // 检查栈溢出
    if (top == MAXSIZE - 1) {
        printf("Overflow");
        return -1;
    }
    top++;
    stack[top] = item;
    // 返回当前栈顶元素
    return stack[top];
}

int main(void) {
    int arr[MAXSIZE] = {0};  // 初始化空栈,元素初始为0
    int itm = 2;
    int result;
    
    result = push(itm, arr);
    printf("\nResult: %i", result);  // 输出2,此时top=0,arr[0]=2
    
    // 测试第二次push
    itm = 5;
    result = push(itm, arr);
    printf("\nResult: %i", result);  // 输出5,此时top=1,arr[1]=5
    
    return 0;
}

方案二:通过指针传递TOP(避免全局变量)

#include <stdlib.h>
#include <stdio.h>

#define MAXSIZE 4

int push(int item, int stack[], int *top) {
    if (*top == MAXSIZE - 1) {
        printf("Overflow");
        return -1;
    }
    (*top)++;  // 注意括号,++优先级高于*,必须加括号保证先取top的值再自增
    stack[*top] = item;
    return stack[*top];
}

int main(void) {
    int arr[MAXSIZE] = {0};
    int top = -1;  // 局部变量,通过指针传递给push函数
    int itm = 2;
    int result;
    
    result = push(itm, arr, &top);
    printf("\nResult: %i", result);
    
    itm = 5;
    result = push(itm, arr, &top);
    printf("\nResult: %i", result);
    
    return 0;
}

内容的提问来源于stack exchange,提问作者Emil11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:45:30