实验四:顺序队列(循环队列)和链队列
来源:互联网 发布:知乎如何删除话题 编辑:程序博客网 时间:2024/05/19 13:08
一、实验目的
熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
二、实验过程
1.循环队列#ifndef CirQueue_H #define CirQueue_H const int QueueSize=100; //定义存储队列元素的数组的最大长度 template//定义模板类CirQueue class CirQueue { public: CirQueue( ); //构造函数,置空队 ~ CirQueue( ); //析构函数 void EnQueue(DataType x); //将元素x入队 DataType DeQueue( ); //将队头元素出队 DataType GetQueue( ); //取队头元素(并不删除) int Empty( ); //判断队列是否为空 private: DataType data[QueueSize]; //存放队列元素的数组 int front, rear; //队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置 }; #endif #include "CirQueue.h" template CirQueue ::CirQueue( ) { front=rear=QueueSize-1; } template CirQueue ::~CirQueue( ) { } template void CirQueue ::EnQueue(DataType x) { if ((rear+1) % QueueSize ==front) throw "上溢"; rear=(rear+1) % QueueSize; //队尾指针在循环意义下加1 data[rear]=x; //在队尾处插入元素 } template DataType CirQueue ::DeQueue( ) { if (rear==front) throw "下溢"; front=(front+1) % QueueSize; //队头指针在循环意义下加1 return data[front]; //读取并返回出队前的队头元素,注意队头指针 } template DataType CirQueue ::GetQueue( ) { int i; if (rear==front) throw "下溢"; i=(front+1) % QueueSize; //注意不要给队头指针赋值 return data[i]; } template int CirQueue ::Empty( ) { if (front==rear) return 1; else return 0; } #include using namespace std;#include "CirQueue.cpp"void main(){CirQueue Q;if (Q.Empty())cout<<"队列为空"<
2.链队列
#ifndef LinkQueue_H#define LinkQueue_Htemplatestruct Node{DataType data;Node *next;};template class LinkQueue{public:LinkQueue();~LinkQueue();void EnQueue(DataType x); //将元素x入队DataType DeQueue(); //将队头元素出队DataType GetQueue(); //取链队列的队头元素int Empty(); //判断链队列是否为空private:Node *front,*rear;};#endif;#include "LinkQueue.h"template LinkQueue ::LinkQueue(){Node *s=NULL;s=new Node ;s->next=NULL;front=rear=s;}template LinkQueue ::~LinkQueue(){Node *p=NULL;while(front!=NULL){p=front->next;delete front;front=p;}}template void LinkQueue ::EnQueue(DataType x){Node *s=NULL;s=new Node ;s->data=x; //申请一个数据域为x的结点ss->next=NULL;rear->next=s;rear=s; //将结点s插入到队尾}template DataType LinkQueue ::DeQueue(){Node *p=NULL;int x;if(rear==front)throw"下溢";p=front->next;x=p->data; //暂存队头元素front->next=p->next; //将队头元素所在结点摘链if(p->next==NULL)rear=front; //判断出队前队列长度是否为1delete p;return x;}template DataType LinkQueue ::GetQueue(){if(front!=rear)return front->next->data;}template int LinkQueue ::Empty(){if(front==rear)return 1;elsereturn 0;}#include using namespace std;#include "LinkQueue.cpp"void main(){LinkQueue Q; //创建模板类的实例if(Q.Empty())cout<<"队列为空"<
三、实验心得
我发现顺序栈。链栈、顺序队列和链队列之间有许多相似的地方,所以按照书上的部分算法提示,和实验书的源程序,便可以可以写出循环队列的程序,通过实验,可以更对循环队列和链队列之间的区别更加清晰。阅读全文
0 0
- 实验四:顺序队列(循环队列)和链队列
- 实验四 顺序队列和链队列
- 实验四 顺序队列、链队列(JavaScript)
- 实验三、链队列和顺序队列
- 循环队列(顺序队列)
- 循环队列(顺序队列)
- 顺序队列(循环队列)
- 顺序队列 - 循环队列 - 链队列
- 实验四 顺序栈和链队列的操作
- 顺序队列(循环队列)和链队列的C代码实现
- java队列实现(顺序队列、链式队列、循环队列)
- java队列实现(顺序队列、链式队列、循环队列)
- 顺序队列和链队列
- 循环队列和链队列
- 循环队列和链队列
- 顺序队列和链队列的实现(实验3.2)
- 实验3.2 顺序队列&链队列
- 实验三 顺序队列与链队列
- 多线程下载文件!Demo
- 设置图片在正方形区域内左右上下移动
- STM32学习之:定时器时间计算
- Linux下如何挂载NTFS格式U盘(替代法)
- Windows 安装MYSQL 5.7服务
- 实验四:顺序队列(循环队列)和链队列
- 20171015memo1
- leetcode 657. Judge Route Circle
- jmeter解决接口返回数据乱码问题
- redhat7上redis-cluster环境搭建
- 【mui】复选框、单选框、使用js获取选择值
- 新增功能测试的测试点
- [转载]Coursera课程批量下载(保持资源原目录结构)
- 分治法