实验三、链队列和顺序队列
来源:互联网 发布:mac qq 编辑:程序博客网 时间:2024/06/05 16:22
一、实验目的
1、 熟练掌队列的结构特点,掌握队列的顺序存储和链式存储结构和实现。
2、 学会使用队列解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模:
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
三、代码
顺序队列:
#ifndef CirQueue_H#define CirQueue_Hconst int QueueSize=100;template<class DataType>class CirQueue{ public: CirQueue(){front=rear=QueueSize=-1;} ~CirQueue(){} void EnQueue(DataType x); DataType DeQueue(); DataType GetQueue(); int Empty(){front==rear?return 1;return 0;} private: DataType data[QueueSize]; int front,rear;};#endif;#include"CirQueue.h"template<class DataType>CirQueue<DataType>::CirQueue(){rear=front=QueueSize-1;}template<class DataType>void CirQueue<DataType>::EnQueue(DataType x){ if((rear+1)%QueueSize==front) throw"上溢"; rear=(rear+1)%QueueSize; data[rear]=x;}template<class DataType>DataType CirQueue<DataType>::DeQueue(){if(rear==front)throw"下溢";front=(front+1)%QueueSize;return data[front];}template<class DataType>DataType CirQueue<DataType>::GetQueue(){ if(rear==front)throw"下溢"; i=(front+1)%QueueSize; return data[i];}template<class DataType>int CirQueue<DataType>::Empty(){if(front==rear)return 1;elsereturn 0;}#include<iostream>using namespace std;#include"CirQueue.cpp"void main(){CirQueue<int> C;if(C.Empty())cout<<"队列为空"<<endl;elsecout<<"队列非空"<<endl;cout<<"元素8和6执行入队操作:"<<endl;try{C.EnQueue(8);C.EnQueue(6);}catch(char*wrong){cout<<wrong<<endl;}cout<<"查看队头元素:"<<;cout<<"C.GetQueue()"<<endl;cout<<"执行出队操作:"<<endl;try{C.DeQueue();}catch(char*wrong){cout<<wrong<<endl;}cout<<"查看队头元素:"<<endl;cout<<C.GetQueue()<<endl;}
链队列:
#ifndef LinkQueue_H#define LinkQueue_Htemplate<class DataType>struct Node{ DataType data; Node<DataType>*next;};template<class DataType>class LinkQueue{ public: LinkQueue(); ~LinkQueue(); void EnQueue(DataType x); DataType DeQueue(); DataType GetQueue(); int Empty; private: Node<DataType>*front,*rear;};#endif;#include"LinkQueue.h"template<class DataType>LinkQueue<DataType>::LinkQueue(){ Node<DataType>*s=NULL; s=new Node<DataType>; s->next=NULL; front=rear=s;}template<class DataType>LinkQueue<DataType>::~LinkQueue{ Node<DataType>*p=NULL; while(front!=NULL) { p=front->next; delete front; front=p; }}template<class DataType>void LinkQueue<DataType>::EnQueue(DataType x){ Node<DataType>*s=NULL; s=new Node<DataType>; s->data=x; s->next=NULL; rear->next=s;rear=s;}template<class DataType>DataType LinkQueue<DataType>::DeQueue(){ Node<DataType>*p=NULL; int x; if(rear==front)throw"下溢"; p=front->next; x=p->data; front->next=p->next; if(p->next==NULL) rear=front; delete p; return x;}template<class DataType>DataType LinkQueue<DataType>::GetQueue(){ if(front!=rear) return front->next->data;}template<class DataType>int LinkQueue<DataType>::Empty(){ if(front==rear) return 1; else return 0;}#include<iostream>using namespace std;#include"LinkQueue.cpp"void main(){ LinkQueue<int>Q; if(Q.Empty()) cout<<"队列为空"<<endl; else cout<<"队列非空"<<endl; cout<<"元素8和6执行入队操作:"<<endl; try { Q.EnQueue(8); Q.EnQueue(6); } catch(char*wrong) { cout<<wrong<<endl; } cout<<"查看队头元素:"<<endl; cout<<Q.GetQueue()<<endl; cout<<"执行出队操作:"<<endl; try { Q.DeQueue(); } catch(char*wrong) { cout<<wrong<<endl; } cout<<"查看队头元素:"<<endl; cout<<Q.GetQueue()<<endl;}
四、运行结果
顺序队列:
队列为空
元素8和6执行入队操作:
查看队头元素:
8
执行出队操作
查看队头元素:
6
Press any key to continue
链队列:
队列为空
元素8和6执行入队操作:
查看队头元素:
8
执行出队操作
查看队头元素:
6
Press any key to continue
五、心得和总结
通过这次实验,我对链队列和顺序队列有了进一步了解。实验过程中,依然无法完全自主完成,仍然需要借助书本来完成实验。但试验过后对链队列和顺序队列掌握得更清晰。
阅读全文
0 0
- 实验三、链队列和顺序队列
- 实验三 顺序队列与链队列
- 实验三:顺序栈和链队列验证实验
- 实验三 顺序队列
- 实验三顺序队列
- 实验四 顺序队列和链队列
- 实验四:顺序队列(循环队列)和链队列
- 顺序队列和链队列的实现(实验3.2)
- 实验三 链队列
- 实验三链队列
- 实验3.2 顺序队列&链队列
- 顺序队列和链队列
- 实验三:顺序队列的实现
- 实验三之顺序队列的实现
- 实验三 栈和队列
- 实验三:栈和队列
- 实验三栈和队列
- 实验三 栈和队列
- Leetcode 447 Number of Boomerangs
- pid max导致fork: Cannot allocate memory 的分析及解决办法
- hbase 源代码解析(23)truncate 和truncate_preserve流程分析
- lua解决八皇后问题
- Linux系统网卡名称固化
- 实验三、链队列和顺序队列
- Git简介
- Hbase遍历方式
- 171024—函数自学【知识点初识】
- C++如何在.h头文件中直接定义函数
- 来自Java老师上课实例
- 15Python中的面向对象
- 通过db.properties文件的存放位置谈java项目及Web项目的路径问题
- 使用Bootstrap和Vue实现用户信息的编辑