队列结构的链式表示与实现

数据结构—队列的链式表示和实现 链队是指采用链式存储结构实现的队列。通常链队用单链表来表示,如图所示。一个链队显然需要两个分别指示队头和队尾的指 针(分别称为头指针和尾指针)才能唯一确定。这里和线性表的单链表一样,为了操作方便起见,给链队添加一个头结点,并令头指针始终指向头结点。 1.队列的链式表示 typedef struct QNode { int data; struct QNode *next; }QNo... 阅读详情

1、队列介绍

它与栈刚好相反,是一种先进先出的线性表,它有两个端口添加、删除元素,一个端口只能添加元素,被称为入队,该端口被为队尾,另一个端口只能删除,被称为出队,该端口被称为队头。

2、队列结构所具备的功能

1、创建队列

2、销毁队列

3、队列是否为空

4、队列是否为满

5、入队

6、出队

8、查看队头元素

9、查看队尾元素

10、队列元素数量

注:只有顺序栈结构才有需要判断队列是否满。

3、队列结构的链式表示与实现

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define TYPE int

typedef struct Node
{
	TYPE data;
	struct Node* next;
}Node;

Node* create_node(TYPE data)
{
	Node* node = malloc(sizeof(Node));
	node->data = data;
	node->next = NULL;
	return node;
}

typedef struct QueueList
{
	Node* front;
	Node* rear;
}QueueList;

// 创建队列
QueueList* create_queue(void)
{
	QueueList* queue = malloc(sizeof(QueueList));
	queue->front = NULL;
	queue->rear = NULL;
	return queue;
}

// 销毁队列
void destroy_queue(QueueList* queue)
{
	while(NULL != queue->front)
	{
		Node* node = queue->front;
		queue->front = node->next;
		free(node);
	}
	free(queue);
}

// 判断队列是否为空
bool empty_queue(QueueList* queue)
{
	return NULL == queue->front;
}

// 入队
void push_queue(QueueList* queue,TYPE data)
{
	Node* node = create_node(data);
	if(empty_queue(queue))
	{
		queue->front = node;
		queue->rear = node;
		return;
	}

	queue->rear->next = node;
	queue->rear = node;
}

// 出队
bool pop_queue(QueueList* queue)
{
	if(empty_queue(queue))
		return false;

	Node* node = queue->front;
	queue->front = node->next;
	free(node);
}

// 查看队头元素,调用该函数前要先判断队列是否为空,否则就会使用到空指针
TYPE front_queue(QueueList* queue)
{
	return queue->front->data;
}

// 查看队尾元素,调用该函数前要先判断队列是否为空,否则就会使用到野指针
TYPE rear_queue(QueueList* queue)
{
	return queue->rear->data;
}

// 队列元素数量
size_t size_queue(QueueList* queue)
{
	size_t size = 0;
	for(Node* n=queue->front; NULL!=n; n=n->next)
	{
		size++;
	}
	return size;
}

int main(int argc,const char* argv[])
{
	QueueList* queue = create_queue();
	for(int i=0; i<10; i++)
	{
		push_queue(queue,i);
		printf("front:%d rear:%d\n",
			front_queue(queue),
			rear_queue(queue));
	}
	printf("---------------------\n");
	while(!empty_queue(queue))
	{
		printf("front:%d rear:%d\n",
			front_queue(queue),
			rear_queue(queue));
		pop_queue(queue);
	}
}

4、顺序队列的表示与实现

顺序栈的栈顶下标会随着元素入栈增大,元素出栈减小,从而让空间重复使用,而顺序队列的队头指针和队尾指针,会随着元素的入队出队一直增加,无法重复使用,而形成一次性的数据结构。

为了避免这种情况,当队头下标的队尾下标到达存储空间的末尾时,要想办法把队头下标的队尾下标"回头",就是把顺序队列的存储空间当作一个"环形",循环使用,所以顺序队列也叫循环队列。

数据结构(栈与队列)——栈的顺序表示和实现、队列的链式表示和实现 实验内容: 编写一个程序实现顺序栈的各种基本运算。 实现队列的链式表示和实现。 实验步骤: 1.初始化顺序栈 插入元素 删除栈顶元素 取栈顶元素 遍历顺序栈 置空顺序栈 初始化并建立链队列 入链队列 出链队列 遍历链队列 1、栈的顺序表示和实现 #include <stdio.h> #include <stdlib.h> #include <conio.h> #define TRUE 1 #define FALSE 0 #define OK 阅读详情

