数据结构之队列

2023-05-16

一 链式队列

数据结构:两个指向节点的指针front, rear;

                当链队为空时,front和rear都指向头节点,因此出队时,删除队尾节点时要注意!

link_queue.h

  1 typedef int type_t;
  2 typedef enum {false, true} bool;
  3 
  4 struct queue_node {
  5     type_t data;
  6     struct queue_node *next;
  7 };
  8 
  9 struct link_queue {
 10     struct queue_node *front;
 11     struct queue_node *rear;
 12 };
 13 
 14 struct link_queue *queue_create();
 15 bool enqueue(struct link_queue *q, type_t data);
 16 type_t dequeue(struct link_queue *q);
 17 bool queue_is_empty(struct link_queue *q);
 18 void queue_destroy(struct link_queue *q);
link_queue.c

#include <stdio.h>
  2 #include <stdlib.h>
  3 #include "link_queue.h"
  4 
  5 struct link_queue *queue_create()
  6 {
  7     struct link_queue *tmp;
  8     struct  queue_node *head;
  9 
 10     tmp = malloc(sizeof(*tmp));
 11 
 12     head = malloc(sizeof(*head));
 13 
 14     head->next = NULL;
 15 
 16     tmp->front = head;
 17     tmp->rear = head;
 18 
 19     return tmp;
 20 }
 21 
 22 bool queue_is_empty(struct link_queue *q)
 23 {
 24     return q->front == q->rear;
 25 }
 26 
 27 bool enqueue(struct link_queue *q, type_t data)
 28 {
 29     struct queue_node *tmp;
 30 
 31     tmp = malloc(sizeof(*tmp));
 32 
 33     tmp->data = data;
 34     tmp->next = NULL;
 35     q->rear->next = tmp;
 36     q->rear = tmp;
 37 }
 38 
39 type_t dequeue(struct link_queue *q)
 40 {
 41     type_t tmp;
 42     struct queue_node *node;
 43 
 44     if (queue_is_empty(q))
 45         return 0;
 46     tmp = q->front->next->data;
 47     node = q->front->next;
 48 
 49     if (q->front->next == q->rear) //防止把尾指针删掉,链式队列尾指针是指向最后一个节点,而不是最后一个节点的下一个,假设删掉最后一个节点,则q    ->rear = NULL;而此时队列为空,front和rear都应指向head!
 50         q->rear = q->front;
 51 
 52     q->front->next = node->next;
 53 
 54     free(node);
 55 
 56     return tmp;
 57 }
 58 
 59 void queue_destroy(struct link_queue *q)
 60 {
 61     struct queue_node *tmp = q->front->next;
 62 
 63     while (tmp) {
 64         struct queue_node *node = tmp;
 65         tmp = tmp->next;
 66         free(node);
 67     }
 68     free(q);
 69 }
 70 
 71 int main()
 72 {
 73     struct link_queue *tmp;
 74     int i;
 75 
 76     tmp = queue_create();
77 
 78     for (i = 1; i <= 10; i++)
 79         enqueue(tmp, i);
 80 
 81     while (!queue_is_empty(tmp))
 82         printf("%d", dequeue(tmp));
 83 
 84     printf("\n");
 85 
 86     return 0;
 87 }

注:链表与链队列的区别是什么?

从代码上看:写链表时仅定义节点就可,然后把节点串联起来!

而写链队时,先定义节点(这样能串成链表),再定义front,rear(这才是队列,这种数据结构)

