赞
踩
首先我们联想一下链表,在单链表中,我们只能对他的链表表尾进行插入,对链表的表头进行结点的删除,这样强限制性的链表,就是我们所说的队列。
也就是说,队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构。
如下图所示,假如你去买票排队,每一列队伍都有一个队尾和对头,先来的先买票,后来的后买,买好的就从对头出去,新来买票的就需要从队尾继续排队。
通常,称进数据的一端为 队尾,出数据的一端为 队头,数据元素进队列的过程称为 入队,出队列的过程称为 出队。
ID:技术让梦想更伟大
作者:李肖遥
我们可以总结如下:
队列是一个线性的数据结构,并且这个数据结构只允许在一端进行插入,另一端进行删除,禁止直接访问除这两端以外的一切数据,且队列是一个先进先出的数据结构。
如上图,队列就像一个两端相通的水管,只允许一端插入,另一端取出,取出的球就不在水管里面了,而先放入管中的球就会先从管中拿出。
队列存储结构的实现有以下两种方式:
(1)顺序队列:在顺序表的基础上实现的队列结构
(2)链队列:在链表的基础上实现的队列结构
两者的区别仅是顺序表和链表的区别,即在实际的物理空间中,数据集中存储的队列是顺序队列,分散存储的队列是链队列。
队列的结点设计与初始化
队列只有链式的设计方法,其本身分为多种队列,如顺序队列和循环队列,还有衍生的优先队列等等,我们以顺序队列的设计为例。
首先是队列的结点设计,我们可以设计出两个结构体,一个结构体Node表示结点,其中包含有一个data域和next指针,如图所示:
其中data表示数据,其可以是简单的类型,也可以是复杂的结构体。
next指针表示,下一个的指针,其指向下一个结点,通过next指针将各个结点链接。
然后我们再添加一个结构体,其包括了两个分别永远指向队列的队尾和队头的指针,看到这里是不是觉得和栈很像?
我们主要的操作只对这两个指针进行操作,如图所示:
其结构体设计的代码可以表示为:<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。