数据结构:链式队列

ops/2024/10/18 14:16:59/

目录

        1.实现思想

        2.包含头文件

        3.结点设计

        4.接口函数实现


实现思想

        链式队列,指的是使用链表实现的队列,是一种常见的数据结构。队列遵循先进先出(FIFO)的原则,即最先进入队列的元素将是最先被移除的元素。链式队列通过链表的动态特性来实现队列的插入和删除操作,提供了比静态数组实现的队列更高的灵活性。为了实现链式队列,需要实现以下几点:

        1.节点定义: 链式队列由一系列节点组成,每个节点通常包含两个部分:数据部分和指向下一个节点的指针

        2.入队:在队列的末尾添加一个新元素。这通常涉及到创建一个新的节点,并将其链接到队尾,然后更新队尾指针

        3.出队:移除队列的第一个元素,并返回其数据。这通常涉及到更新队首指针,以及释放被移除节点的内存(如果需要的话)

        4.队首和队尾指针: 链式队列需要维护两个指针:队首指针(指向队列的第一个元素)和队尾指针(指向队列的最后一个元素)。这两个指针使得入队和出队操作可以在 O(1) 时间复杂度内完成

        5.动态内存管理: 由于链式队列的元素是动态添加的,因此需要使用动态内存分配来创建新的节点。在 C 或 C++ 中,通常通过 malloc 或 new 操作符来完成

        6.空队列处理: 需要有一种机制来检测队列是否为空,通常可以通过检查队首指针是否为 NULL 来实现


包含头文件

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

结点设计

typedef int Elemtype;    //给int类型取别名为Elemtypetypedef struct LinkNode{Elemtype data;struct LinkNode* next;   //定义struct LinkNode类型的指针next指向下一个结点
}QNode,*LNode;typedef struct LiNode{struct LinkNode* rear;	//定义struct LinkNode类型的指针rear指向队尾结点struct LinkNode* front;	 //定义struct LinkNode类型的指针front指向队头结点
};

接口函数实现

/*注:定义存储指向队头结点与指向队尾结点的指针后,在函数中调用两个结构体时,要注意其中的关系,不要因为队头的结点的指针指向的结点地址的再次指向而造成混乱
*/void InitLNode(LiNode &B);  //声明函数InitLNode用于初始化链式队列
bool InputLNode(LiNode &B);	//声明函数InputLNode用于在队列中输出数据
bool LNodeEmpty(LiNode& B);	//声明函数LNodeEmpty用于判断队列是否为空
void InsertLNode(LiNode &B);//声明函数InsertLNode用于在队列中输入数据
bool DestroyQueue(LNode& A);//声明函数DestroyQueue用于销毁队列//在队列中输出数据
bool InputLNode(LiNode &B) {						if (LNodeEmpty(B)) {return false;}else{LNode Q = B.front->next;	//定义LNode类型的指针变量Q指向头结点的下一个结点printf("输出数据为:%d", Q->data);//输出数据B.front->next = Q->next;                        if(B.rear == Q){	    //判断输出的结点是否为最后一个结点B.rear = B.front;	//将其队列置空}return true;}
}//判断队列是否为空
bool LNodeEmpty(LiNode &B){			if(B.front == B.rear){printf("传入的链式队列为空");return true;}else{return false;}
}//在队列中输入数据
void InsertLNode(LiNode &B){						Elemtype i;				//定义int类型的变量i接受键盘键入的数据LNode W = (QNode*)malloc(sizeof(QNode));//定义LNode类型w向计算机的堆内申请存储空间printf("请输入要插入的数据");scanf_s("%d", &i);W->data = i;W->next = NULL;B.rear->next = W;B.rear = W;					//更新尾结点的指向
}//初始化链式队列
void InitLNode(LiNode &B){	B.front=B.rear=(QNode*)malloc(sizeof(QNode));		B.front->next = NULL;						//更新结点中next的指向printf("初始化链式队列成功\n");
}


http://www.ppmy.cn/ops/47861.html

相关文章

WM_COMMAND

WM_COMMAND 是Windows应用程序中一个非常重要的消息。它主要用于通知应用程序在用户界面对控件&#xff08;如菜单项、按钮、列表框等&#xff09;进行操作时发生的事件。处理这个消息是响应用户输入的重要途径之一。 WM_COMMAND 消息详解 当用户与窗口中的控件交互时&#x…

Gavin Wood 访谈|Polkadot 从何而来,又将如何面对 AI 时代?

如果没有宏观经济&#xff0c;加密世界可能无法存在。或许&#xff0c;Satoshi Nakamoto 也永远不会写出那篇开创性的白皮书。区块链技术作为指数时代的核心之一&#xff0c;在宏观经济理论中占有重要地位。传统的经济增长公式是人口增长加生产率增长加债务增长。然而&#xff…

python基础实例

下一个更大的数 定义一个Solution类&#xff0c;用于实现next_great方法 class Solution: def next_great(self, nums1, nums2): # 初始化一个空字典answer&#xff0c;用于存储答案 answer {} # 初始化一个空列表stack&#xff0c;用于存储待比较的数字 stack [] # 遍历nu…

【云原生_K8S系列】什么是 Kubernetes Pod?用实际例子解释

Kubernetes&#xff08;简称K8S&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展和管理。在Kubernetes中&#xff0c;Pod是最小的部署单元。理解Pod的概念对于掌握Kubernetes至关重要。本篇文章将详细解释什么是Kubernetes Pod&#xff0c;并…

网络安全第一课

网络设备、 交换机&#xff0c;路由器&#xff0c;网线&#xff0c;防火墙。 虚拟化技术分为哪两大类 交换机是组建局域网&#xff0c;内网的重要设备&#xff0c;但是交换机依赖路由器的内网外网 局域网一般称为内网 路由器两个口&#xff0c;一个连接内网&#xff0c;一…

Spark Streaming 概述及入门案例

一、介绍 1. 不同的数据处理 从数据处理的方式&#xff1a; 流式数据处理(Streaming)批量数据处理(Batch) 从数据处理的延迟&#xff1a; 实时数据处理(毫秒级别)离线数据处理(小时或天级别) 2. 简介 SparkStreaming 是一个准实时(秒或分钟级别)、微批量的数据处理框架Spa…

JVM 虚拟机

JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机&#xff0c;虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机有&#xff1a;JVM、VMwave、Virtual Box等。JVM 是一台被定制过的现实当中不存在的计算…

酒茶元宇宙 - 探索味觉与科技的融合奇迹

在追求创新和完美体验的新时代&#xff0c;酒茶文化也迎来了前所未有的变革——"酒茶元宇宙"。这一概念不仅重新定义了我们对于酒茶享受的理解&#xff0c;更为酒茶爱好者及业界人士提供了一个独特的交流平台。让我们一起探索这个将传统饮品与现代科技完美融合的全新…