队列是一种特殊的线性表。
队列一种可以实现“先进先出”的存储结构,即“一端入,一端出”,队首(front)出队,队尾(rear)入队,若front指向队首,则rear指向队尾最后一个有效元素的下一个元素;若rear指向队尾,则front指向队首第一个有效元素的下一个元素。
队列特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
扩展资料
循环队列各个参数的含义
1、队列初始化front和rear的值都是零,初始化时队列就是空的。
2、队列非空front代表队列的第一个元素rear代表了最后一个有效元素的下一个元素。
3、队列空front和rear的值相等,但是不一定是零。
参考资料来源:百度百科—队列
//定义队列结构体typedef struct Qnode
{
int data
struct Qnode *next
} Queue , *QueuePtr
typedef struct
{
QueuePtr front
QueuePtr rear
} linkQnode
//创建一个队列
initQueue (linkQnode *q)
{
q ->front = q ->rear = (QueuePtr) malloc (sizeof (Queue))
if (!q ->front) exit (0)
q ->front ->next = NULL
}
//入队列
EnterQueue (linkQnode *q , int item)
{
QueuePtr p
p = (QueuePtr) malloc (sizeof (Queue))
if (!p) exit (0)
p ->data = item
p ->next = NULL
q ->rear ->next = p
q ->rear = p
}
//出队列
DelQueue (linkQnode *q , int *item)
{
QueuePtr p
if (q ->front = q ->rear) return
p = q ->front ->next
*item = p ->data
q ->front ->next = p ->next
if (q ->rear == p)
q ->rear = q ->front
free (p)
}
pq->rear->next=
pnew这个代码从队列的尾部增加新节点,
然后pq->rear
=
pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。
队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除
按先进先出特点的一种实现。
但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号。