首先,你定义的是一个共享栈结构体 `DStack`,但是在 `InitDStack` 函数里没有为它分配内存空间,所以程序运行时会出错。可以修改代码如下:void InitDStack(DStack *&s) { s = (DStack *)malloc(sizeof(DStack)); s->top1 = -1; s->top2 = MAXSIZE;}
此外,在 `Push` 函数中,你只是将元素赋值给了 `s->data`,但是没有改变 `top1` 和 `top2` 的值。你需要修改代码如下:bool Push(DStack *&s, int e, int which) { if (StackFull(s)) { return false; } if (which == 1) { s->top1++; s->data[s->top1] = e; } else if (which == 2) { s->top2--; s->data[s->top2] = e; } return true;}
然后,在 `Pop` 函数中,你只是将 `s->data` 的值赋给了 `e`,但是没有更新 `top1` 和 `top2` 的值。你需要修改代码如下:bool Pop(DStack *&s, int &e, int which) { if (StackEmpty(s, which)) { return false; } if (which == 1) { e = s->data[s->top1]; s->top1--; } else if (which == 2) { e = s->data[s->top2]; s->top2++; } return true;}
最后,在 `GetTop` 函数中,你只是将 `s->data` 的值赋给了 `e`,但是没有更新 `top1` 和 `top2` 的值。你需要修改代码如下:bool GetTop(DStack *s, int &e, int which) { if (StackEmpty(s, which)) { return false; } if (which == 1) { e = s->data[s->top1]; } else if (which == 2) { e = s->data[s->top2]; } return true;}
修改完以上代码后,再运行你的程序,应该可以正确输出结果了。
另外,建议在栈满和栈空的判断函数 `StackFull` 和 `StackEmpty` 中加上对栈是否存在的判断,以避免潜在的空指针异常。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |