// hh 表示队头,tt表示队尾
int q[N], hh = 0, tt = -1;
// 向队尾插入一个数
q[ ++ tt] = x;
// 从队头弹出一个数
hh ++ ;
// 队头的值
q[hh];
// 判断队列是否为空,如果 hh <= tt,则表示不为空
if (hh <= tt)
{
}
这段代码是一个基本的队列实现,使用数组来存储元素。其中hh表示队头下标,tt表示队尾下标。
初始化队列为空,队头下标为0
,队尾下标为-1
。
向队尾插入一个元素x
,先将tt
加1
(指向下一个空位),再将x赋值给q[tt]
。
从队头弹出一个元素,先将hh
加1
(指向下一个元素),再返回q[hh]
。
获取队头的值,直接返回q[hh]
即可。
判断队列是否为空,如果hh <= tt
,则表示不为空。因为初始化时tt = -1
,所以只有当有元素入队时才会让tt >= hh
。
// hh 表示队头,tt表示队尾的后一个位置
int q[N], hh = 0, tt = 0;
// 向队尾插入一个数
q[tt ++ ] = x;
if (tt == N) tt = 0;
// 从队头弹出一个数
hh ++ ;
if (hh == N) hh = 0;
// 队头的值
q[hh];
// 判断队列是否为空,如果hh != tt,则表示不为空
if (hh != tt)
{
}
这段代码是一个基本的循环队列实现,同样使用数组来存储元素。与之前的代码不同,这里使用了取模运算来实现队列的循环。
初始化队列为空,队头下标和队尾下标都为0
。
向队尾插入一个元素x
,先将x赋值给q[tt]
,再将tt
加1
。如果tt
等于N
,则让tt
回到数组开头(即0
位置)。
从队头弹出一个元素,先将hh
加1
,再返回q[hh]
。如果hh
等于N
,则让hh
回到数组开头(即0
位置)。 获取队头的值,直接返回q[hh]
即可。
判断队列是否为空,如果hh != tt
,则表示不为空。因为当所有元素都出队时,hh
和tt
会指向同一位置(但此时并没有元素),所以只有在它们不相同时才能判断队列非空。