您的位置:首页 > 其它

实验四:顺序栈和链栈

2017-10-16 17:46 357 查看

一、实验目的

熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。

二、实验过程

1.顺序栈

#ifndef SeqStack_H
#define SeqStack_H
const int StackSize=10;
template
class SeqStack
{
public:
SeqStack();
~SeqStack(){}
void Push(DataType x);  //x入栈
DataType Pop();   //将栈顶元素弹出
DataType GetTop();  //取栈顶元素
int Empty();  //判断栈是否为空
private:
DataType data[StackSize];  //存放栈元素的数组
int top;                   //栈顶指针,指示栈顶元素在数组中的下标
};
#endif

#include"SeqStack.h"

template
SeqStack::SeqStack()
{
top=-1;
}

template
void SeqStack::Push(DataType x)
{
if(top==StackSize-1)throw"上溢";
top++;
data[top]=x;
}

template
DataType SeqStack::Pop()
{
DataType x;
if(top==-1)throw"下溢";
x=data[top--];
return x;
}

template
DataType SeqStack::GetTop()
{
if(top!=-1)
return data[top];
}

template
int SeqStack::Empty()
{
if(top==-1)return 1;
else return 0;
}

#include
using namespace std;            //引入输入输出流
#include"SeqStack.cpp"           //引入类SeqStack的成员函数定义

void main()                   //主函数
{
SeqStackS;            //创建模板类的实例
if(S.Empty())
cout<<"栈为空"<





2.链栈

#ifndef LinkStack_H
#define LinkStack_H

template
struct Node
{
DataType data;
Node * next;
};

template
class LinkStack
{
public:
LinkStack();
~LinkStack();
void Push(DataType x);
DataType Pop();
DataType GetTop();
int Empty();
private:
Node*top;
};
#endif;

#include"LinkStack.h"

template
LinkStack::LinkStack()
{

top=NULL;

}

template
LinkStack::~LinkStack()
{
Node*q=NULL;
while(top!=NULL)
{
q=top;
delete q;
}
}

template
void LinkStack::Push(DataType x)
{
Node *s=NULL;
s=new Node;s->data=x;
s->next=top;top=s;
}

template
DataType LinkStack::Pop()
{
Node *p=NULL;
if(top==NULL)throw"下溢";
int x;
x=top->data;p=top;
top=top->next;
delete p;
return x;
}

template
DataType LinkStack::GetTop()
{
if(top!=NULL)
return top->data;
}

template
int LinkStack::Empty()
{
if(top==NULL)return 1;
else return 0;
}

#include
using namespace std;
#include"1.cpp"

void main()
{
LinkStackS;
if(S.Empty())
cout<<"Link is Enpty"<





三、实验心得

按照书上的部分算法提示,和实验书的源程序,可以写出栈链的程序,书本的理论知识很详细,通过实验可以将他实现。通过实验,可以更对顺序栈和链栈之间的区别更加清晰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: