顺序栈的实现
顺序栈通过数组来实现,和顺序表类似。
栈遵循先进后出的基本原则(FILO)。
SeqStack.h头文件
//SeqStack.h
#include <assert.h>
#include <iostream>
using namespace std;
const int stackIncreament=20;
template <class T>
class SeqStack
{
public:
SeqStack(int sz=50);
~SeqStack(){delete []elements;}
void Push(const T& x);
bool Pop(T& x);
bool Pop();
bool gettop(T& x);
T getTop();
bool IsEmpty()const{return (top==-1)?true:false;}
bool IsFull()const{return (top==maxSize-1)?true:false;}
int getSize()const{return top+1;}
void MakeEmpty(){top=-1;}
void output(void);
private:
T *elements;
int top;
int maxSize;
void overflowProcess();
};
template <class T>
SeqStack<T>::SeqStack(int sz):top(-1),maxSize(sz)
{
elements=new T[maxSize];
assert(elements!=NULL);
}
template <class T>
void SeqStack<T>::overflowProcess()
{
T* newArray=new T[maxSize+stackIncreament];
if (newArray==NULL)
{
cout<<"Distribution failure!"<<endl;
}
for (int i=0;i<=top;i++)
{
newArray[i]=elements[i];
}
maxSize+=stackIncreament;
delete []elements;
elements=newArray;
}
template <class T>
void SeqStack<T>::Push(const T& x)
{
if (IsFull())
overflowProcess();
elements[++top]=x;
}
template <class T>
bool SeqStack<T>::Pop(T& x)
{
if (IsEmpty())
return false;
x=elements[top--];
return true;
}
template <class T>
bool SeqStack<T>::Pop()
{
if (IsEmpty())
return false;
top--;
return true;
}
template <class T>
bool SeqStack<T>::gettop(T& x)
{
if (IsEmpty())
return false;
x=elements[top];
return true;
}
template <class T>
T SeqStack<T>::getTop()
{
if (IsEmpty())
return 0;
return elements[top];
}
template <class T>
void SeqStack<T>::output(void)
{
cout<<"top="<<top<<endl;
for (int i=0;i<=top;i++)
{
cout<<i<<":"<<elements[i]<<endl;
}
}
main.cpp测试
//main.cpp
#include <iostream>
#include "SeqStack.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
int x=1,y=2,z=3;
SeqStack<int> a;
a.Push(x);
a.Push(y);
a.Push(z);
a.output();
return 0;
}