定义:采用链式存储结构实现的队列。
通常采用单链表来实现,因此结构与单链表类似。
由于队列的插入和删除操作分别在表的两端进行,所以需要两个分别指向对头和队尾的指针,即队头指针front和队尾指针rear。
图中头指针front和尾指针rear是两个独立的指针变量,从结构上考虑,一般将头指针和尾指针的变量front、rear封装在一个结构类型中作为链队列的数据类型。
typedef int elemtype;
typedef struct QueueNode
{
elemtype data;//用来存放数据元素的信息
struct QueueNode* next;
}LinkedQueueNode;
typedef struct LQueue
{
LinkedQueueNode* front;//队头指针
LinkedQueueNode* rear;//队尾指针
}LQueue,*LinkedQueue;//链队列结构类型
链队列的初始化
就是构造一个空队列,将头指针front和尾指针rear都指向头结点,并置头结点的指针域为空,因为此时队列中还没有数据元素。
//队列的初始化
LinkedQueue Init_LinkedQueue()
{
LinkedQueue Q = (LQueue*)malloc(sizeof(LQueue));
LinkedQueueNode* head = (LinkedQueueNode*)malloc(sizeof(LinkedQueueNode));
Q->front = head;
Q->rear = head;
head->next = NULL;
return Q;
}
入队
数据元素e入队就是将数据元素e插入到链队列的队尾,设置尾指针指向新入队的队尾数据元素。类似于尾插
bool in_LinkedQueue(elemtype e, LinkedQueue Q)
{
LinkedQueueNode* L = (LinkedQueueNode*)malloc(sizeof(LinkedQueueNode));
L->data = e;
L->next = NULL;
Q->rear->next = L;
Q->rear = L;
return true;
}
出队
就是指删除队列的队头数据元素,设置头结点指向链队列中的下一个数据元素。类似于头删。
bool out_LinkedQueue(LinkedQueue Q)
{
LinkedQueueNode* node;
if (Q->front == Q->rear)
{
return false;
}
node = Q->front->next;
Q->front->next = node->next;
if (node == Q->rear)
{
Q->rear = Q->front;
}
printf("%d,", node->data);
free(node);
return true;
}
完整代码
#include<stdio.h>
#include<malloc.h>
typedef int elemtype;
typedef struct QueueNode
{
elemtype data;//用来存放数据元素的信息
struct QueueNode* next;
}LinkedQueueNode;
typedef struct LQueue
{
LinkedQueueNode* front;//队头指针
LinkedQueueNode* rear;//队尾指针
}LQueue,*LinkedQueue;//链队列结构类型
//队列的初始化
LinkedQueue Init_LinkedQueue()
{
LinkedQueue Q = (LQueue*)malloc(sizeof(LQueue));
LinkedQueueNode* head = (LinkedQueueNode*)malloc(sizeof(LinkedQueueNode));
Q->front = head;
Q->rear = head;
head->next = NULL;
return Q;
}
//入队
bool in_LinkedQueue(elemtype e, LinkedQueue Q)
{
LinkedQueueNode* L = (LinkedQueueNode*)malloc(sizeof(LinkedQueueNode));
L->data = e;
L->next = NULL;
Q->rear->next = L;
Q->rear = L;
return true;
}
//出队
bool out_LinkedQueue(LinkedQueue Q)
{
LinkedQueueNode* node;
if (Q->front == Q->rear)
{
return false;
}
node = Q->front->next;
Q->front->next = node->next;
if (node == Q->rear)
{
Q->rear = Q->front;
}
printf("%d,", node->data);
free(node);
return true;
}
int main()
{
LinkedQueue Q;
Q = Init_LinkedQueue();
return 0;
}
------甜辣椒------------------------------------------------------------------
文章浏览阅读1.5k次。简介:最新大猿人中控充值系统 免授权破解版 支持公众号H5、分销等功能功能简介:大猿人中控系统目前是市面上用的最多的电话费充值中控系统,支持代理分销、公众号H5、API接口对接等功能,也是目前最完善的一款中控系统,前端全开源,已破解免授权!配置环境:php7.3 + Redis搭建教程:1、首先吧大猿人中控系统压缩包上传到服务器内进行解压,然后吧数据库文件导入数据库内2、修改/application/database.php 文件进行配置链接数据库。_猿人充值系统 3.2 漏洞
文章浏览阅读81次。为什么80%的码农都做不了架构师?>>> ..._gtk3 异形窗口
文章浏览阅读2.6k次。#include <stdio.h>#include <string.h>#include <string.h>int main(void){ int a[5][5] = {17,24,1,8,15, 23,5,7,14,16, 4,6,13,20,22, 10,12,19,21,3, 11,18,25._验证下列矩阵是否为魔方阵。魔方阵是每一行、每一列、主副对角线上的元素之和都是
文章浏览阅读51次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-本课题研究的疫情返乡人员管理系统,主要功能模块包括:防疫须知、疫情用品、返乡报备、用户反馈管理等,主要是主要采取Mysql作为后台数据的主要存储单元,运用软件工程原理和开发方法,采用Python的Django技术构建的,实现了系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。
文章浏览阅读1.1k次。首先我这篇博客的内容是我不知道oracle里的 cache 是什么,结果越查越多。。。“序列的cache通常为 20,但在需要依据序列值判断创建的先后顺序时必须是 NOCACHE”,关于这句话,是公司的数据库规范里提到的一句话,但是我感觉nocache会导致的问题好像还不少,所以我很纠结,但是除了根据序列值判断创建的先后顺序外,还有其他的靠谱的方式来判断先后顺序吗?难道入库时间不可以吗..._数据库中的nocache是什么意思
文章浏览阅读193次。一、字符串多行书写有时为了书写阅读方便,需要将一大串的字符串写成多行举例源码 MyUart_Printf("moduleConfigParams=>\r\n"\ "\tuartBaudrate:%s\r\n"\ "\tuartStopbit:%s\r\n"\ "\tparityType:%s\r\n"\ "\trfC..._c语言编辑多行源代码中的字符串
文章浏览阅读956次。前言 2020年5G MEC由探索走向商用,作为运营商中部署MEC的先行者,中国联通实现了MEC从示范项目到商业化落地的转变,全国MEC节点建设已初具规模,云网一体化转型效果显著。..._成立5g虚拟支撑团队
文章浏览阅读71次。HTTP Archieve有个统计,图片内容已经占到了互联网内容总量的62%,也就是说超过一半的流量和时间都用来下载图片。从性能优化的角度看,图片也绝对是优化的热点和重点之一,Google PageSpeed或者Yahoo的14条性能优化规则无不把图片优化作为重要的优化手段,本文覆盖了Web图片优化的方方面面,从基本的图片格式选择、到尚未被广泛支持的响应式图片均有所提及。Google Web ..._jpegoptim optipng pngquant gifsicle
文章浏览阅读249次,点赞4次,收藏4次。openGauss提供向量化引擎,通常用在OLAP数据仓库类系统。主要是因为分析型系统通常是数据处理密集型,基本上都是采用顺序方式来访问表中大部分的数据,然后再进行计算,最后将计算结果输出给用户。
文章浏览阅读639次。相信很多站长在使用宝塔面板的同时也会安装云锁用于加固服务器安全性,不过有时因为Nginx版本过高等问题导致安装云锁时无法自动安装Web防护模块,所以还需要我们在Linux系统下额外将云锁Web防护模块编译进Nginx才可以。之前也转载过一篇一、上传云锁Web防护模块压缩包并解压Ps:其实宝塔添加模块功能里可以通过配置shell脚本实现这些前置准备,但我还是喜欢用手动的方式上传,这样使步骤看起来更直..._宝塔 云锁自编译 测试
文章浏览阅读8.4k次。原文作者:雪飘碧鸳 在github上导入项目,或其他地方导入Android Studio,出现Error:A problem occurred configuring project ‘:app’.的错误。其实这种错误有很多种原因,需要对每种情况进行不同的处理才行,这里说的一种情况是JNI的情况,即该项目使用到C/C++库,此时需要引入NDK才行,先看下错误提示Gradle ‘trunk’ ..._error:a problem occurred configuring project ':app'.
文章浏览阅读603次。groupby一个索引的比较简单,这里主要讲两个索引的:这里先设dataframe为下图然后根据第0列和第1列来进行分组,再对第二列进行数量统计,这里用了nunique函数来进行数量统计上图中最上面的2表示是根据原表的第3列即序号2的那一列使用的agg函数得到的结果。unstack是把一维表转换成二维表,即把(0,1)这对分组条件分别写成表的行列索引,一一对应agg函数得到的结果,如下图:stack是把二维表转换成一维表,类似花括号形式(就像是思维导图一层一层括出去),第一列写上原本的行索引_group by unstack