数据结构-队列

发布于:2022-07-24 ⋅ 阅读:(162) ⋅ 点赞:(0)

队列的概念及结构

概念

   队列也是一种特殊的线性表,其操作受到限制。只允许在队列的一端进行插入数据操作,而在队列的另一端进行删除数据操作。

   在队列中,进行插入数据操作的一端叫做队尾,其操作叫做入队列或者进队列;而进行删除数据操作的一端叫做队头或者队首,其操作叫做出队列或者离队列。

   如上图所示,n1,n2,n3,n4,n5依次从队尾入队,队头元素是n1,队尾元素是n5;而出队只能从另一端队头出,次序依次为n1,n2,n3,n4,n5。这和我们日常生活中的排队相似,最早排队的也是最早离队的,所以队列的特性可以概括为先进先出(First In First Out,FIFO)。

结构

   队列的实现可以选择顺序表与链表,但因为队列是在两端进行操作,如果选择顺序表来实现,在进行出队操作的时候需要挪动数据,效率会比较低。所以队列的实现一般都是选择单链表,在单链表的头部进行出队,单链表的尾部进行入队;为了避免在入队的时候需要找尾结点,我们可以事先保存单链表尾结点的地址来提高效率。


链队列

初始化QueueInit

   初始化队列,将队列的头指针与尾指针置空,也就是创建一个空队列。

销毁QueueDestroy

   销毁的操作就是先将非出队的元素释放,再将头指针与尾指针置空。

入队QueuePush

   如果入队时,队列为空需要将头指针与尾指针指向第一个元素;而其他情况就是将尾指针的next改为newNode的地址,再将尾指针指向newNode。

出队QueuePop

   当出队时,队列中只剩下一个元素需要先释放最后一个元素,再将头指针与尾指针置空;其他情况就是先保存队头元素下一个元素的地址,先将头指针指向的队头元素释放,然后将头指针改为事先保存好的元素地址。

队头元素QueueFront

队尾元素QueueBack

队列长度QueueSize

   求队列的长度,就是将单链表遍历一遍。

判断是否为空队列QueueEmpty 

   如果队列为空返回true,不为空返回false。


 


网站公告

今日签到

点亮在社区的每一天
去签到