和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个整型变量 front和rear分别指示队列头元素及队列尾元素
1.队列的顺序表示
typedef struct
{
int *base; // 分配存储空间
int front; // 队头指针
int rear; // 队尾指针
}SqQueue;
- 为了在C语言中描述方便起见,在此约定:初始化创建空队列时,令font=rear=0,每当插入新的队列尾元索时,尾指针rear增1;每当删除队列头元素时,头指针 front增1。因此,在非空队列头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置,如图:

- 假设当前队列分配的最大空间为6,则当队列处于图(d)所示的状态时不可再继续入新的队尾元素,否则会出现溢出现象,即因数组越界而导致程序的非法操作错误。事实上,此时队列的实际可用空间并未占满,所以这种现象称为“假溢出”。这是由“队尾入队,队头出队”这种受限制的操作造成的。怎样解决这种“假溢出”问题呢?一个较巧妙的办法是将顺序队列变为一个环状的空间,如图所示,称之为循环队列。

- 头、尾指针以及队列元素之间的关系不变,只是在循环队列中,头、尾指针“依环状增1”的操作可用“模”运算来实现。通过取模,头指针和尾指针就可以在顺序表空间内以头尾衔接的方式循环移动。
本文详细介绍了循环队列的概念,包括其顺序表示、如何解决假溢出问题以及循环队列的初始化、求队列长度、入队、出队等操作。循环队列通过在数组空间中形成环状结构,避免了假溢出现象,允许头尾指针在顺序表内循环移动。
最低0.47元/天 解锁文章

2870

被折叠的 条评论
为什么被折叠?



