队列——链式存储

核心思路:

1、首先定义队列结点,包含数据域和指针域;然后定义链式队列,包含队列节点类型的队头和队尾指针。
2、初始化:
    带头结点:给头结点分配内存,然后队头和队尾指针指向头结点,同时队头指针的next指向NULL。
    不带头结点:队头和队尾指针都指向NULL。
3、入队:
    带头结点:先给入队节点分配内存,然后将新节点插入到队尾指针后面,新节点的下一个节点为NULL,最后将队尾指针指向新结点。
    不带头结点:先给入队节点分配内存 ,如果队列为空 ,队头和队尾结点都指向新节点,否则将新节点插入到队尾指针后面,最后将队尾指针指向新结点。
4、出队:
    带头结点:首先判断队列是否为空,然后定义指针p指向队头指针的下一个结点,如果这是最后一个结点,则front=rear ,最后释放p的内存。
    不带头结点:首先判断队列是否为空, 然后定义指针p指向队头指针指向的结点,如果这是最后一个结点,则front=NULL,rear=NULL ,最后释放p的内存。

代码:

#include<stdio.h>
#include<stdlib.h>//定义 
typedef struct LinkNode{        //队列结点 int data;struct LinkNode *next;
}LinkNode;
typedef struct{        //链式队列 LinkNode *rear,*front;
}LinkQueue;//初始化——带头结点 
void InitQueue(LinkQueue &Q){Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));Q.front->next=NULL; 
} //初始化——不带头结点 
void InitQueue_(LinkQueue &Q){Q.front=NULL;Q.rear=NULL;
} //入队——带头结点 
bool EnQueue(LinkQueue &Q,int x){LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));    //给新节点分配内存 s->data=x; s->next=NULL;Q.rear->next=s;        //新节点插入到尾指针后面 Q.rear=s;     //尾指针指向新插入的结点 return true;
} //入队——不带头结点 
bool EnQueue_(LinkQueue &Q,int x){LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));    //给新节点分配内存 s->data=x; s->next=NULL;if(Q.front==NULL){Q.front=s;Q.rear=s;} else{Q.rear->next=s;        Q.rear=s;}return true;
} //出队——带头结点
bool DeQueue(LinkQueue &Q,int &x){if(Q.front==Q.rear)        //首先判断队空 return false;LinkNode *p=Q.front->next;    x=p->data;Q.front->next=p->next;if(Q.rear==p){    //这是最后一个结点 Q.rear=Q.front; }free(p);return true; 
} //出队——不带头结点
bool DeQueue_(LinkQueue &Q,int &x){if(Q.front==NULL)        //首先判断队空 return false;LinkNode *p=Q.front;    //不带头结点时头指针指向队头元素 x=p->data;Q.front=p->next;if(Q.rear==p){    //这是最后一个结点 Q.rear=NULL;Q.front=NULL; }free(p);return true; 
} //队列的链式存储一般不会出现队满的情况,除非内存不足 int main(){} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/16009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 字符串排序

目录 1.前言 2.题目解析 3.算法原理 4.代码实现 1.前言 在编程练习中&#xff0c;字符串的全排列问题是一个经典的算法问题。通过对字符串进行全排列&#xff0c;可以得到该字符串的所有可能的排列组合。本文将探讨如何对含有重复字符的字符串进行全排列&#xff0c;并且解决…

K8s的kubectl的基本操作

K8s的kubectl的基本操作 K8s基本信息的查看 查看版本信息 kubectl versio查看资源对象简写 kubectl api-resources查看集群信息 kubectl cluster-info配置kubectl自动补全 source <(kubectl completion bash)查看master节点状态 kubectl get cs查看命名空间 kubectl…

10.js预解析

就是在代码执行之前&#xff0c;对代码进行通读解释 只解析两个内容&#xff1a; &#xff08;1&#xff09;对var声明的变量 &#xff08;2&#xff09;声明式函数 &#xff08;1&#xff09;对var声明的变量进行提前声明&#xff0c;但不赋值 var x console.log(x) //undefi…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…

web安全渗透测试十大常规项(一):web渗透测试之CSRF跨站请求伪造

渗透测试之CSRF跨站请求伪造 CSRF跨站请求伪造 CSRF跨站请求伪造

类的内存对齐位段位图布隆过滤器哈希切割一致性哈希

文章目录 一、类的内存对齐1.1规则1.2原因 二、位段2.1介绍2.2内存分配问题2.3跨平台问题2.4使用的注意事项 三、位图的应用3.1 给40亿个不重复的无符号整数&#xff0c;找给定的一个数。&#xff08;int的范围可以到达42亿多&#xff09;3.2 给定100亿个整数&#xff0c;设计算…

