1、链表分为带头结点、不带头结点两种;

2、头结点的数据域不存放数据;

3、链表增加头结点的原因:使往第一个位置插入和删除元素的操作和其他位置一样;

4、常见的会考到:

①手写链表、

②实现链表的创建(插入、删除、摧毁、逆序等)操作、

③链表模拟栈、

④链表模拟队列、

⑤判断链表是否成环、

⑥判断两个链表是否交叉

不带头结点的链表模拟堆quene:

/**********************************************************************************      Copyright:  (C) 2018 Yujie*                  All rights reserved.**       Filename:  linker_quene.c*    Description:  This file *                 *        Version:  1.0.0(08/27/2018)*         Author:  yanhuan <yanhuanmini@foxmail.com>*      ChangeLog:  1, Release initial version on "08/27/2018 12:47:42 PM"*                 ********************************************************************************/#include <stdio.h>
#include <string.h>
#include <malloc.h>typedef  struct  node
{int          data;struct node *next;
}NODE_t,*NODE_p;typedef  struct  quene    //先进后出
{struct node *front;   //队首struct node *rear;    //队尾
}quene_t,*quene_p;quene_p   create_linker_quene(quene_p  que)    //以无头结点为基础
{int     length,n = 1;NODE_p   Np_now = NULL;que->front = NULL;que->rear  = NULL;printf("Please input the init length of quene you want to creat : \n");scanf("%d",&length);while(n <= length){NODE_p   s = (NODE_p)malloc(sizeof(NODE_t));printf("Please input the No.%d num : ",n);scanf("%d",&s->data);s->next = NULL;if(1 == n){Np_now = s;que->front = Np_now;que->rear  = Np_now;}else{Np_now->next = s;Np_now = s;que->rear  = Np_now;}n++;}return  que;
}quene_p   insert_quene(quene_p  que,int  data)        //只能从队尾插入
{NODE_p   s = (NODE_p)malloc(sizeof(NODE_t));s->data = data;s->next = NULL;if(NULL == que->front){que->front = s;que->rear =  s;}else{que->rear->next = s;que->rear = s;}printf("Insert data:%d successful\n",s->data);return  que;
}quene_p  delete_quene(quene_p   que)
{NODE_p   Np_now = que->front;if(NULL == Np_now){printf("The quene has no element\n");return  que;  }if(Np_now == que->rear){que->front = NULL;que->rear  = NULL;printf("Delete data:%d successful\n",Np_now->data);return  que;}que->front = que->front->next;printf("Delete data:%d successful\n",Np_now->data);free(Np_now);return  que;
}quene_p   destory_quene(quene_p   que)
{NODE_p   Np_now = que->front;while(Np_now != NULL){que->front = que->front->next;free(Np_now);Np_now->next = NULL;Np_now = que->front;}que->front = NULL;que->rear  = NULL;printf("Destory finished\n");return  que;
}void    travel(quene_p  que)
{int           n = 1;NODE_p   Np_now = que->front;if(Np_now == NULL){printf("The quene has no element\n");return ;}while(Np_now != NULL){printf("The NO.%d data of quene is %d\n",n,Np_now->data);Np_now = Np_now->next;n++;}printf("Travel finished\n\n");
}void   print_desc_main()
{printf("Please input the selection number you want:\n");printf("1   create  quene \n");printf("2   insert  quene  node \n");printf("3   delete  quene  node \n");printf("4   travel  quene \n");printf("5   destory quene \n");printf("6   exit \n");
}void print_desc_insert()
{printf("what do you want to insert:\n");
}int main (int argc, char **argv)
{int       i=0,data;quene_t   quene_n;quene_p   que = (quene_p)&quene_n;que->front = NULL;que->rear  = NULL;    //    que = create_linker_quene(que);while(1){print_desc_main();scanf("%d",&i);switch(i){case   1:if(que->front == NULL){que = create_linker_quene(que);}elseprintf("The quene is exist\n");break;case   2:print_desc_insert();scanf("%d",&data);  que = insert_quene(que,data);break;case   3:que = delete_quene(que);break;break;case   4:travel(que);break;case   5:que = destory_quene(que);break;case   6:que = destory_quene(que);printf("Quit \n");return  0;default:printf("Incorrect  input\n");print_desc_main(); break;}}return 0;
}

带头结点的就更加简单一点,在这里就不贴代码了。

链表模拟队列quene---C语言相关推荐

  1. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  2. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

    C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...

  3. Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP

    单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...

  4. 实现一个通用的生产者消费者队列(c语言版本)

    背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定的生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观, ...

  5. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  6. C day18 高级数据表示(链表,队列)

    这是C primer的最后一章了,前面已经学习了怎么创建变量,结构,数组,指针,会写函数,总之,把C作为工具层面的知识已经学完了,但是对于编程之路,这才算走完第一步,因为对于写程序最重要的是学习如何表 ...

  7. 数据结构与算法——队列( Quene )

    队列( Quene ) 队列是一个有序列表,可以用数组或是链表来实现 遵循先入先出的原则.即:先存入队列的数据,要先取出.后存入的要后取出 1 数组模拟队列 队列本身是有序列表 因为队列的输出.输入是 ...

  8. (数据结构与算法)数组模拟队列和环形队列

    文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...

  9. 数组模拟队列(代码实现)

    数据结构可分为两种,第一种是线性结构,第二种是非线性结构,线性结构又分为连续存储和链表存储. 常见的线性结构有数组,链表,队列,栈: 以下是数组模拟队列的实现(队列特点就是先进先出): //数组模拟队 ...

最新文章

  1. 自己理解接口回调入门
  2. 卷积神经网络模型如何辨识裸体图片
  3. 全球及中国LCP行业应用项目布局及产能规模预测报告2021版
  4. JavaScript教程——JavaScript 的基本语法(标识符)
  5. jQuery设计动画
  6. 1.文档数据非结构化
  7. 不懂函数能学c语言吗,不会函数能学C语言吗
  8. Java 程序员最爱 Kotlin?
  9. 快手发布营销平台:以短视频社交广告为切入点 商业化提速
  10. idea exclude from compile 再加回来
  11. 【书籍推荐】深入解析Windows操作系统(第4版)
  12. 【zhasite】托业英语阅读技巧有哪些
  13. Bootstrap-table 如何合并相同单元格
  14. SOT23(Small Outline Transistor)
  15. kali linux实体机_kali linux系统安装之物理机的详细安装步骤
  16. office显示“你的许可证并非正版....”
  17. Blackhat 2017Defcon 25学习笔记
  18. c语言基础知识(知识点较为完整)
  19. 模拟角频率和数字角频率
  20. 【Codeforces Round #514 (Div. 2) D. Nature Reserve】 三分+推公式

热门文章

  1. python tuple list_python之tuple与list
  2. wxpython初学者(四)之 事件驱动
  3. 三阶魔方还原方法(白色在上层先法)
  4. EMQTT安装与使用
  5. Emqtt -- 02 -- 搭建本地项目
  6. 2022-06-18 前端周报总结 git分支优化
  7. 【word不会用】两栏格式公式居中 编号右对齐
  8. 12. The Biggest Safety Threat Facing Airlines 航空公司面临的最大安全威胁
  9. 如何安装和设置Strawberry Perl
  10. 【STC单片机】VSCode PlatformIO Led呼吸灯示例程序