目录
数据结构之循环顺序队列
1、队列的定义
队列(queue)是只允许在⼀端进⾏插⼊操作,另⼀端进⾏删除操作的线性表
队列是⼀种先进先出的线性表,允许插⼊的⼀端称为队尾(rear),允许删除的⼀端称为队头(front)。向队列中插⼊元素称为⼊队,从队列中删除元素称为出队。当队列中没有元素时称为空队列。队列的操作是按先进先出的原则进⾏的,即新添加的元素总是加到队尾,每次离开的元素总是队头的元素。和栈⼀样,队列也是⼀种运算受限制的线性表,所以⼜叫先进先出表(First In First Out),简称FIFO表。
2、顺序队列
假设⼀个队列有n个元素,则顺序存储的队列需要建⽴⼀个⼤于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的⼀端即为队头。
所谓的⼊队,就是在队尾追加⼀个元素,不需要移动任何元素,所以时间复杂度为O(1).
队列的出队是在队头,即下标为0的位置,也就意味着,队列中的所有位置都得向前移动,以保证下标为0的位置,即对头不为空。此时时间复杂度为O(n)。
为了避免当只有⼀个元素时,队头和队尾重合使得处理变得⿇烦,所以引⼊两个指针,front指针 指向队头元素,rear指针 指向队尾元素的下⼀个元素。这样当 front 等于 rear 时,不是队列中有⼀个元素,⽽是表⽰空队列。
假设数组的长度为5,空队列及初始状态如图所⽰,fr