数据结构 | 链表队列(基本操作及图示)
————————————————————————————————————————————
基本概念:
- 和栈相反,队列是一种先进先出(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
数据结构 | 链表队列(基本操作及图示)相关推荐
- C++数据结构链表的基本操作
这篇文章主要为大家介绍了C++数据结构链表基本操作的示例过程有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪 首先创建好一个节点 typedef struct node {in ...
- 数据结构之【线性表】(顺序表、链表的基本操作实现)
概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...
- 数据结构链表之队列,Python3实现——7
数据结构链表之队列 队列概述 定义:队列是一种基于先进先出(FIFO)的数据结构,队列只能在一段进行插入和删除操作的结构,第一个进入队列的元素在读取时会第一个被读取 队列可以使用顺序表(Python中 ...
- 【数据结构】 队列的简单理解和基本操作
前言:本章介绍的主要内容是数据结构中队列的概念,并通过代码实现链式结构的队列. 文章目录 1.队列的基本概念 1.1 队列的定义 1.2 队列的特点 2.队列的代码实现 2.1 队列存储的说明 2.2 ...
- 数据结构实验3、单链表的基本操作实现
实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...
- 【数据结构】链表的基本操作
文章目录 1.单链表的定义 2.单链表上的基本操作 2.1采用头插法建立单链表 2.2采用尾插法建立单链表 2.3按序号查找结点数据 2.4按值查找表结点 2.5插入节点操作 2.6删除节点操作 3. ...
- 初学数据结构--链表
2019独角兽企业重金招聘Python工程师标准>>> 前言 在这一章,我将介绍另外一种非常重要的线性数据结构--链表.在之前介绍的动态数组,栈和队列这三种数据结构,底层其实依托于静 ...
- c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构
前言 上一章节针对于C语言栈结构做了解析,不清楚的可以回顾一下. 本章节主要针对于C语言的基础数据结构队列做以解析. 数据结构之队列 队列是一种特殊的 线性表 ,特殊之处在于它只允许在表的前端(fro ...
- 数据结构线性表基本操作
数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...
最新文章
- 服务器开机只显示cdm,电脑开机黑屏出现cdm.exe对话框怎么处理?!我的扣扣
- 在python实现快速傅里叶变换FFT与频域滤波
- android custom toast,Android自定义Toast
- 小程序引入的echarts过大如何解决_微信小程序中使用echarts
- 【Python游戏】Python基于pygame和random模块开发的一个拼图小游戏 | 附带源码
- PHP 如何使用Mobile Detect来判断访问网站的设备 安卓,平板,电脑
- 原生JAVA解析json
- 蚂蚁的开放:想办法摸到10米的篮筐 1
- 111.绘制正态分布曲线
- PAKE: Password-authenticated key agreement
- angularjs controller中使用filer
- Pcbdoc,SchDoc,PrjPcb 的区别
- dhcp服务器显示dns服务器更新挂起,如何动态更新DNS记录
- Java基础动态初始化二维数组
- 《程序设计基础》 第四章 循环结构 7-13 找零钱 (20 分)
- WIFI6网卡(AX201)无法连接2.4GHz老式路由器解决办法
- 如何在短期内通过PMP考试
- 质检员根据检索报告中A类文献
- java.io.IOException: Prepare failed.: status=0x1 异常解决方法
- 2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp
热门文章
- LINUX线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等
- kafka0.9 java commit_Kafka 0.9 新消费者API
- python终端会话_如何为Python终端提供持久性历史记录
- MFC小笔记:TabCtrl父子窗口传递消息
- java------用File类列出一个目录下的所有文件夹和文件
- python遍历文件_python3 遍历文件夹目录所有文件
- 【java】java Parallel GC 该怎么看?
- 【Elasticsearch】Meltdown对Elasticsearch性能的影响
- 【java】java 并发编程 ArrayBlockingQueue
- 【es】 check-rollover-ready read index [alinas-lcc] is not the wtiter index for alians [index-xx]