```cpp #include <iostream> #include <cstdlib> #define maxsize 10 typedef struct { int* stack; //初始化后栈内均为 0 int top[2]; // top 为两个栈顶指针,记录了栈顶元素在数组中的下标。top[0]表示 0 栈,top[1]表示 1 栈 //初始情况 top[0]=-1,top[1]=maxsize }dualstack; void push(dualstack &s,int i,int x) { if (i == 0 && s.top[0] + 1 == s.top[1]) { // 0 号栈满 std::cout << "栈满" << std::endl; return; } if (i == 1 && s.top[1] - 1 == s.top[0]) { // 1 号栈满 std::cout << "栈满" << std::endl; return; } if (i == 0) { s.stack[++s.top[0]] = x; } else { s.stack[--s.top[1]] = x; } } int pop(dualstack &s,int i) { int ret = -1; if (i == 0 && s.top[0] == -1) { // 0 号栈空 std::cout << "0 号栈空" << std::endl; return ret; } if (i == 1 && s.top[1] == maxsize) { // 1 号栈空 std::cout << "1 号栈空" << std::endl; return ret; } if (i == 0) { ret = s.stack[s.top[0]--]; } else { ret = s.stack[s.top[1]++]; } return ret; } ``` 额外需要注意的逻辑点: 1. 对于边界情况的判断要准确,比如栈满和栈空的条件。 2. 入栈和出栈操作时,对栈顶指针的更新要正确,避免出现越界等错误。 3. 代码的可读性和可维护性很重要,建议添加更多的注释来解释关键逻辑。 [2024-11-29 09:50:17 | AI写代码神器 | 543点数解答]