————————————————————————————————————————————

基本概念:

  • 和栈相反,队列是一种先进先出(FIFO)的线性表。只允许在一端插入,在另一端删除。
  • 允许插入的叫"队尾"(rear),允许删除的叫"队头"(front)。

  • 使用场景:操作系统的作业排队。在允许多道程序运行的计算机系统中,同时有几个作业运行。如果运行结果都需要通道输出,则按照请求输出的先后次序排队。每当通道传输完毕可以接受新的输出任务时,队头的作业先从队列中退出作输出操作。申请输出的作业都从队尾进入。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

基本操作:

/* 定义链表队列 */

struct Node //结构体存放节点

struct LinkQueue //存放队头指针和队尾指针,不存放在Node中是为了节省节点入队时占用的内存空间

/* 初始化队列 */

队头指针和队尾指针共同申请一个内存空间

节点下一节指向NULL

注意:头结点的数据为空

/* 入队操作 */

申请新节点

输入的数据elem存放在新节点数据中

新节点下一节指向NULL

尾节点的下一节点指向新节点

队尾指针指向新节点

/* 出队操作 */

节点指针p指向队头结点

队头结点指向第一节点

释放指针p指向的节点

p指向NULL //避免野指针

/* 打印操作 */

由于头节点为空,所以从第二节点开始打印,直到指向NULL时停止打印

实现代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define OK 1
 4 #define ERROE 0
 5 #define OVERFLOW -2
 6 typedef int Status;
 7 typedef int QElemType;
 8 typedef struct Node
 9 {
10     QElemType data;
11     struct Node *next;
12 } QNode;
13 /* 当链式队列的头尾节点指针定义成为一个单独的结构体,避免在新增节点时占用过多的空间 */
14 typedef struct
15 {
16     QNode *front;
17     QNode *rear;
18 } LinkQueue;
19 Status InitQueue(LinkQueue *Q)
20 {
21     Q->front = Q->rear = (QNode *)malloc(sizeof(QNode));
22     if (!Q->front)
23         exit(OVERFLOW);
24     Q->rear->next = NULL; //rear.next始终指向NULL,头结点front不动
25     return OK;
26 }
27 Status InQueue (LinkQueue *Q, int elem)
28 {
29     QNode *p;
30     p = (QNode *)malloc(sizeof(QNode));
31     p->data = elem;
32     p->next = NULL;
33     Q->rear->next = p;
34     Q->rear = p;
35     return OK;
36 }
37 Status PrintQueue(LinkQueue Q)
38 {
39     QNode *p;
40     p = Q.front->next;
41     printf("the queue is:");
42     while(p != NULL)
43     {
44         printf("%d ", p->data);
45         p = p->next;
46     }
47     return OK;
48 }
49 Status OutQueue(LinkQueue *Q)
50 {
51     QNode *p;
52     int i;
53     printf("\nthe number of out queue:");
54     scanf("%d", &i);
55     while(i != 0)
56     {
57         p = Q->front;
58         Q->front = Q->front->next;
59         free(p);
60         i--;
61     }
62     p = NULL;
63     return OK;
64 }
65 Status EmptyQueue(LinkQueue Q)
66 {
67     if (Q.front->next == NULL)
68         printf("\nThe queue is empty!\n");
69     return OK;
70 }
71 int main()
72 {
73     LinkQueue queue;
74     InitQueue(&queue);
75     int elem;
76     printf("input:");
77     while(scanf("%d", &elem) != EOF)
78     {
79         InQueue(&queue, elem);
80     }
81     PrintQueue(queue);
82     OutQueue(&queue);
83     PrintQueue(queue);
84     EmptyQueue(queue);
85     return OK;
86 }

转载于:https://www.cnblogs.com/hughdong/p/6841337.html

数据结构 | 链表队列(基本操作及图示)相关推荐

  1. C++数据结构链表的基本操作

    这篇文章主要为大家介绍了C++数据结构链表基本操作的示例过程有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪 首先创建好一个节点 typedef struct node {in ...

  2. 数据结构之【线性表】(顺序表、链表的基本操作实现)

    概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...

  3. 数据结构链表之队列,Python3实现——7

    数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中 ...

  4. 【数据结构】 队列的简单理解和基本操作

    前言:本章介绍的主要内容是数据结构中队列的概念,并通过代码实现链式结构的队列. 文章目录 1.队列的基本概念 1.1 队列的定义 1.2 队列的特点 2.队列的代码实现 2.1 队列存储的说明 2.2 ...

  5. 数据结构实验3、单链表的基本操作实现

    实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...

  6. 【数据结构】链表的基本操作

    文章目录 1.单链表的定义 2.单链表上的基本操作 2.1采用头插法建立单链表 2.2采用尾插法建立单链表 2.3按序号查找结点数据 2.4按值查找表结点 2.5插入节点操作 2.6删除节点操作 3. ...

  7. 初学数据结构--链表

    2019独角兽企业重金招聘Python工程师标准>>> 前言 在这一章,我将介绍另外一种非常重要的线性数据结构--链表.在之前介绍的动态数组,栈和队列这三种数据结构,底层其实依托于静 ...

  8. c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构

    前言 上一章节针对于C语言栈结构做了解析,不清楚的可以回顾一下. 本章节主要针对于C语言的基础数据结构队列做以解析. 数据结构之队列 队列是一种特殊的 线性表 ,特殊之处在于它只允许在表的前端(fro ...

  9. 数据结构线性表基本操作

    数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...

最新文章

  1. 服务器开机只显示cdm,电脑开机黑屏出现cdm.exe对话框怎么处理?!我的扣扣
  2. 在python实现快速傅里叶变换FFT与频域滤波
  3. android custom toast,Android自定义Toast
  4. 小程序引入的echarts过大如何解决_微信小程序中使用echarts
  5. 【Python游戏】Python基于pygame和random模块开发的一个拼图小游戏 | 附带源码
  6. PHP 如何使用Mobile Detect来判断访问网站的设备 安卓,平板,电脑
  7. 原生JAVA解析json
  8. 蚂蚁的开放:想办法摸到10米的篮筐 1
  9. 111.绘制正态分布曲线
  10. PAKE: Password-authenticated key agreement
  11. angularjs controller中使用filer
  12. Pcbdoc,SchDoc,PrjPcb 的区别
  13. dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录
  14. Java基础动态初始化二维数组
  15. 《程序设计基础》 第四章 循环结构 7-13 找零钱 (20 分)
  16. WIFI6网卡(AX201)无法连接2.4GHz老式路由器解决办法
  17. 如何在短期内通过PMP考试
  18. 质检员根据检索报告中A类文献
  19. java.io.IOException: Prepare failed.: status=0x1 异常解决方法
  20. 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp

热门文章

  1. LINUX线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等
  2. kafka0.9 java commit_Kafka 0.9 新消费者API
  3. python终端会话_如何为Python终端提供持久性历史记录
  4. MFC小笔记:TabCtrl父子窗口传递消息
  5. java------用File类列出一个目录下的所有文件夹和文件
  6. python遍历文件_python3 遍历文件夹目录所有文件
  7. 【java】java Parallel GC 该怎么看?
  8. 【Elasticsearch】Meltdown对Elasticsearch性能的影响
  9. 【java】java 并发编程 ArrayBlockingQueue
  10. 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]