第三章 栈和队列实验
2014-11-25 23:54
344 查看
一、链栈头文件
#ifndef Linkstack_H #define Linkstack_H template <class Datatpye> struct Node { Datatpye data; Node<Datatpye>*next; }; template <class Datatpye> class Linkstack { public: Linkstack(); void empty(){if(top==NULL)cout<<"此链表为空"<<endl;} void Push(Datatpye a[],int n); Datatpye Gettop(); void Pop(); private: Node<Datatpye>*top; }; #endif
函数定义
#include"Linkstack.h" template <class Datatpye> Linkstack<Datatpye>::Linkstack() //初始化一个空链栈 {top=NULL;} template <class Datatpye> void Linkstack<Datatpye>::Push(Datatpye a[],int n) //入栈操纵 { for(int i=0;i<n;i++) { Node<Datatpye>*s; s=new Node<Datatpye>; s->data=a[i]; s->next=top; top=s; } } template <class Datatpye> void Linkstack<Datatpye>::Pop() //出栈操作 { Node<Datatpye>*p; if(top==NULL)throw "下溢"; p=top; top=top->next; delete p; } template <class Datatpye> Datatpye Linkstack<Datatpye>::Gettop() //取栈顶元素 { if(top!=NULL)return top->data; else return NULL; }实现
#include<iostream> using namespace std; #include"Linkstack.cpp" void main() { Linkstack<int>L; L. empty(); int a[]={1,2,3,4,5}; L.Push(a,5); cout<<"请输出插入数据后栈顶元素"<<endl; cout<<L.Gettop()<<endl; L.Pop(); cout<<"请输出出栈后的栈顶元素"<<endl; cout<<L.Gettop()<<endl; }二、循环队列头文件
#ifndef Cirqueue_H#define Cirqueue_Hconst int Queuesize=10;template <class Datatpye>class Cirqueue{public:Cirqueue();void Enqueue(Datatpye x);Datatpye Dequeue();Datatpye Getqueue();int empty(){front==rear?return 1;return 0;}private:Datatpye data[Queuesize];int front,rear;};#endif函数定义
#include"Cirqueue.h"template <class Datatpye>Cirqueue<Datatpye>::Cirqueue() //初始化一个空队列{front=rear=Queuesize-1;}template <class Datatpye>void Cirqueue<Datatpye>::Enqueue(Datatpye x) //入队操作{if ((rear+1)%Queuesize==front) throw"上溢";rear=(rear+1)%Queuesize;data[rear]=x;}template <class Datatpye>Datatpye Cirqueue<Datatpye>::Dequeue() //出队操作{if(rear==front)throw "下溢";front=(front+1)%Queuesize;return 0;}template <class Datatpye>Datatpye Cirqueue<Datatpye>::Getqueue() //取队头元素{if (rear==front)throw "下溢";int i;i=(front+1)%Queuesize;return data[i];}函数实现
#include<iostream>using namespace std;#include"Cirqueue.cpp"int main(){Cirqueue<int>C;cout<<"请输入要入队的元素个数"<<endl;int n;cin>>n;for(int i=1;i<=n;i++){ int n;cout<<"请输入要输入的元素"<<endl;cin>>n;C.Enqueue(n);}cout<<"栈顶元素为"<<C.Getqueue()<<endl;cout<<"请输入要出队的元素个数"<<endl;int m;cin>>m;for( i=1;i<=m;i++)C.Dequeue();cout<<"栈顶元素为"<<C.Getqueue()<<endl;return 0;}总结:栈:是限定仅在表尾进行插入和删除操作的线性表,栈的元素先进后出队列:是只允许在一段进行插入操作,在另一端进行删除操作的线性表。队列元素先进先出。栈和队列都是受限的线性表,是特殊的线性表。两者都可以用顺序和链表来存储,操作算法主要是构造、入栈(入队)、出栈(出队)、读取栈顶(队头)元素等。
相关文章推荐
- 数据结构第三章实验3.实现环形队列的各种基本运算
- 《数据结构》第三章 栈和队列 实验
- 《数据结构》第三章 栈和队列 实验(顺序栈)
- 《数据结构》第三章 栈和队列 实验
- 《数据结构》第三章 栈和队列 实验(两栈)
- (实验三)《数据结构》第三章 循环队列与链队列验证
- 2449-数据结构实验之栈与队列十:走迷宫
- 数据结构|顺序队列的实现(实验3.3)
- 【2135】数据结构实验之队列一:排队买饭 sdutOJ
- Linux进程间通信(八)---消息队列之msgget()、msgsnd()、msgrcv()及其基础实验
- SDUT 3333 数据结构实验之栈与队列六:下一较大值(二)
- 数据结构编程笔记九:第三章 栈和队列 链队列的实现
- 第三章(3).链队列
- 队列实验refresh的停车场
- 实验3-栈和队列——表达式求值(2133)
- C语言数据结构队列实现舞伴匹配(数据结构第二次实验)
- 《数据结构》实验三: 栈和队列实验
- 第三章栈和队列思维导图
- 第三章 栈和队列
- 《数据结构》第三章 栈和队列 知识结构导图——信管1133-09