当前位置: 首页 > news >正文

队列的基本操作(C语言链表实现)初始化,入队,出队,销毁,读取数据

文章目录

  • 前言
  • 一、队列基本变量的了解
  • 二、队列的基本操作
    • 2.1队列的初始化(QueueInit)
    • 2.2入队(QueuePush)
    • 2.3判断是否为空队(QueueEmpty)
    • 2.4出队(QueuePop)
    • 2.5队列的队头数据(QueueFront)
    • 2.6队列的队尾数据(QueueBack)
    • 2.7队列大小(QueueSize)
    • 2.8队列的销毁(QueueDestroy)


前言


在这里插入图片描述

提示:以下是本篇文章正文内容,下面案例可供参考
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

一、队列基本变量的了解

在这里插入图片描述

typedef int QDataType;//队列数据类型typedef struct QueueNode {QDataType data;//数据域struct QueueNode* next;//指针域
}QNode;//先建立一个结点typedef struct Queue {QNode* head;//头QNode* tail;//尾int size;//队列数量
}Queue;//将头与尾还有数量封装在一起能更好操作

二、队列的基本操作

2.1队列的初始化(QueueInit)

void QueueInit(Queue* pq) {assert(pq);pq->head = pq->tail = NULL;//刚开始没有数据,所以头尾都为NULLpq->size = 0;//数量
}

2.2入队(QueuePush)

在这里插入图片描述

void QueuePush(Queue* pq,QDataType x) {assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL) {perror("malloc error");return;}//判断是否为有效空间newnode->data = x;newnode->next = NULL;//初始化新结点if (pq->head == NULL) {assert(!pq->tail);pq->head = pq->tail = newnode;//之所以要分开判断是因为//我们也要保证只有一个数据时//head与tail指向同一个//如果只有else虽然也能够正常插入//但是tail一直指向NULL}else {pq->tail->next = newnode;//在尾巴后面接上也就是入队pq->tail = pq->tail->next;//尾巴改变,指向新加入的数据}pq->size++;//数据+1
}

2.3判断是否为空队(QueueEmpty)

bool QueueEmpty(Queue* pq) {assert(pq);return pq->size==0;//数量为0返回为真,真为空,假为不空
}

2.4出队(QueuePop)

在这里插入图片描述

void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));if (pq->head->next == NULL) {free(pq->head);//只有一个元素//直接将尾巴与头置空pq->head = pq->tail = NULL;}else {QNode* Next = pq->head->next;//记录队头下一个结点free(pq->head);//释放队头pq->head = Next;//队头指向下一个位置}pq->size--;//数量减少
}

2.5队列的队头数据(QueueFront)

QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq->head->data;//直接去队头数据
}

2.6队列的队尾数据(QueueBack)

QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq->tail->data;
}

2.7队列大小(QueueSize)

int QueueSize(Queue* pq) {assert(pq);return pq->size;
}

2.8队列的销毁(QueueDestroy)


void QueueDestroy(Queue* pq) {assert(pq);QNode* cur = pq->head;//记录当前结点while (cur) {QNode* Next = cur->next;//当前结点的下一个结点free(cur);//释放当前节点cur = Next;//让当前结点指向下一个结点}pq->head = pq->tail = NULL;//最后头尾都NULLpq->size = 0;
}
http://www.lryc.cn/news/61123.html

相关文章:

  • 项目支付接入支付宝【沙箱环境】
  • 程序员应该如何提升自己
  • 全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成
  • 手写简易 Spring(三)
  • 设计模式-看懂UML类图和时序图
  • 2023年全国最新安全员精选真题及答案57
  • 数字图像处理基础
  • onnx手动操作
  • 虚拟机安装Centos7,ping不通百度
  • leetCode算法第一天
  • 怎么将太大的word文档压缩变小,3个高效方法
  • mvc+动态代理
  • vue-cli(vue脚手架方式搭建)
  • CentOS 安装 Docker
  • 别搞了 软件测试真卷不动了...
  • OJ刷题 第十二篇
  • 【计算机专业应届生先找培训还是先找个工作过渡一下?】
  • MySQL数据库,联合查询
  • springboot注解(全)
  • 进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
  • 什么是UML?
  • 5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签
  • “华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)
  • C6678开发概述与Sys/bios基本使用
  • python算法中的图算法之网络流算法(详解二)
  • 企业电子招投标采购系统之项目说明和开发类型源码
  • ERTEC200P-2 PROFINET设备完全开发手册(8-1)
  • 手撕Twitter推荐算法
  • JAVA多态性测试的基本实验------JAVA入门基础教程
  • 小说作者推荐: 妄鸦合集