队列的特征就是“先入先出”,入队时在链表的尾部插入数据,出队时删除掉头节点后面的节点,需要一个尾指针,始终指向链表的尾部(新加进来的节点)。具体请看原理图:

代码实现

#include <stdio.h>
#include <stdlib.h>typedef struct List
{int data;          //数据域struct List *next; //指针域
}ListNode;              //节点信息ListNode *rear;           //尾指针void Init(ListNode *head);             //队列初始化
void push(ListNode *head, int data);    //入队
void pop(ListNode *head);               //出队
void print(ListNode *head);             //显示队内元素int main()
{ListNode head;Init(&head);push(&head, 1);print(&head);pop(&head);print(&head);pop(&head);print(&head);system("pause");return 0;
}void Init(ListNode *head)
{head->data = 0;head->next = head;rear = head;     //尾指针指向头节点
}void push(ListNode *head,int data)
{ListNode *tem = (ListNode *)malloc(sizeof(ListNode));if (tem == NULL){printf("创建新节点失败,入队失败");return;}rear->next = tem;     //尾指针指向的节点的指针指向新节点tem->data = data;tem->next = head;        //尾结点指向头,实现循环rear = tem;                //尾指针后移
}void pop(ListNode *head)
{if (head ->next == head){printf("队内无元素,出队错误\n");return;}ListNode *tem = head->next;head->next = tem->next;        //头节点指向下下个节点printf("出队元素: %d\n", tem->data);if (tem->next == head){rear = head;          //删除到最后一个元素时,尾指针指向头节点}free(tem);tem=NULL;
}void print(ListNode *head)
{ListNode *tem = head->next;if (tem == head){printf("当前队列无元素\n");return;}for (; tem != head; tem = tem->next){printf("%d  ", tem->data);}printf("\n");
}

带头节点循环链表实现队列相关推荐

  1. 假设以带头结点的循环链表表示队列_数据结构·链表(C实现)

    1.前言 <数据结构>是每个程序猿都应该掌握的"必修课",是一门研究"计算机如何存储.数组数据方式"的学科.它虽不及其他招式花哨.但却总能在关键时刻 ...

  2. 【数据结构】8. 队列(带头节点的单链表实现)(完整代码实现:初始化、入队列、出队列、获取队头元素、获取队尾元素、获取队列中有效元素的个数、判空、销毁)

    目录 Queue.h Queue.c test.c Queue.h #pragma once //采用带头节点的单链表实现队列typedef int DataType;typedef struct Q ...

  3. 【数据结构】带头节点双向循环链表

    目录 顺序表和链表的区别 带头双向循环链表分析 带头双向循环链表结构: 创建一个节点 哨兵位头节点 打印链表中的值 在pos前插入 删除pos位置的节点 尾插 尾删 头插: 头删 链表元素查找 总代码 ...

  4. 2007基于循环链表的队列的基本操作(C++)

    描述 用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针).实现该队列的入队出队以及判断队列是否为空操作. 输入 多组数据,每组数据有两行.第一行为两个整数n和m,n表示入队序 ...

  5. 比特数据结构与算法(第二章收尾)带头双向循环链表的实现

    1.链表的分类 链表的分类 ① 单向或者双向 ② 带头或者不带头 ③ 循环或者非循环 常用的链表: 根据上面的分类我们可以细分出8种不同类型的链表,这么多链表我们一个个讲解这并没有意义.我们实际中最常 ...

  6. 【数据结构】-关于带头双向循环链表的增删查改

    作者:低调 作者宣言:写好每一篇博客 文章目录 前言 一.带头双向循环链表的实现 1.1创建返回链表的头结点 1.2开辟一个新的结点 1.3双向链表的销毁 1.4双向链表的打印 1.5双向链表尾插 1 ...

  7. 带头+双向+循环链表(C语言)

    文章目录 什么是带头+双向+循环链表 节点的创建 链表的初始化 打印函数 查找函数 尾插函数 尾删函数 头插函数 头删函数 在pos位置前插入 任意位置删除 销毁函数 什么是带头+双向+循环链表 带头 ...

  8. 不带头节点的单链表如何头插(多图易懂)

    文章目录 缘起 带头节点的头插 不带头节点的头插 错误的代码 为什么错误 如何修改 返回新的头指针 二级指针 缘起 本文想说的是单向非循环链表的头插.单向非循环链表,可以是带头节点的,也可以是不带头节 ...

  9. 数据结构与算法 | 带头双向循环链表

    上一节里实现的是最简单的链表,在实际中那种链表不会单独用来存储数据,更多是作为其他数据结构的子结构,如图的邻接表等.而比较常用的就是带头双向循环链表. 通过对比我们可以看出有三个不同,多了头节点,链表 ...

最新文章

  1. 慢慢学Linux驱动开发,第十章,GNU C的扩展
  2. 机器视觉边缘检测算法详解
  3. 什么是CUDA编程 统一计算架构
  4. Linux服务器集群系统(四)--转
  5. FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.解决办法
  6. css实现浏览历史小块
  7. ssm项目快速搭建(注解)-依赖
  8. Oracle随记笔记
  9. 创意美食海报psd分层模板,开启奇思妙想
  10. git PHP commit 规范,git commit 时自动对所有 php 文件执行语法错误检查
  11. 获取数组中的所有非唯一值(即:重复/多次出现)
  12. GIS之旅——研究生总结
  13. 随机抽取文件内容中的一行
  14. 树莓派之安装docker
  15. centos查看yum上jdk的版本
  16. C语言:鸡兔同笼问题(基础代码)
  17. 基于51单片机步进电机proteus仿真
  18. Android+Opencv图形的形状颜色识别
  19. recycleview添加item点击事件--作业三
  20. 职场技巧:高效实用的四象限法则

热门文章

  1. MYSQL的集群的安装与配置(mysql-5.1.21)
  2. Go2Shell 已无法使用
  3. IDEA生成可运行jar包
  4. 捷信达温泉管理软件员工卡SQL查询
  5. 《全球互联网金融商业模式:格局与发展》——第3章,第3节互联网保险公司...
  6. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源
  7. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
  8. 【HDOJ】4363 Draw and paint
  9. dubboSPI机制浅谈
  10. [Swust OJ 85]--单向公路(BFS)