#include<iostream>
using namespace std;
#define MaxSize 10; // 定义栈的最大元素
typedef struct SqStack{
ElemType data[MaxSize]; // 栈中元素
int top; // 栈顶指针,记录的是数组的下标,数组从栈底到栈顶依次增加
}SqStack;
// 初始化一个栈
void InitStack(SqStack &s)
{
s.top = -1; // 不能指向0,因为数组中0代表第一个元素,而当前没有元素在栈中
}
// 判断一个栈是否为空
bool EmptyStack(SqStack s)
{
if(s.top != -1) return false;
else return true;
}
// 把x压栈
bool PushStack(SqStack &s, ElemType x)
{
if(s.top == MaxSize -1) return false; // 如果栈满了
s.top++;
s.data[s.top] = x; // 注意,先把栈顶上移,再进行保存数据
return true;
}
// 出栈操作 ,并且用x保存出栈的元素
bool PopStack(SqStack &s, ElemType &x)
{
if(s.top == -1) return false;
x = s.data[s.top];
s.top --;
return true;
}
// 读取栈顶元素
bool GetTop(SqStack s, ElemType &x)
{
if(s.top == -1) return false;
x = s.data[s.top];
return true;
}
// 清空栈
bool ClearStack(SqStack &s)
{
s.top = -1;
return true;
}
// 因为栈的大小不可改变,所以一开始会给栈分配大片的存储空间
// 一个大片的存储空间会导致空间的浪费 ,所以使用共享栈,让两个栈共同使用一个空间
// 共享栈
typedef struct _SqStack{
ElemType data; // 数据域
int top_1; // 1号栈的栈顶指针
int top_2; // 2号栈的栈顶指针
}_SqStack;
// 初始共享栈
bool Init_SqStack(_SqStack &s)
{
// 两个栈,一个在存储空间的上方,一个在存储空间的下方
s.top_1 = -1; // 1号栈压栈是从上往下压栈
s.top_2 = MaxSize; // 2号栈压栈是从下往上压栈
// s.top_1 + 1 == s.top_2; // 说明共享栈满了
}
int main()
{
return 0;
}
以上代码来源于自己手敲,没有跑过,不保证全对
|