顺序栈和链栈的基本操作

来源:互联网 发布:桥梁三维建模软件 编辑:程序博客网 时间:2024/05/22 16:44

一、实验目的

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

2、      学会使用栈解决实际问题。

二、实验内容

自己确定结点的具体数据类型和问题规模:

分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。


三、实验代码

1.顺序栈的源代码

const int StackSize=10;template<class DataType>class SeqStack{public:SeqStack();~SeqStack(){};void Push(DataType x);DataType Pop();DataType GetTop();int Empty();private:DataType data[StackSize];int top;};template<class DataType>SeqStack<DataType>::SeqStack(){top=-1;}template<class DataType>void SeqStack<DataType>::Push(DataType x){if(top==StackSize-1)throw"上溢";top++;data[top]=x;}template<class DataType>DataType SeqStack<DataType>::Pop(){DataType x;if(top==-1)throw"下溢";x=data[top--];return x;}template<class DataType>DataType SeqStack<DataType>::GetTop(){if (top!=-1)return data[top];}template<class DataType>int SeqStack<DataType>::Empty(){if(top==-1)return 1;else return 0;}#include <iostream>using namespace std;int main(){SeqStack<int>S;if(S.Empty())cout<<"栈为空"<<endl;elsecout<<"栈非空" <<endl;cout<<"对9和8执行入栈操作"<<endl;S.Push(9);S.Push(8);cout<<"栈顶元素为:"<<endl;cout<<S.GetTop()<<endl;cout<<"执行一次出栈操作:"<<endl;S.Pop();cout<<"栈顶元素为:"<<endl;cout<<S.GetTop()<<endl; } 
2.顺序栈的实验结果



3.链栈的源代码

#include <iostream>using namespace std;template<class DataType>struct Node{DataType data;Node<DataType>*next;};template<class DataType>class LinkStack{public:LinkStack(){top=new Node<DataType>; top=NULL;};~LinkStack(){};void Push(DataType x);DataType Pop();DataType GetTop();int Empty();private:    Node<DataType>*top;};template<class DataType>void LinkStack<DataType>::Push(DataType x){Node<DataType>*s;s=new Node<DataType>;s->data=x;s->next=top;top=s;}template<class DataType>DataType LinkStack<DataType>::Pop(){DataType x;if(top==NULL)throw"下溢";else{Node<DataType>*p;p=new Node<DataType>;p=top;    x=p->data;    top=top->next;    delete p;    return x;}}template<class DataType>DataType LinkStack<DataType>::GetTop(){if (top!=NULL);return top->data;}template<class DataType>int LinkStack<DataType>::Empty(){if(top==NULL)return 1;else return 0;}int main(){LinkStack<int>S;if(S.Empty())cout<<"栈为空"<<endl;elsecout<<"栈非空" <<endl;cout<<"对9和8执行入栈操作"<<endl;S.Push(9);S.Push(8);cout<<"栈顶元素为:"<<endl;cout<<S.GetTop()<<endl;cout<<"执行一次出栈操作:"<<endl;S.Pop();cout<<"栈顶元素为:"<<endl;cout<<S.GetTop()<<endl; } 
4.链栈的实验结果




四、心得

       这次实验我通过查阅书上的资料和向同学提问,最终操作并调试出了顺序栈和链栈的代码。在调试的过程中仍然会遇到很多细节上的错误,比如少加了分号,或者是打错符号等细节上的错误,也会有一些是声明与定义上的错误,通过自己的查找与同学的提示最终修改成功,基本掌握了顺序栈和链栈的操作。