数据结构自学笔记三、队列

本文介绍了队列的基本概念,包括其“先进先出”的特性,并通过实例展示了队列在操作系统中的应用。接着,详细讲解了顺序存储结构的队列,包括普通队列和循环队列的实现,探讨了如何处理队空和队满的状态。最后简要提到了随机存储结构的队列,并分享了作者在自学数据结构过程中的感悟。


(提醒:这只是自学笔记嗷,本人才学疏浅,难免挂一漏万,如果是要系统的学习建议找其他大牛的博客或者买一本教材)

队列的定义

队列是只能在一端进行添加元素的操作(入队),在另一端进行删除元素操作(出队)的线性表。队列元素的特点是“先进先出”。

现实生活中大家都排过队,如果有新来的想要排队,ta必须站在最后一个,不然就是插队了,这是违反规则的;而排在第一个的人如果办完了事情,ta可以直接离开。不过比较坑的是,队列不允许排在中间的人中途离队,意思就是说,你要么别排,要么就一站到底。

队列的应用

还是小学的时候,在我们班流传着这样一种让电脑死机的方法:Ctrl+A+回车。当时没怎么碰过电脑,觉得好厉害好厉害。后来明白了,这其实也就是同时打开许多个程序,让操作系统“忙不过来”,无法及时给用户的操作进行反馈。操作系统在这里使用的就是队列这种数据结构,优先响应用户较先的操作,而只有上一个操作完成,才会响应下一个操作。
不过好像电脑还有多线程这一说,不过这就超出我的知识范围了hhh。

顺序存储结构的队列

普通队列

如同顺序存储的线性表一样,这里采用的是数组的方式生成队列。然后用一个初始值为-1的整型变量rear来指示队尾元素的数组下标。这种方式的优缺点在线性表中已经提过,此处不再赘述。

在现实生活中排队,如果第一个人走了,后面的所有人理应都往前进一个位置。那么我们之前在线性表中讲过了,如果在数组中要进行这个操作,其时间复杂度是O(n),操作比较麻烦,这是我们不希望看到的。

那么有人就说了,干脆前面的人走了就走了!爷就待在原地等,怎么着吧!
在队列中的实现,就是再引入一个整型变量head,记录队头元素的数组下标。

确实,这样能节省时间,可是队列前面的空间就浪费了呀!如果后来还有人想进来排队,结果队尾的人告诉他不好意思排满了,结果那个想排队的人走前面一看:这么大一个空!他不得揍人么

前人又想出了一个办法:循环队列!

循环队列

在线性表一节中,我们提过了循环链表,也就是让链表头尾相连,让尾节点的指针指向头结点。在循环队列中,我们将通过使用head和rear两个“指针”(本质是整型变量)来实现这一点。

首先,先声明一个数组,用来存放队列。不妨设数组长度为10好了。

    int line[10];

定义head和rear两个变量,分别用来指示队列的头和尾。因为总是对head进行删除操作,对rear进行添加操作,因此我们总是希望head是指向第一个元素而rear是指向空位的。所以将head和rear初始化为0

	int head=0,rear=0;

那么我们如何给队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值