队列也是一种数据结构,实现的也是一种思想,队列的特点就是先进先出(FIFO),每次只能向队列加入一个数字,也只能取出一个数字,要包含队头和队尾。
①队列思想可以用顺序表思想实现,也就是顺序队列
②队列思想也可以用链表思想实现,也就是链式队列
单向队列队头和队尾固定,一端输入一端输出,我的理解就是一个受到了一定规则约束的顺序表,单向队列的实现较为容易

顺序队列由于继承了顺序表的一些特定,长度固定,因此队列往往使用的是循环队列,循环队列的好处就是头和尾部都可以移动,这样就无须总是移动队列中的元素,只需要移动头尾的指针即可

由于首尾指针重合时也可能为空,不好判断,有时回空一个位置来区分满和空,重合为空,差一位时为满,这样最后一个元素就作为了标志位,不进行插入操作
我们这里并不想浪费这个空间,我们选择去掉头节点,用元素总个数来标记,这样通过元素总个数与尾结点就可以找到头节点,并且还能元素个数,判空判满都较为方便,我们用代码来实现一下循环队列

我们在头文件写了一个实现队列的结构体和他们的一些基本函数,下面我们来实现他们


然后我们写一个主函数程序进行测试

测试没有问题,但是这也只是一种思想,实现方法不唯一,队列的思想一致即可
链式队列
链式队列继承了链表的结构特点,内存空间不连续,长度不固定,链表是插入和删除简单,但是查询和修改相对比较难,那么由于队列的思想就掩盖了链表的缺点,放大了链表的优点,队列只能从一端进,另一端出,不支持随机访问,就是插入和删除操作,因此链表实现队列,只需要在链表尾部加入新节点,在链表头部删除新节点。
节点结构体中应该包含数据域和指针域
还要定义一个描述链表的结构体

这样定义结构体,这样我就有了节点结构体和队列描述结构体,用节点结构体去创建新的节点入队,用队列描述结构体定位队头队尾位置以及长度



这些即是链式队列的代码实现方式,实现的代码并不唯一,链式队列的思想一致即可