在这之前,先对队列进行一下简单的了解
1、队列的定义
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
今天我们将要用链表的形式来实现一个简单的队列
2.队列的定义以及队列的常见基本接口
其中,每个节点都有一个我们定义的haha元素来存储值,以及一个指针存储下一个节点的地址。
3.队列节点的创建
使用malloc函数申请动态内存空间,将空间地址返回,将x赋给val,next赋为NULL
4.节点的插入
(操作之前应该先断言一下,防止传入空指针)具体操作就是先找到原队列的尾节点(next为NULL的节点),然后将新创建的节点指针赋给它的next即可。
5.队列头节点的删除
具体操作就是先将旧的头存下来,再将下一个节点作为新的头,最后free掉老的头,这里需要注意的是,要想改变原来ps的值得请ps得指针来,所以这里参数类型是queue**。
6.取头尾元素
这里很好理解,头节点直接返回val,尾节点遍历再返回即可。
7.元素个数统计
创建临时变量sum在遍历得同时来统计,最后返回。
8.队列元素得打印
创建临时指针pcur来遍历,打印每一个pcur得val即可。
9.队列销毁
我们得队列是基于链表实现得,由于每个节点在内存中不是挨在一起得,所以不能一次性free完,只能通过遍历一个一个free,这里的思路和上面Pop差不多,先吧老节点用临时指针存起来,吧后一个节点变为头后再销毁老节点,在全部销毁完后将NULL赋给*ps即可。