问题遇到的现象和发生背景
自建C++动态分配的顺序栈无法建立
问题相关代码,请勿粘贴截图
#include <iostream>
using namespace std;
#define STACK_MAX_SIZE 10
typedef int ElemType;
typedef struct {
ElemType* base;
int* top;
//int top
int StackSize;
}SqStack;
bool InitStack(SqStack &S) {
S.base = (ElemType*)malloc(STACK_MAX_SIZE * sizeof(ElemType));
if (!S.base)return 0;
S.top = S.base - 1;
S.StackSize = STACK_MAX_SIZE;
cout << "初始化成功" << endl;
cout << S.top << " " << &S.top << endl;
cout << S.base << " " << &S.base << endl;
return 1;
}//初始化栈 top=-1
bool EmptyStack(SqStack S) {
if (S.top == S.base-1)
return 1;
else
return 0;
}//判栈空
bool FullStack(SqStack S) {
if (S.top - S.base+1 >= S.StackSize)
return 1;
else
return 0;
}/*判栈满(base是0的位置,如stacksize是5,那么栈满时,top是4,因初始条件是top=-1
则条件就是top减去base的地址得出间隔元素个数+1要大于或等于stacksize*/
void ClearStack(SqStack& S) {
S.top = S.base;
}//清空栈
bool Push(SqStack&S,ElemType e) {
if (S.top - S.base + 1 >= S.StackSize)
return 0;
++ * S.top = e;//++ S.top = &e;
//++ S.top = e;
return 1;
}//入栈
int Pop(SqStack& S,ElemType &e) {
if (EmptyStack(S))
return 0;
e = * S.top--;
return 1;
}//弹栈
//int Pop(SqStack& S,ElemType e) {
// if (EmptyStack(S))
// return 0;
// return *S.top--;
//}//弹栈
int main() {
SqStack S1;
InitStack(S1);
Push(S1, 5);
Push(S1, 4);
Push(S1, 3);
Push(S1, 2);
Push(S1, 1);
cout << "中断点" << endl;
int x = 0;
Pop(S1, x);
cout << x << endl;
cout << "中断点" << endl;
cout << *S1.top << " " << S1.top << endl;
cout << *S1.base << " " << S1.base << endl;
system("pause");
return 1;
}
运行结果及报错内容
无报错,但无法正确堆入和弹出
我的解答思路和尝试过的方法
静态分配可以解决