循环队列的实现
来源:互联网 发布:一句话网络段子精选 编辑:程序博客网 时间:2024/05/18 17:27
/* 队列是一种先进先出的线性表,具有线性表的特性:分为链式队列与顺序队列
顺序队列:用一段地址连续的存储单元存储数据元素,定义两个游标:指向队头
的游标(front)、指向队尾的游标(rear),如果front == rear队列为空,如果
(rear + 1) % MAXSIZE == front队列满(此为循环队列),如普通队列rear==MAXSIZE队列满 */
#include <iostream>
#include <assert.h>
using namespace std;
const int QueueSize=100;
typedef int elemtype;
class CirQueue
{
private:
elemtype data[QueueSize];
int front; //队头
int rear; //队尾
public:
void InitQueue(); //初始化队列,构造一个空队列
void EnQueue(elemtype x); //元素x进队
elemtype DeQueue(); //队头的元素出队
elemtype GetQueue(); //获取队头元素
bool IsEmpty(); //判断队列是否为空
int GetQueueLength(); //返回队列的长度
};
void CirQueue::InitQueue()
{
front=rear=QueueSize-1;
}
void CirQueue::EnQueue(elemtype x)
{
if ((rear+1) % QueueSize ==front) throw "上溢";
rear=(rear+1) % QueueSize;
data[rear]=x;
}
elemtype CirQueue::DeQueue( )
{
if (rear==front) throw "下溢";
front=(front+1) % QueueSize;
return data[front];
}
elemtype CirQueue::GetQueue( )
{
if (rear==front) throw "下溢";
int i=(front+1) % QueueSize;
return data[i];
}
bool CirQueue::IsEmpty() //判断队列是否为空
{
return front == rear ? true : false;
}
int CirQueue::GetQueueLength() //返回队列的长度
{
return (rear - front + QueueSize) %QueueSize;
}
void main()
{
CirQueue cq;
cq.InitQueue();
cq.EnQueue(2);
cq.EnQueue(3);
cout<<cq.DeQueue();
}
顺序队列:用一段地址连续的存储单元存储数据元素,定义两个游标:指向队头
的游标(front)、指向队尾的游标(rear),如果front == rear队列为空,如果
(rear + 1) % MAXSIZE == front队列满(此为循环队列),如普通队列rear==MAXSIZE队列满 */
#include <iostream>
#include <assert.h>
using namespace std;
const int QueueSize=100;
typedef int elemtype;
class CirQueue
{
private:
elemtype data[QueueSize];
int front; //队头
int rear; //队尾
public:
void InitQueue(); //初始化队列,构造一个空队列
void EnQueue(elemtype x); //元素x进队
elemtype DeQueue(); //队头的元素出队
elemtype GetQueue(); //获取队头元素
bool IsEmpty(); //判断队列是否为空
int GetQueueLength(); //返回队列的长度
};
void CirQueue::InitQueue()
{
front=rear=QueueSize-1;
}
void CirQueue::EnQueue(elemtype x)
{
if ((rear+1) % QueueSize ==front) throw "上溢";
rear=(rear+1) % QueueSize;
data[rear]=x;
}
elemtype CirQueue::DeQueue( )
{
if (rear==front) throw "下溢";
front=(front+1) % QueueSize;
return data[front];
}
elemtype CirQueue::GetQueue( )
{
if (rear==front) throw "下溢";
int i=(front+1) % QueueSize;
return data[i];
}
bool CirQueue::IsEmpty() //判断队列是否为空
{
return front == rear ? true : false;
}
int CirQueue::GetQueueLength() //返回队列的长度
{
return (rear - front + QueueSize) %QueueSize;
}
void main()
{
CirQueue cq;
cq.InitQueue();
cq.EnQueue(2);
cq.EnQueue(3);
cout<<cq.DeQueue();
}
0 0
- 队列----循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- Java中几种遍历map的方法
- 安卓HelloWorld问题
- 究竟什么是数据仓库
- ios开发app瘦身
- 我的英文博客
- 循环队列的实现
- Android的Drawable
- react-native创建searchbar
- git 常用命令总结
- 走10级楼梯题目解法
- mongodb3更新数据java.lang.IllegalArgumentException: Invalid BSON field name _id
- java常用算法之螺旋矩阵
- href="javascript:xxx(this);"和onclick="javascript:xxx(this);"的区别
- Android 蓝牙设备与手机之间的数据传输