#include <iostream> using namespace std; #define MAXSIZE 100 struct Stack { int* top; int* base; int stacksize; }; //顺序栈的初始化 bool initStack(Stack& s) { s.base = new int[MAXSIZE]; //1.分配一个数组空间给栈底,栈底表示数组的首地址。 s.top = s.base; //2.栈顶指向栈底 s.stacksize = MAXSIZE; //3.设置顺序栈的大小 return true; } //判断顺序栈是否为空 bool isEmpty(Stack& s) { return s.top == s.base; } //获取顺序栈的长度 int getStackLength(Stack& s) { return s.top - s.base; } //清空顺序栈 void clearStack(Stack& s) { if (s.base) s.top = s.base; } //销毁顺序栈 void destroyStack(Stack& s) { if (!s.base)return; delete s.base; //栈底指针相当于数组首地址 s.stacksize = 0; s.top = s.base = nullptr; } //顺序栈的入栈 bool push(Stack& s, int value) { if (!s.base)return false; if (s.top - s.base == s.stacksize)return false; //1.判断是否栈满 *(s.top) = value; //2.将元素压入栈顶 s.top++; //3.栈顶指针加1 return true; } //顺序栈的出栈 bool pop(Stack& s, int& value) { if (s.top == s.base)return false; //1.判断是否栈空 s.top--; //2.栈顶下移 value = *(s.top); //3.取值返回 return true; } void main() { //栈不能遍历,只能出栈。 Stack s; initStack(s); cout << "顺序栈" << (isEmpty(s) ? "为空" : "不为空") << endl; cout << "顺序栈入栈:" << endl; for (int i = 0; i < 10; i++) push(s, i); cout << "顺序栈长度:" << getStackLength(s) << endl; int value = 0; pop(s, value); cout << "顺序栈出栈:" << value << endl; clearStack(s); cout << "清空顺序栈!" << endl; destroyStack(s); cout << "销毁顺序栈!" << endl; }