相关推荐

【数据结构笔记07】数据结构之队列的链式表示和实现(链队)

队列的链式表示和实现,是采用链表的形式来存储队列元素,一个链表结点存储一个队列元素,由于是链表,所以每一个链表结点就需要包含数据域和指针域,并且链队还有队头和队尾,需要单独定义两个指针,用于表示队头和队尾指针。链队需要使用两个结构体来定义。第一个结构体,用于定义链队中的每一个元素结点。第二个结构体,用于定义链队的队头、队尾指针。// 链队的定义int data;// 数据域// 指针域}QNode;// 链队的队头、队尾指针定义// 队头、队尾指针}LinkQueue;

✅ Java 开发工程师 686

队列的链队表示和实现

一、链队的存储结构 //队列的链式存储结构 typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next; } QNode,*QueuePtr; typedef struct { QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 } LinkQueue; 二、链队的初始化 算法步骤: (1)生成新的结点作为头结点,队头队.

qq_57867712的博客 1151

C语言中队列的链式表示和实现,链队列

这个程序包括构建空队列,插入元素,删除元素,销毁队列,显示元素等功能。

队列的链式表示和实现(C语言)

队列(Queue)是一种基本的数据结构,它可以存储一系列元素,并支持在队尾添加元素,在队首移除元素,遵循先进先出(FIFO)的原则。链表队列是一种基于链表实现的队列,它可以更好地适应动态添加和删除元素的情况,并且不需要事先指定队列大小。链表队列在计算机科学中有着广泛的应用,例如网络编程中的请求调度,操作系统中的进程调度等。

qq_73884528的博客 1055

解决倍福ADS通信错误1861和6:一次完整的TwinCAT3路由配置与故障排查实录

本文详细解析了在Linux系统上解决倍福ADS通信错误1861和6的完整流程,包括TwinCAT3路由配置与故障排查。通过实例演示了如何正确配置AMS NetID、使用adstool工具添加静态路由,以及高级网络抓包分析技巧,帮助工程师快速定位和解决通信问题。

weixin_30875157的博客 521

普罗米修斯监控达梦数据库集群

-----------------------------------新增文件---------------------------------------注:图上即为启动成功,如果没有问题,则使用nohup后台启动程序。官网地址:https://github.com/gy297879328/dameng_exporter。注:prometheus的对数据库的指标采集如果高于60s一次,请手动修改提供表盘中的计算值。修改dameng_exporter.config配置文件,修改账号密码的部分。

weixin_49985403的博客 1684

C/C++ 队列的实现和表示

引言:和栈相反,队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front),和线性表类似,队列也可以有两种存储表示 一、队列的链式表示和实现 用链表表示的队列简称链队列,一个链队列显然需要两个分别指示队头和队尾的指针才能唯一确定 1.队列的链式存储结构 #define TRUE 1 #defi...

电影中的梦的博客 490

等离子体密度诊断集

在实验上不仅要对带电粒子的分布和运动状态进行诊断,如电子温度、电子密度、电离温度等参数,还需要对等离子体中的中性粒子进行必要的实验测量,来获得有关物种的产生、能量分布以及各个激发态布居数分布等信息,如气体温度、转动温度、振动温度、激发温度等参数。

in546的博客 1353

《数据结构》链式队列的表示和实现

#include <string.h> #include <malloc.h> // malloc()等 #include <stdio.h> // EOF(=^Z或F6),NULL #include <stdlib.h> // atoi() // 函数结果状态代码 #define TRUE 1 #define FALSE 0 #define ...

tyustli 562

用SOEM库搞定汇川SV660N伺服电机:一个Linux C程序员的EtherCAT实战笔记

本文详细介绍了如何在Linux系统下使用SOEM库驱动汇川SV660N伺服电机,包括环境搭建、EtherCAT从站设备识别、PDO映射配置、状态机切换与运动控制等关键步骤。通过实战代码示例和常见问题排查指南,帮助开发者快速掌握工业自动化中的EtherCAT通信技术,实现对伺服电机的精准控制。

weixin_29185199的博客 426

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 403

数据结构(C语言) 队列的链式表示和实现

