本篇文章将结合《算法》第4版、业界大牛的博客和自己的理解,具体描述队列的一些概念,如有错误,请大佬指出。如有侵权,请联系我删除,谢谢。
队列
1.基本概念
队列是与栈不太相同的线性结构,它是允许在一端进行插入,另一端进行删除的线性表。允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素;允许删除的一端称为队头,通常用一个称为头指针(front)的指针指向头元素的前一个位置。因此,队列又被称为“先进先出”的线性表。
2.循环队列及其运算
循环队列,顾名思义,就是将队列存储空间的最后一个位置绕道第一个位置,形成逻辑上的环状空间,使得线性结构可供队列循环使用。
在循环队列中,用尾指针指向队列的尾元素,用头指针指向头元素的前一个位置。所以,从头指针所指向的后一个位置直到尾指针指向的位置之间所有的元素均为队列中的元素。当rear=front时,循环队列的状态有2种:可能是队列满,也可能是队列空。为了区分这两种情况,通常增加一个标志量S,S值的定义如下:
S = {
0,表示循环队列为空
1,表示循环队列非空
}
由此判断队列空和队列满这2种情况:
当S=0时,循环队列为空;
当S=1时,且front=rear时,循环队列满。
循环队列中计算所有元素总数的方式:
(rear - front + 线性表总长)% 线性表总长
循环队列的基本运算有2种:
-
入队运算
是指在循环队列的队尾加入一个新元素。首先队尾指针进1(即rear=rear+1),然后在rear指针指向的位置插入新元素。当S=1的时候,循环队列满,此时进行入队运算,会发上"上溢"错误。 -
退队运算
是指在循环队列的排头位置退出一个元素,并赋给指定的变量。首先头指针进1(front = front +1),然后删除front指针指向的位置的元素。当S=0的时候,循环队列为空,此时进行退队运算,会发生"下溢"错误。
这一篇讲的是队列的基本要点,内容不多。下一篇讲链表的一些概念和运算。敬请期待哦<( ̄︶ ̄)>。
网友评论