?
?
顺序栈实现太简单了,直接看代码吧
导向链接:栈的建立【包括入栈出栈显示】(基于单链表实现)_inbSorryMaker的博客-CSDN博客
//基本栈的结构
template <class E> //模板
class Stack { //栈的类定义
public:
Stack(){ }; //构造函数
virtual void Push(E x) = 0; //进栈
virtual bool Pop(E& x) = 0; //出栈
virtual bool getTop(E& x) = 0; //取栈顶
virtual bool IsEmpty() = 0; //判栈空
virtual bool IsFull() = 0; //判栈满
};
?顺序栈头文件
#include <assert.h>
#include <iostream.h>
#include “stack.h”
template <class E>
class SeqStack : public Stack<E> { //顺序栈类定义
private:
E *elements; //栈元素存放数组
int top; //栈顶指针
int maxSize; //栈最大容量
void overflowProcess(); //栈的溢出处理
public:
SeqStack(int sz =50); //构造函数
~SeqStack() { delete []elements; } //析构函数
void Push(E x); //进栈
bool Pop(E& x); //出栈
bool getTop(E& x); //取栈顶内容
bool IsEmpty() const { return top == -1; }
bool IsFull() const { return top == maxSize-1; }
};
具体实现
template <class E>
void SeqStack<E>::overflowProcess() {
//私有函数:当栈满则执行扩充栈存储空间处理
E *newArray = new E[2*maxSize]; //创建更大的存储数组
for (int i = 0; i <= top; i++)
newArray[i] = elements[i];
maxSize += maxSize;
delete [ ]elements;
elements = newArray; //改变elements指针
};
template <class E>
void SeqStack<E>::Push(E x) {
//若栈不满, 则将元素x插入该栈栈顶, 否则溢出处理
if (IsFull() == true) overflowProcess; //栈满
elements[++top] = x; //栈顶指针先加1, 再进栈
};
template <class E>
bool SeqStack<E>::Pop(E& x) {
//函数退出栈顶元素并返回栈顶元素的值
if (IsEmpty() == true) return false;
x = elements[top--]; //栈顶指针退1
return true; //退栈成功
};
template <class E>
bool Seqstack<E>::getTop(E& x) {
//若栈不空则函数返回该栈栈顶元素的地址
if (IsEmpty() == true) return false;
x = elements[top];
return true;
};
|