//seqstack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H
#include <iostream>
using namespace std;
const int stacksize=20;
template <class T>
class SeqStack
{
public:
SeqStack(){top=-1;}
void Push(T x);
T Pop();
T GetTop();
bool Empty(){return (top==-1? 1:0);}
void Print(int n); //输出第n个元素
private:
int top;
T data[stacksize];
};
template <class T>
void SeqStack<T>::Push(T x)
{
if(top==stacksize-1) throw "上溢";
top++;
data[top]=x;
}
template <class T>
T SeqStack<T>::Pop()
{
if(top==-1) throw "下溢";
int x=data[top];
top--;
return x;
}
template <class T>
T SeqStack<T>::GetTop()
{
if(Empty())throw "顺序栈为空";
else
return data[top];
}
template <class T>
void SeqStack<T>::Print(int n)
{
if(n>top) throw "该位置没有元素!";
cout<<data[n]<<" ";
cout<<endl;
}
#endif
#include "seqstack.h"
void main()
{
int a[5]={5,6,7,8,9};
SeqStack<int> seq;
for(int i=0;i<5;i++)
seq.Push(a[i]);
try
{
cout<<"刚建立的顺序栈中第六个元素为多少?"<<endl;
seq.Print(6);
}
catch(char*)
{
cout<<"刚建立的顺序栈中没有第六个元素,只有五个元素,如下:\n";
}
for(int j=0;j<5;j++)
{
cout<<"data["<<j<<"]=";
seq.Print(j);
}
cout<<"\n头指针为:data[top]="<<seq.GetTop()<<endl<<endl;
cout<<"依次出栈的元素:";
for(int m=0;m<5;m++)
cout<<seq.Pop()<<" ";
cout<<endl;
cout<<"此时顺序栈是否为空?"<<endl;
if(seq.Empty()) cout<<"是"<<endl;
else cout<<"不是"<<endl;
}