Golang实现文件复制

方法&#xff1a;三种 package zdpgo_fileimport ("errors""io""os" )// CopyFile 使用io.Copy进行文件的复制&#xff0c;同时也会复制文件的所有权限 // param src 复制文件 // param des 目标文件 // return error 错误信息 func CopyFile(s…

2024年弘连网络FIC大会竞赛题线下决赛题

总结&#xff1a; FIC决赛的时候&#xff0c;很多小问题没发现&#xff0c;在pve平台做题确实很方便。 这套题目复盘完&#xff0c;服务器这块的知识确实收获了很多&#xff0c;对pve集群平台和网络拓扑也有了一定的认识&#xff0c;感谢各位大佬悉心指导。 接下来&#xff0…

【FPGA】Verilog:奇校验位生成器的实现(Odd Parity bit generator)

解释奇数奇偶校验位生成器和检查器的仿真结果及过程。 真值表和卡洛图: Odd Parity Bit Generator A B C

怎么在pyqt中显示matplotlib的绘图?

想要在pyqt中显示matplotlib的绘图&#xff0c;在绘图时&#xff0c;其实不必使用以下语句&#xff1a; matplotlib.use("Qt5Agg") # 声明使用QT5最关键的语句是&#xff1a; from matplotlib.backends.backend_qt5agg import FigureCanvasQTAggFigureCanvasQTAgg…

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言&#xff0c;因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后&#xff0c;你可以从事以下几方面的工作&#xff1a; 1. Web 开发 Python 有很多流行的 Web 框架&#xff0c;如&#xff1a; Django&#xff1a;一个…

Android studio的Gradle出问题

Gradle sync failed: Plugin [id: com.android.application, version: 7.1.1, apply: false] was not found in any of the following sources: 在src里面的build.gradle中 plugins { id ‘com.android.application’ } 的上面加上 buildscript {repositories {jcenter()}depen…

从 0 开始实现一个网页聊天室 (小型项目)

实现功能 用户注册和登录好友列表展示会话列表展示: 显示当前正在进行哪些会话 (单聊 / 群聊) , 选中好友列表中的某个好友, 会生成对应的会话实时通信, A给B发送消息, B的聊天界面 / 会话界面能立刻显示新的消息 TODO: 添加好友功能用户头像显示传输图片 / 表情包历史消息搜…

禅道密码正确但是登录异常处理

禅道密码正确&#xff0c;但是登录提示密码错误的异常处理 排查内容 # 1、服务器异常&#xff0c;存储空间、数据库异常 # 2、服务异常&#xff0c;文件丢失等异常问题定位 # 1、df -h 排查服务器存储空间 # 2、根据my.php排查数据库连接是否正常 # 3、修改my.pho,debugtrue…

探索切片索引:列表反转的艺术

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;列表反转的挑战 二、切片索引的基本概念 三、切片索引实现列表反转 …

程序员副业赚钱的底层逻辑

赚钱就像玩拼图游戏&#xff0c;要懂得把面包屑组装成为一面包 分享一点心得&#xff1a;你会发现赚钱的商机其实就像个拼图游戏&#xff0c;有很多面包屑、很多碎片&#xff0c;真的、假的、有价值的、误导的&#xff0c;都散落在各处。 你需要一一拾取&#xff0c;一一甄别…

gerrit自启动方案—windows服务

在windows系统中&#xff0c;想将gerrit做成开机自启动一般使用两个方法 1.用.bat脚本方法 编写.bat脚本&#xff0c;并将脚本文件生成快捷方式&#xff0c;放置在电脑的启动目录下&#xff0c;电脑开机或重启后&#xff0c;脚本会自动启动 &#xff08;winR 输入 shell:start…

vs2013使用qt Linguist以及tr不生效问题

一、qt Linguist&#xff08;语言家&#xff09;步骤流程 1、创建翻译文件,在qt选项中 2.选择对应所需的语言&#xff0c;得到.ts后缀的翻译文件 3.创建.pro文件&#xff0c;并将.ts配置在.pro文件中 3.使用qt Linguist 打开创建好的以.ts为后缀的翻译文件&#xff0c;按图所示…

细粒度图像分类论文(AAM模型方法)阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

Git命令之江湖百晓生

Git 命令大全 第一章&#xff1a;Git 简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年创建&#xff0c;用于有效、高速地处理从小到大的项目。它是一个命令行工具&#xff0c;用于跟踪和管理源代码历史记录。 第二章&#xff1a;Git 的 1…