#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;
}