一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
1、 自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
三、源程序
#include<iostream>
using namespace std;
const int Maxsize=100;
template<class T>
class SeqStack
{
public:
SeqStack();
~SeqStack(){}
void Push(T x);
T Pop();
T GetTop();
void Dec(T x,int r);
int Empty();
private:
T data[Maxsize];
int top;
};
template<class T>
SeqStack<T>::SeqStack()
{
top=-1;
}
template<class T>
void SeqStack<T>::Push(T x)
{
if(top==Maxsize-1)throw"上溢";
top++;
data[top]=x;
}
template<class T>
T SeqStack<T>::Pop()
{
T x;
if(top==-1)throw"下溢";
x=data[top--];
return x;
}
template<class T>
T SeqStack<T>::GetTop()
{
if(top!=-1)
return data[top];
}
template<class T>
int SeqStack<T>::Empty()
{
if(top==-1)return 1;
else return 0;
}
int main()
{
int n,i,j,k;
SeqStack<int> S;
if(S.Empty())
cout<<"栈为空"<<endl;
else
cout<<"栈非空"<<endl;
cout<<"输入要入栈的个数:";cin>>n;
cout<<"对数据执行入栈"<<endl;
for(i=0;i<n;i++)
{
int t;cout<<"输入数据:";cin>>t;
S.Push(t);
}
cout<<"栈顶元素为:";
cout<<S.GetTop()<<endl;
cout<<"输入要出栈的个数:";cin>>j;
cout<<"执行出栈:"<<endl;
for(k=0;k<j;k++)
{
S.Pop();
}
cout<<"栈顶元素为:";
cout<<S.GetTop()<<endl;
return 0;
}
四、实验结果
五、实验心得
栈特点就是先进后出、后进先出;从一个口进去,从同一个口出去。栈是限定仅在尾表进行插入和删除操作的线性表,允许插入和删除的一端为栈顶,另一端为栈底。
顺序栈的存储结构顾名思义就是顺序结构,顺序栈本质上是顺序表的简化,唯一需要确定的是用用数组的哪一端表示栈底。
我写的程序是在主函数的时候,可以自己定入栈的个数和入栈的数据,还有出栈 的次数。这样就不用回到源程序修改数据,可以更加灵活地运用。