C语言多栈实现作业跟踪系统时不同栈存储值互相串扰问题排查
问题根因
代码的核心问题是4个独立栈共用了同一个全局top变量,所有栈的入栈、出栈、遍历逻辑都基于同一个计数,才会出现跨栈的冗余0值。
修复步骤
- 第一步:替换全局top变量,为每个栈单独配置独立的计数变量
将原代码中int top = -1;替换为:
int top1 = -1, top2 = -1, top3 = -1, top4 = -1;
- 第二步:修改栈操作函数,新增对应栈的top指针作为入参(因为要修改top的值需要传指针)
所有用到top的函数都做对应修改,示例如下:
// 修改后的push函数 void push(int st[], int *top, int item) { if (*top == MAXSIZE - 1) { printf("\n You Have a lot of Assignments Due, GET WORKING!!!"); } else { *top = *top + 1; st[*top] = item; } } // 修改后的pop函数 int pop(int st[], int *top) { int item; if (*top == -1) { printf("Great Work No Assignment Are Pending"); return 0; } else { item = st[*top]; *top = *top - 1; } return item; }
peek、display、sort函数同理,所有原代码中用到top的位置替换为*top,入参加上int *top即可。
- 第三步:在各个科目对应的操作函数中,调用栈操作时传入对应栈自己的top地址
以ds科目的操作为例,修改后调用逻辑如下:
// 入栈调用 push(st1, &top1, item1); // 出栈调用 item1 = pop(st1, &top1); // 查看栈顶调用 item1 = peek(st1, &top1); // 打印调用 display(st1, &top1); // 排序调用 sort(st1, &top1);
dsgt、cg、math三个科目对应替换为自己的st数组和top变量即可,比如dsgt用st2和&top2,cg用st3和&top3,math用st4和&top4。
内容的提问来源于stack exchange,提问作者Vatsal Gandhi
相关产品推荐
相关产品推荐