如果是链栈,先定义节点(这样能串成链表),再定义stack栈顶指针(这才是栈,这种数据结构)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之队列 的相关文章

  • 算法---判断101-200之间有多少个素数,并输出所有素数。

    算法 判断101 200之间有多少个素数 xff0c 并输出所有素数 题目 xff1a 判断101 200之间有多少个素数 xff0c 并输出所有素数 程序分析 首先明白什么是素数 xff0c 只能被1和本身整除的数 xff0c 用循环遍历
  • Tesseract-OCR 字符识别---样本训练

    转自 xff1a http blog csdn net feihu521a article details 8433077 Tesseract是一个开源的OCR xff08 Optical Character Recognition xff
  • centos fluxbox 安装,个性化配置

    centos fluxbox 安装 个性化配置 张映 发表于 2010 12 01 分类目录 xff1a linux 我用的第一个linux系统是archlinux xff0c 当时装的桌面是fluxbox xff0c 界面简单 xff0c
  • 算数移位(<<, >>)与逻辑移位

    lt lt gt gt 是算数移位 xff0c 也就是 1 xff0c 如果右移 xff0c 则 最高位补1 左移 xff0c 则右边补0 但是uint32 t的10 00 00 00 右边移动后 xff0c 是什么 xff1f 补0呗 x
  • OCR数据集

    1 SynthText in the Wild dataset 数据集下载链接 xff1a http www robots ox ac uk vgg data scenetext 数据集介绍 xff1a 一个综合生成的数据集 xff0c 其
  • Linux(centos)下搭建confluence

    1 下载文件 2 将下载的文件放到 opt路径下 通过上图可以看出confluence安装到了 opt atlassian confluence和 var atlassian application data confluence目录下 x
  • gitlab中文社区

    1 获取gitlab中文社区项目 中文社区版项目 xff1a https gitlab com xhang gitlab 2 克隆中文仓库 git clone https gitlab com xhang gitlab git 3 查看gi
  • 阿里云 oss python3 例子

    阿里云的oss SDK又是不支持python3 xff0c 头疼头疼 本想改一改它的SDK xff0c 让它支持python2 43 python3 xff0c 无奈里面大量的代码使用不带括号的print xff0c 工作量恐怖 幸好oss
  • 【C语言课程设计】利用结构体数组实现文件内容的增删改查

    啦啦啦 xff0c 又到了学习时间 xff0c 现在给大家介绍结构体数关于文件内容的增删改查 我们先把相关代码写好 xff0c 再使用EGE xff0c 慢慢来不着急 一 文件的打开方式 假设文件名叫list txt 首先我们要建立一个文件
  • Mysql中limit的用法详解

    在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql已经为我们提供了这样一个功能 SELECT FROM table LIMIT offset
  • 在Windows10上安装CodeSoft 2015,系统蓝屏,解决办法

    最近公司电脑更新换代 xff0c 替换成Windows 10系统 xff0c 在安装CodeSoft 2015 标签软件时 xff0c 电脑蓝屏重启 xff0c 软件安装失败 xff0c 且无法卸载 xff0c 之后只能重装系统 在经过系统
  • Win10 WSL下 Ubuntu20.04 安装与卸载 Mysql 8.0

    一 查询并卸载旧的mysql xff08 未安装可以直接跳过 xff09 查看MySQL的依赖项 dpkg list grep mysql 关闭mysql服务 service mysql stop 自动卸载mysql xff08 包括ser
  • ios性能优化实践

    本文将从原理出发 xff0c 解释卡顿发生的原理 xff0c 然后会讲解项目中行之有效的几个优化点 xff0c 最后会展望一下接下来将要尝试的方向 下面进入正题 屏幕显示的原理 基本原理 屏幕显示原理 我们知道 xff0c 远古时代的CRT
  • MATLAB平面几何图形绘制实例

    MATLAB 平面几何图形绘制实例 实例一 运动控制测试图形 以下图形用于运动综合测试 xff0c 平面图形包含直线 圆弧 整圆 锐拐角 钝拐角 xff0c 能比较充分的测试各种轨迹 运动控制性能 输入圆心和半径可以调整图形大小和偏移 xf
  • Liunx系统ifconfig无法显示ip地址

    1 针对于Liunx的CentOS8 5系统 2 查看NetworkManager网络状态 nmcli n enabled设置下次开机时 xff0c 后面接的 unit 会被启动 开启NetworkManager网络 nmcli n on
  • CentOS8安装MySQL8.0版本遇到的问题

    41 错误1 xff1a libncurses so 5 64bit is needed by MySQL client 5 6 47 1 el6 x86 64以及 libtinfo so 5 64bit is needed by MySQ
  • LiunxCentOS8系统配置yum源

    更新yum源的原因如下 xff1a 因为LiunxCentOS8系统里面停止维护了 xff0c 导致yum无法使用必须自己配置一个yum源 如使用CentOS8系统自带的yum源进行下载安装则会出现以下错误 xff1a 错误 xff1a F
  • redis主从复制

    什么是redis主从复制 redis主从复制是指在redis集群中master节点和slave节点数据同步的机制 将写入redis服务器的数据复制到其他redis服务器里面实现数据同步 master节点负责写操作 xff0c slave节点
  • 单机千万并发连接实战

    c10k xff0c c100k xff0c c1000k等问题大家都已经司空见惯 xff0c 那么10m xff08 千万 xff09 并发连接呢 xff1f 今天就来一起挑战一下吧 准备机器 10m连接 xff0c 大家的个人电脑肯定无

