数据结构——队列

本文详细探讨了数据结构中的重要元素——队列,包括其基本概念、工作原理及应用实例,帮助读者深入理解这一基础数据结构。
摘要由CSDN通过智能技术生成

队列

1、定义:一种可以实现先进先出的存储结构都叫队列。即一端入一段出。(在两端操作,而栈是在一段进行操作)

2、分类
	链式队列:用链表实现,就是在末尾增加了一个指向尾节点的指针。指向首节点的指针同front表示,不用head
	
	静态队列:用数组实现。静态队列通常都必须是循环队列
	
	循环队列的讲解:
	
		(1)静态队列为什么必须是循环队列
			因为当到达末尾时,front和rear都动不了了,只有是循环的才能继续移动。
		(2)循环队列需要几个参数来确定:
			front(头,删除元素,指向第一个元素)和rear(尾,增加元素,指向最后一个元素的下一个元素)。

		(3)循环队列各个参数的涵义
			
			1)队列初始化时:front和rear都是零
			2)队列非空时:front指向队列的第一个元素,rear指向最后一个有效元素的下一个元素
			3)队列空时:front和rear都指向同一个元素,但此元素不一定是第一个元素。

3、队列伪算法讲解
(1)入队伪算法(两部)
	a:将值存如r所指向的位置
	b:r=(r+1)%素组的长度
(2)出队伪算法
	a:f=f(f+1)%数组的长度
(3)判断循环队列是否为空
	如果front与rear的值相等则该队列一定为空。
(4)如何判断循环队列是否已满
	假定数组长度为N,规定个数为N-1时就为满,即(r+1)%数组长度=f时队列就为满。
	if((r+1)%数组长度==f)
		已满
	else
		不满

4、具体算法实现
(1)队列的结构
	`
	//定义一个队列的结构 
class Queue{
public:	
int* arr;
int front;
int rear;

};
	`
(2)队列的初始化
`
//初始化一个队列,即f和r都为零,开辟队列大小 
int init_queue(Queue* myq)
{
cout<<"输入队列的长度"<<endl;
int a;
cin>>a;
const int len=a;

myq->arr=new int[len];//队列的长度为6,但只能存5个元素
myq->front=0;
myq->rear=0;
return len;		
}

`
(3)判断队列是否为满

//判断队列是否满
bool full_queue(Queue* myq,int len)
{
if((myq->rear+1)%len==myq->front)
return true;
else 
return false;
} 
(4)入队

	`
//入队 
void in_queue(Queue* myq,int len)
{
if(!full_queue(myq,len))
{
	int val;
	cout<<"请输入要插入的值:"<<endl;
	cin>>val;
	myq->arr[myq->rear]=val;
	myq->rear=(myq->rear+1)%len;
	
}
else
	cout<<"数组已满"<<endl;
}
	`

(5)出队
	`
//出队 
void out_queue(Queue* myq,int len)
{
int val;//保留出队的值,供返回使用 
if(myq->front==myq->rear)//首先判断队列是否为空 
	cout<<"队列为空,不能出队"<<endl;
else
	{
		val=myq->arr[myq->front];
		myq->front=(myq->front+1)%len;	
	}
}

	`
(6)遍历一个队列
`
//遍历一个队列

void show_queue(Queue* myq,int len)
{
Queue tmp=*myq;//遍历不能改变队列的结构,所以用一个临时遍历遍历 ,不能是指针结构 
while(tmp.front!=tmp.rear)
{
	cout<<tmp.arr[tmp.front]<<endl;//显示列头的值,队列为空 
	tmp.front=(tmp.front+1)%len;
}
} 
`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值