数据结构6_顺序队列(循环队列)
2014-05-27 15:19
337 查看
本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题,问题情况如下,
![](http://images.cnitblog.com/blog/633833/201405/271518584316084.jpg)
解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头
![](http://images.cnitblog.com/blog/633833/201405/271518591036712.jpg)
但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢这里有两种方案
![](http://images.cnitblog.com/blog/633833/201405/271518595251884.jpg)
本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法
![](http://images.cnitblog.com/blog/633833/201405/271519000417026.jpg)
代码如下:
来自为知笔记(Wiz)
![](http://images.cnitblog.com/blog/633833/201405/271518584316084.jpg)
解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头
![](http://images.cnitblog.com/blog/633833/201405/271518591036712.jpg)
但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢这里有两种方案
![](http://images.cnitblog.com/blog/633833/201405/271518595251884.jpg)
本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法
![](http://images.cnitblog.com/blog/633833/201405/271519000417026.jpg)
代码如下:
#include<iostream> using namespace std; //该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但新元素无法进入队列的情况 // class SeqQueue { int *data; int front; int rear; int cap; //存储队列容量 int length; //当前队列长度 public: SeqQueue(int length) { data=NULL;//data初始化为NULL,用于后面的if语句判断 data=new int[length]; //分配数组空间 this->cap=length; if(!data) { cout<<"OVERFLOW"<<endl; return; } front=rear=0; this->length=0; //当前长度初始化为0 cout<<"The Queue is constructed"<<endl; } void EnQueue(int e) //入列函数 { if((rear+1)%cap==front) { cout<<"The queue is full"<<endl; return; } length++; data[rear]=e; rear=(rear+1)%cap; //判断是否超出最大值,超出时回到起点 } void DeQueue(int &e) //出列 { if(front==rear) { cout<<"The queue is empty"<<endl; return; } e=data[front]; length--; front=(front+1)%cap; } void show() //显示队列所有节点, { if(front==rear) { cout<<"The queue is empty"<<endl; return; } int q=front; int i=1; while(q!=rear) { cout<<"The"<<i<<"th queue node is: "<<data[q]<<endl; q=(q+1)%cap; i++; } cout<<"_________________________________"<<endl; } }; void main() { SeqQueue a(4); int num; a.EnQueue(1); a.DeQueue(num); a.DeQueue(num); a.EnQueue(2); a.DeQueue(num); a.EnQueue(3); a.EnQueue(4); a.EnQueue(5); a.EnQueue(6); a.show(); }
来自为知笔记(Wiz)
相关文章推荐
- [数据结构][适用循环队列和非循环队列]顺序队列的实现。
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构 — 6.顺序队列(循环)实现二叉树层次遍历
- 数据结构之队列的顺序表示及其实现(循环队列)
- 数据结构_线性表_顺序队列_循环队列_链队列
- 数据结构-循环顺序队列的基本操作
- 数据结构---队列---循环队列---顺序存储
- 数据结构-循环顺序队列&链队列
- 数据结构-->(循环)队列 【队列的顺序实现】ADT
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构-- 队列 循环与顺序
- 数据结构-队列的顺序存储(循环队列)
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构学习----顺序循环队列(Java实现)
- 【数据结构】循环队列的顺序实现
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- 数据结构(5)——循环队列的顺序表示和实现
- 数据结构(C实现)------- 顺序队列(循环队列之计数器实现)
- 数据结构学习之循环队列(顺序存储)
- 数据结构-循环队列顺序存储