仅供参考
#include <iostream>
using namespace std;
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
// Status 是函数的类型 其值是函数结果状态代码
typedef int Status;
typedef int SElemType;
//栈数据结构
typedef struct Stack
{
SElemType *base; //栈底指针 不变
SElemType *top; //栈顶指针 一直在栈顶元素上一个位置
int stacksize; //栈可用的最大容量
}SqStack;
// 初始化操作
Status InitStack(SqStack &S);
// 销毁栈
Status DestroyStack(SqStack &S);
// 判断S是否为空栈
Status StackEmpty(SqStack &S);
// 求栈的长度
Status StackLength(SqStack &S);
// 取栈顶元素
Status GetTop(SqStack &S, SElemType &e);
// 栈置空操作
Status ClearStack(SqStack &S);
// 入栈操作
Status Push(SqStack &S, SElemType e);
// 出栈操作
Status Pop(SqStack &S, SElemType &e);
int main() {
// 初始化操作
SqStack S;
SElemType e = 0;
InitStack(S);
// 入栈操作
e = 11;
Push(S, e);
e = 22;
Push(S, e);
e = 33;
Push(S, e);
// 判断S是否为空栈
Status ret = StackEmpty(S);
if (ret == TRUE){
cout << "空栈" << endl;
} else{
cout << "非空栈" << endl;
}
// 求栈的长度
int length = StackLength(S);
cout << "栈的长度: " << length << endl;
// 取栈顶元素
GetTop(S, e);
cout << "栈顶元素: " << e << endl;
// 出栈操作
Pop(S, e);
cout << "出栈元素: " << e << endl;
// 栈置空操作
ClearStack(S);
// 判断S是否为空栈
ret = StackEmpty(S);
if (ret == TRUE){
cout << "空栈" << endl;
} else{
cout << "非空栈" << endl;
}
// 销毁栈
DestroyStack(S);
return 0;
}
// 初始化操作
Status InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
if (!S.base) exit(OVERFLOW); // 储存分配失败
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
// 销毁栈
Status DestroyStack(SqStack &S){
if (S.base){
delete S.base;
S.stacksize = 0;
S.base = S.top = nullptr;
}
return OK;
}
// 判断S是否为空栈
Status StackEmpty(SqStack &S){
if (S.base == S.top) return TRUE;
else return FALSE;
}
// 求栈的长度
int StackLength(SqStack &S){
return (int)(S.top-S.base);
}
// 取栈顶元素
Status GetTop(SqStack &S, SElemType &e){
S.top--;
e = *S.top;
return OK;
}
// 栈置空操作
Status ClearStack(SqStack &S){
if (S.top) S.top = S.base;
return OK;
}
// 入栈操作
Status Push(SqStack &S, SElemType e){
if (S.top - S.base == S.stacksize) return ERROR; // 满栈
*S.top++ = e;
return OK;
}
// 出栈操作
Status Pop(SqStack &S, SElemType &e){
if (S.top == S.base) return INFEASIBLE; // 下溢
e = *S.top--;
return OK;
}
测试:
非空栈
栈的长度: 3
栈顶元素: 33
出栈元素: 33
空栈