上文我们讲述了关于栈的知识,那么接下来这一章,我将带大家一起了解队列的知识。话不多说,精彩马上开始!
一.队列的概念
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 的特点。
入队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头
我们可以利用下图来加深理解:
二.队列的实现
那么了解了队列的概念后,我们需要尝试队列的实现。关于上文,我们用顺序表实现了栈,那么队列应该用什么来实现呢?
实际上,队列用单链表实现最为简便。因为如果采用顺序表,在进行出队列时,我们采用头删,顺序表方式会搬移元素,效率低下。因此我们采用单链表来实现队列。
我们仍采用模块化编程的方法,那么队列的实现将包含以下几个模块:
队列的初始化;
队列的销毁;
队列的尾插;
队列的头删;
获取尾数据;
获取头数据;
空队列的判断;
获取队列元素个数;
那么话不多说,我们直接展示代码,好学的同学一定要试着手动编写代码!
queue.h文件
这里我们注意到了一个很巧妙的点,就是我们在建立队列的结构体的时候,我们包含了头指针和尾指针,这样把队列的地址传过去,我们可以同时操作两个指针,有利于后续的功能实现。
queue.c文件
在头删操作中我们注意,剩余一个节点时,phead和ptail指向的是同一个地址,当把头结点释放时,必须把头指针和尾指针同时置为空,否则尾指针会变为野指针,产生报错。
test.c文件
(在test文件中,同学们可以根据自己的需求来运行测试队列的各种功能)
那么本篇文章关于队列的相关知识我们就讲解到这里,感谢各位同学的阅读,欢迎批评指正本篇本章存在的问题,如果有不明白的地方,欢迎大家给小编私信留言!我们下期再会!