栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构学习笔记(C++):队列的顺序存储

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构学习笔记(C++):队列的顺序存储

顺序队列存顺序储结构实现的相关说明:

//在队列中进行插入删除都是单向移动的(方向:高端<下标大的>进入,到低端<下标小的>出。)
//因此在这个过程中,如果在数组高端的最大下标处被元素所占,那么此时发生“假溢出”,为什么是假?
//因为此时的数组低端可能没有元素(已经出队了,但是后面的没出,就造成了堵塞的情况),所以数组低端会发生存储空间闲置, 
//所以在完成队列的顺序存储结构时,我们要使用“循环队列 ”,充分调用数组空间,不使他出现空闲状态。
//什么是循环队列? 
//将存储队列的数组看成是首尾相连的数组(可以联想一下数字逻辑里面的卡诺图(结合格雷码)就是循环的表), 
//即将数组下标最小的延续到最大的后面,
//这种思想可以通过取模的方法来实现:
//1、首先设置一个数组长度大小QueueSize 
//2、尾指针(或称尾游标(因为数组的元素位置可以用下标来表示。))的位置为 rear = (rear + 1)% QueueSize 
//3、举例说明:定义数组的长度为 5 ,数组下标为0、1、2、3、4。
//4、假设此时 rear = 4(显然数组已经满了),那么下一个元素的位置应该放在  0 的位置上,因为 (rear + 1) % 5 = 0; 
//这样就实现了队列的循环。
//那么问题来了,如何判断队列的状态呢?
//看图


//开始实现:

 

 

功能:

I-入队
D-出队
G-取队头
E-判空
Q-程序结束

代码:

//数据结构学习笔记(C++):队列的顺序存储 
#include
#define QueueSize 100
using namespace std;

class CirQueue{
	public:
		CirQueue();//构造函数 
		~CirQueue();//析构函数
	public:
		void EnQueue(int x);//入队操作
		int DeQueue();//出队操作
		int GetHead();//取队头元素(并不删除)
		bool Empty();//判空函数
	private:
		int data[QueueSize];//存放队列的数组 
		int front, rear;//游标,队头队尾指针		
};

CirQueue::CirQueue()//定义构造函数 
{
	rear = front = QueueSize - 1;//使队头队尾指向同一位置,一般指向数组高端 
} 

CirQueue::~CirQueue()//定义析构函数
{
	//循环队列是静态存储分配,在循环队列变量退出作用域时自动释放所占内存单元,因此,循环队列无需销毁,所以析构函数为空。 
}
 
void CirQueue::EnQueue(int x)//定义入队函数
{
	if((rear + 1) % QueueSize == front ) throw "上溢";
	rear = (rear + 1) % QueueSize;
	data[rear] = x; 
}
 
int CirQueue::DeQueue()//出队函数定义
{
	if(rear == front) throw "下溢";
	front = (front + 1) % QueueSize;//队头在循环意义下加一 
	return data[front];//返回队头元素 
} 

int CirQueue::GetHead()//取队头函数定义
{
	if(rear == front) throw "下溢";
	return data[(front + 1 ) % QueueSize];//不修改队头指针 
}

bool CirQueue::Empty()//判断对空函数
{
	return (rear == front) ? true:false;
} 

int main()
{	
	CirQueue cqueue;
	char command;
	int x;
	try{
		while(cin>>command)
		{
			if(command == 'Q')
				return 0;
			switch(command)
			{
				case 'I':
					cout<<"输入入队元素:";
					cin>>x;
					cqueue.EnQueue(x);
					cout<<"入队操作完成"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号