链队列的表示 (a)空队列 (b)元素x入队列 (c)元素y入队列 (d)元素x出队列 预定义常量和类别 见预定义常量和类型 队列的链式存储表示 //----单链队列----队列的链式存储结构 typedef struct QNode { QElemType data; struct QNode* next; }QNode, * QueuePtr; typedef struct { QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue; 基本

AtomQQ_2022313691的博客 2307

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。

zhusl6688的博客 377

队列的链式表示和实现(数据结构)

#include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define INFEASIBLE -1 typedef int Status; typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next; }

1135

NVIDIA Isaac Sim 联合 VS Code 开发调试环境配置

在 Visual Studio Code (VS Code) 中打开 Isaac Sim 软件包主文件夹,即可打开该工作区。注意建议在学习教程和示例时使用 Visual Studio Code。另请参见有关 VS Code 工作区的详细信息,请参阅 Visual Studio Code (VS Code) 文档。

2506_90492529的博客 3106

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2010

C语言 队列的链式结构的实现与表示 数据结构 队列的实现与表示

  五一放假,也没有什么事情可以做的,本来想出去玩一玩或者打打球什么的,可是天公不作美,这两天天气一直是在下雨,弄的人的心情湿透了。 昨天学习了一天的栈和队列,昨天在下午些的时候完成了栈的编程工作。晚上本应该是用来写完队列的程序的,可是晚上到寝室熄灯之前只是差一点程序就可以全部完工了,可是总是有几个小bug调试不过去。没办法,今天上午又花了一个小时才完工。 艾,不过总算写完了,对于数据结构

yijiyong100的专栏 1866

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据结构——队列的链式表示和实现

/* 队列的链式表示和实现 2018.04.20 */ #include&lt;iostream&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int Stat...

JEYMING的博客 948

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构之队列的链式表示及其实现

记录一下自己学习过程中写的代码。以下是我看严蔚敏老师的数据结构教材后,结合教材所讲用C语言实现了关于队列的链式表示及其实现的基本操作,供以后复习所用。本程序建立的队列是一个链式队列,在队列建立之初,队头指针和队尾指针都指向新开辟的头结点,且头结点在整个过程中只存放指针,不存放任何数据。如此,便于程序运行过程中对队列的各种操作。 编译软件:VC++6.0

大地在我脚下 786

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构之队列的链式表示和实现

测试截图: 源代码://测试环境:VS2015 ////头文件 #include "stdafx.h" #include<stdlib.h> #include<stdio.h>//宏定义 #define OVERFLOW -2 #define OK 1 #define ERROR 0//定义节点结构体 typedef struct QNode { int data; struc

chengshijian2015的博客 453

数据结构(c)队列的链式表示实现

#include <iostream> #include <malloc.h> using namespace std; typedef int ElemType; typedef struct QNode { ElemType data; struct QNode* next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; bool init(LinkQueu

ChunkWen的博客 185

12.数据结构 队列_链队列_队列的链式表示和实现

typedef int QElemType; typedef struct QNode { QElemType data; QNode *next; }*QueuePtr; struct LinkQueue { QueuePtr front, rear;//队头、队尾指针 }; 在这里插入代码片

打工人的博客 305

【数据结构】队列的链式表示和实现

#include&lt;iostream&gt; using namespace std; typedef int ElementType; #define ERROR -1 //定义节点 typedef struct Node { ElementType Data; struct Node *Next; }QNode; //定义front和rear指针 typedef struct { ...

zhangxiafll的博客 695

假设以带头结点的循环链表表示队列_数据结构的c++实现之队列-链式队列

数据结构的C++实现之队列-链式队列 注:本文为清华大学计算机系列教材《数据结构》-殷人昆-第2版的学习笔记队列的概念队列(queue)是另一种限定存取位置的线性表.它只允许在表的一端插入,在另一端删除.允许插入的一端叫做队尾(rear),允许删除的一端叫做队头(front).队列存取数据的特点是"先进先出". 链式队列链式队列是队列基于单链表的一种存储表示.在单链表的每一个结点中有两个域:dat...

weixin_39556811的博客 391

队列的链式表示和实现----循环队列

循环队列----队列的顺序表示和实现

烽火前秦路 1489

数据结构14——队列的顺序和链式的表示和操作的实现

头删尾插在使用有限资源时,。。。

weixin_45658431的博客 176
上一篇: 数据结构的基本概念
下一篇: 字符串及相关算法
swewing
博客等级 码龄4年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值