2024-3-18
This commit is contained in:
89
Chapter3/ValExpression/SqStack.h
Normal file
89
Chapter3/ValExpression/SqStack.h
Normal file
@@ -0,0 +1,89 @@
|
||||
template <class DT>
|
||||
struct SqStack // 顺序栈
|
||||
{
|
||||
DT* base; // 栈首址
|
||||
int top; // 栈顶指针
|
||||
int stacksize; // 栈容量
|
||||
};
|
||||
|
||||
//基本操作的实现
|
||||
//【算法3.1】 // 初始化栈
|
||||
template <class DT>
|
||||
void InitStack(SqStack<DT>& S, int m)
|
||||
{
|
||||
S.base = new DT[m]; // 申请栈空间
|
||||
if (S.base == NULL) // 申请失败,退出
|
||||
{
|
||||
cout << "未创建成功!";
|
||||
exit(1);
|
||||
}
|
||||
S.top = -1; // 设置空栈属性
|
||||
S.stacksize = m;
|
||||
}
|
||||
|
||||
|
||||
//算法3.2】 // 销毁栈
|
||||
template <class DT>
|
||||
void DestroyStack(SqStack<DT>& S)
|
||||
{
|
||||
delete[] S.base; // 释放栈空间
|
||||
S.top = -1;
|
||||
S.stacksize = 0; // 设置栈属性
|
||||
}
|
||||
|
||||
|
||||
//【算法3.3】 // 入栈
|
||||
template<class DT>
|
||||
bool Push(SqStack<DT>& S, DT e)
|
||||
{
|
||||
if (S.top == S.stacksize - 1) // 栈满,不能入栈
|
||||
return false; // 返回false
|
||||
S.top++;
|
||||
S.base[S.top] = e;
|
||||
return true; // 入栈成功,返回true
|
||||
}
|
||||
|
||||
//【算法3.4】 // 出栈
|
||||
template<class DT>
|
||||
bool Pop(SqStack<DT>& S, DT& e)
|
||||
{
|
||||
if (S.top == -1) // 栈空
|
||||
return false; // 返回false
|
||||
e = S.base[S.top]; // 取栈顶元素
|
||||
S.top--; // 栈顶指针下移
|
||||
return true; // 出栈成功,返回true
|
||||
}
|
||||
|
||||
|
||||
//【算法3.5】 // 获取栈顶元素
|
||||
template<class DT>
|
||||
bool GetTop(SqStack<DT> S, DT& e)
|
||||
{
|
||||
if (S.top == -1) // 栈空
|
||||
return false; // 返回false
|
||||
e = S.base[S.top]; // 栈非空,取栈顶元素
|
||||
return true; // 返回true
|
||||
}
|
||||
|
||||
// 测栈空
|
||||
template<class DT>
|
||||
bool StackEmpty(SqStack<DT> S)
|
||||
{
|
||||
if (S.top == -1) // 空栈,返回true
|
||||
return true;
|
||||
else // 空栈,返回false
|
||||
return false;
|
||||
}
|
||||
|
||||
//显示栈内容
|
||||
template<class DT>
|
||||
void DispStack(SqStack<DT> S)
|
||||
{
|
||||
int i = S.top;
|
||||
while (i >= 0)
|
||||
{
|
||||
cout << S.base[i--] << "\t";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user