
顺序栈的实现
#include <iostream>
#include <cstdlib>
using namespace std;
const int STACK_INIT_SIZE = 20;
const int ERROR = 0;
const int OK = 1;
const int EMPTY = 0;
typedef int Status;
template <class T>
class SqStack
{
public:
SqStack();
~SqStack();
Status Push(T e);
Status Pop(T &e);
Status GetTop(T &e) const;
int StackLength() const;
Status IsEmpty();
void DispStack();
private:
T * base;
T *top; //栈顶指针
int stacksize;
};
//初始化一个栈
template <class T>
SqStack<T>::SqStack()
{
base = new T[STACK_INIT_SIZE];
top = base;
stacksize = STACK_INIT_SIZE;
}
//释放一个栈
template <class T>
SqStack<T>::~SqStack()
{
delete[] base;
}
//取顺序栈栈顶元素算法
template <class T>
Status SqStack<T>::GetTop(T &e) const
{
if (top == base)
{
return ERROR;
}
e = *(top - 1);
return OK;
}
//顺序栈入栈
template <class T>
Status SqStack<T>::Push(T e)
{
if (top - base >= stacksize)
{
return ERROR;
}
*top++ = e; //先赋值,再加指针
return OK;
}
//顺序栈出栈
template <class T>
Status SqStack<T>::Pop(T &e)
{
if (top == base)
{
return ERROR;
}
e = *--top; //先减指针,再取值
return OK;
}
//求栈长
template <class T>
int SqStack<T>::StackLength() const
{
int sizeCount = 0;
T *p = top - 1;
while (p >= base)
{
sizeCount++;
p--;
}
return sizeCount;
}
template <class T>
Status SqStack<T>::IsEmpty() //空栈为0,非空栈为1;
{
if (top == base)
{
return EMPTY;
}
else
{
return OK;
}
}
template <class T>
void SqStack<T>::DispStack()
{
T *p = top - 1;
while (p >= base)
{
cout << *p << " ";
p--;
}
cout << endl;
}
bool In(char c)
{
if (c>48 && c<57)
{
return false;
}
else
{
return true;
}
}
//判断优先级
char Precede(char o1, char o2

本文探讨了数据结构中栈和队列的实际应用,通过顺序栈的实现,详细阐述了相关操作过程,并提供了参考文献以供深入学习。
最低0.47元/天 解锁文章
1336

被折叠的 条评论
为什么被折叠?