随机推荐

  • mysql数据库dblink的使用

    1 使用mysql数据库里面的FEDERATED引擎 xff0c 这个必须要开启 show engines 我这里是开启了FEDERATED引擎 2 开启FEDERATED引擎 sed i 39 afederated 39 etc my c
  • CentOS8系统安装MySQL过程中遇到的错误问题

    1 启动过程中出现类似于 单元启动失败 错误 解决 xff1a 把之前初始化成功的文件删除掉 var lib mysql 这个文件 注 xff1a 如不想删除则可以备份起来 这是初始化之后生成的文件 1 再次初始化生成文件 mysqld i
  • Liunx系统CentOS Linux release 8.5.2111安装percona-toolkit

    官网 xff1a https www percona com downloads percona toolkit LATEST 依赖 xff1a yum install perl DBI perl DBD MySQL perl Time H
  • MySQL物理备份工具-xtrabackup

    依赖包 xff1a wget O etc yum repos d epel repo http mirrors aliyun com repo epel 7 repo yum y install perl perl devel libaio
  • 传输线与特性阻抗

    一 什么是传输线 我们经常会用到传输线这一术语 xff0c 可是讲到其具体定义时 xff0c 很多工程师都是欲言又止 xff0c 似懂非懂 我们知道 xff0c 传输线用于将信号从一端传输到另一端 xff0c 下图说明了所有传输线的一般特征
  • 51单片机中断号与定时器的工作方式

    中 断 号 interrupt 0 外部中断0 xff08 EX0 xff09 interrupt 1 定时器 计时器器中断0 xff08 ET0 xff09 interrupt 2 外部中断1 xff08 EX1 xff09 interr
  • delay函数

    在VC中使用带上头文件 include lt windows h gt 注意 在VC中Sleep中的第一个英文字符为大写的 34 S 34 在标准C中是sleep 不要大写 下面使用大写的来说明 具体用什么看你用什么编译器 简单的说VC用S
  • 51单片机的中断和定时(全面)

    定时器 计数器 51的定时器 计数器有2个分别是T1和T0 52系列的单片机有3个定时器 计数器 xff0c T0和T1是通用定时器 计数器 xff0c 定时器 计数器2 xff08 简称T2 xff09 是集定时 计数和捕获三种功能于一体
  • 什么是信号完整性?(大白话)

    什么是 信号完整性 xff1f 可能很多人仍然感觉这个词很陌生 xff0c 尤其是哪些没有接触过所谓高速PCB的工程师来说更是如此 于博士网就给大家做一个直观的说明 我们在用示波器测量PCB板上信号时 xff0c 经常会在信号的波形上发现一
  • 什么是高速PCB?

    高速PCB是一个很流行的名词 xff0c 那么到底什么是高速PCB xff1f 可能没几个人能说清楚 xff0c 原因在哪 xff1f 于博士网阐述一下我们对高速PCB这一名词的见解 有一种观点认为 xff1a 数字电路的速率达到或者超过4
  • epoll LT/ET 深入剖析

    epoll LT ET 深入剖析 EPOLL事件有两种模型 xff1a Level Triggered LT 水平触发 socket接收缓冲区不为空 有数据可读 读事件一直触发 socket发送缓冲区不满 可以继续写入数据 写事件一直触发
  • PCB布局布线1

    1 1mil 61 0 001inch 61 0 0254mm oz质量单位 xff0c 指铜厚 2 层叠结构 1 走线长度 宽度 厚度影响寄生电容电感 2 电源层和地层都比较厚 xff1a a 屏蔽辐射干扰 串扰b 减小阻抗3 3 走线电
  • 大功率连接器(电源和信号)

    EXtreme Power连接器 xff08 7 5mm xff09
  • Altium Designer高级布线技巧

    1 模块化复用 选择两个或多个元件 右击 union 联合 创建联合 选择模块 M O键 输入角度 点击模块 2 同一模块在不同工程中布局布线复用
  • 02.算术左移逻辑左移,算术右移逻辑右移

    xfeff xfeff 1 算术左移逻辑左移 算 术左移和逻辑左移一样都是右边补0 xff1a 比如 00101011 算术左移一位 01010110 逻辑左移一位 01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方
  • Bellman-Ford(单源最短路径,判断是否有负权环路)

    Bellman Ford 1 初始化 xff1a 将除源点外的所有顶点的最短距离估计值 d v 43 d s 0 2 迭代求解 xff1a 反复对边集E中的每条边进行松弛操作 xff0c 使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其
  • C语言第一个程序(超详细)

    include lt stdio h gt 包含一个叫stdio h的文件 std 标准 standard input output int main int 是整型的意思 main前面的int表示main函数调用返回一个整型值 inclu
  • warning:initialization discards ‘const’ qualifier from pointer target type 解决方法

    initialization discards const qualifier from pointer target type 意思是 xff0c 初始化时丢掉了 xff08 目标类型的 xff09 const 限定符 eg const
  • [C/C++]写出几个无限循环

    1 写出几个死循环 while 1 注 xff1a 1不可省略 for 注 xff1a 第一个条件为初始条件 xff0c 第二个条件是循环结束条件 xff0c 第三个表达式是变更表达式 循环结束条件若是省略的话 xff0c 应写入循环体中
  • 数据结构之队列

    一 链式队列 数据结构 xff1a 两个指向节点的指针front rear 当链队为空时 xff0c front和rear都指向头节点 因此出队时 xff0c 删除队尾节点时要注意 xff01 link queue h 1 typedef