一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
三、算法
顺序栈本质上是顺序表的简化,将数组中下标为0的一端作为栈底,同时附设指针top指示栈顶元素在数组中的位置。
构造函数:初始化一个空栈,将栈顶指针top置为-1;
析构函数:为空;
入栈:如果栈满,抛出上溢;否则,将栈顶指针top加一,在top指向的位置填入元素x;
出栈:如果栈为空,抛出下溢;否则,取出栈顶元素,然后将栈顶指针减一;
取栈顶元素:如果栈不为空,返回top指向的栈顶元素;
判空:如果top==-1成立,则栈为空,否则,栈非空;
输出:如果top==-1,输出“该栈为空栈”,令i=top,当i!=-1时,输出该栈的所有元素。
四、源代码
#include
using namespace std;
const int stacksize=10;
template
class seqstack
{
public:
seqstack(){top=-1;}
~seqstack(){}
void push(T x);
T pop();
T gettop(){if(top!=-1)return data[top];}
int empty(){if(top==-1)return 1;else return 0;}
void print();
private:
T data[stacksize];
int top;
};
template
void seqstack::push(T x)
{
if(top==stacksize-1)
throw"error";
data[++top]=x;
}
template
T seqstack::pop()
{
T x;
if(top==-1)
throw"error";
x=data[top--];
return x;
}
template
void seqstack::print()
{
int i;
if(top==-1)
cout<<"the seqstack is empty!";
i=top;
while(i!=-1)
{
cout<s;
while(flag==1)
{
cout<<"please input the command(1~4):"<>t;
switch(t)
{
case 1:
{
cout<<"please enter the element to be pushed in:";
while(x!=0)
{
cin>>x;
if(x!=0)
s.push(x);
}
cout<
五、运行结果
运行程序,输入1,将2 6 1 9 5 3 8 7 依次入栈,当输入0时,停止入栈;
输入3,输出所有栈元素;
输入2,出栈元素为7;
输入4,此时取栈顶元素8;
输入5,判断栈是否为空,非空,返回0;
输入6,退出。
