数据结构学习日志之六--队列

和栈相反,队列是一种先进先出的线性表。它只允许在表的一端插入,而在另一端删除元素。

队列也有两种存储表示:

用链表表示的队列简称为链队列。一个链队列显然需要两个分别只是队头和队尾的指针,分别称为头指针和尾指针才能唯一确定。

队列和线性表的单链表一样,为了操作方便,队列也有一个头结点,并令头指针指向头结点。空链表则是头指针和尾指针都指向头结点。


循环队列:

在队列的顺序存储结构中,除了用一组地址连续的存储单元一次存放从队列头到队列尾的元素之外,还需要front和rear两个指针分别指向队列头和队列尾,为了方便,我们规定front=rear=0为空队列,当加入新元素的时候,rear+1,当删除元素时,front+1,操作如图,


假设当前为队列分配的最大空间为6,则当队列处于d的状态不可再继续插入新的队尾元素,不然就会数组越界,扩大数组空间又浪费了头指针之前的空间。这时候可以把队列设计成一个环状的空间,如图


此时只凭front==rear不能判断队列是否为空,原因如图


此时有两种解决办法,一种是设置一个标志位以区别队列是空还是满;第二个是少用一个元素空间,约定以“队列头指针在队列尾指针的下一位置上”作为队列呈“满”的状态

猜你喜欢

转载自blog.csdn.net/chanbendong/article/details/79613257