首页 > 其他分享 >队列链式实现

队列链式实现

时间:2024-04-07 15:59:39浏览次数:27  
标签:结点 队列 next 实现 链式 front NULL LinkNode rear

链式存储实现的队列:链队列

typedef struct LinkNode{             //链式队列结点
    ElemType data;
    struct LinkNode *next;
}LinkNode;


typedef struct{                     //链式队列
    LinkNode *front,*rear;//队列的队头和队尾指针
}LinkQueue;

带头结点:

不带头结点:

一、初始化:

1.初始化(带头结点):

typedef struct LinkNode{
    ElemType data;
    struct LinkNode *next;
}LinkNode;


//初始化队列(带头结点)
void InitQueue(LinkQueue &Q){
    //初始时front、rear都指向头结点
    Q.front=Q.rear=( LinkNode*)malloc(sizeof(LinkNode) ) ;
    Q.front->next=NULL;
}

void testLinkQueue( ){
    LinkQueue Q;       //声明一个队列
    InitQueue(Q);       //初始化队列
//...后续操作...
}

typedef struct{
    LinkNode *front,*rear;
}LinkQueue;

//判断队列是否为空
bool IsEmpty(LinkQueue Q){
    if(Q.front==Q.rear)
       return true;
    else
       return false;
}

2.初始化(不带头结点):

//初始化队列(不带头结点)
void InitQueue(LinkQueue &Q){
    //初始时front、rear都指向NULL
    Q.front=NULL;
    Q.rear=NULL;
}

//判断队列是否为空(不带头结点)
bool IsEmpty(LinkQueue Q){
    if(Q.front==NULL)
       return true;
    else
       return false;
}

二、入队操作:

1.入队(带头结点):

//新元素入队(带头结点)
void EnQueue(LinkQueue &Q,ElemType x){
    LinkNode *s=(LinkNode *)malloc(sizeof( LinkNode) ) ;
    s->data=x;
    s->next=NULL;
    Q.rear->next=s;        //新结点插入到rear之后
    Q.rear=s;              //修改表尾指针
}

step1:

step2:

step3:  

step4:  

step5:  

 

2.入队(不带头结点):

//新元素入队(不带头结点)
void EnQueue(LinkQueue &Q,ElemType 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;           //新结点插入到rear结点之后
       Q.rear=s;                 //修改rear指针
    }
}

三、出队操作:

1.出队(带头结点):

//队头元素出队(不带头结点)
bool DeQueue(LinkQueue &Q,ElemType &x){
    if(Q.front==Q.rear)
       return false;        //空队
    LinkNode *p=Q.front->next;
    x=p->data;             //用变量x返回队头元素
    Q.front->next=p->next;       //修改头结点的next指针
    if(Q.rear==p)                //此次时最后一个结点出队
       Q.rear=Q.front;          //修改real指针
    free(p);                    //释放结点空间
    return true;
}

tips:若p是最后一个结点还需要修改表为指针,让它指向头结点。

如图:

 2.出队(不带头结点):

//队头元素出队(不带头结点)
bool DeQueue(LinkQueue &Q,ElemType&x){
    if(Q.front==NULL)
       return false;                //空队
    LinkNode *p=Q.front;            //p指向此次出队的结点
    x=p->data;                      //用变量x返回队头元素
    Q.front=p->next;               //修改front指针
    if(Q.rear==p){                 //此次是最后一个结点出队
       Q.front = NULL;             //front指向NULL
       Q.rear = NULL;              //rear指向NULL
}
free(p);                          //释放结点空间
return true;
}

四、队列满的情况:

顺序存储———预分配的空间耗尽时队满
链式存储———一般不会队满,除非内存不足
 

标签:结点,队列,next,实现,链式,front,NULL,LinkNode,rear
From: https://blog.csdn.net/m0_64055811/article/details/137275309

相关文章

  • Oracle 实现当月日历
    selectmax(su)su,max(mo)mo,max(tu)tu,max(we)we,max(th)th,max(fr)fr,max(sa)safrom(selectcasewhend=1thenddendsu,casewhend=2thenddendmo,casewhend=3thenddendtu,casewhend=4thenddendwe,casewhend=5t......
  • C#开发之WPF项目中权限控制的实现(attribute)
    1功能描述实现一个权限检查机制,以确保用户根据其权限级别进行相应的操作。定义四级权限:Operator,Maintenance,Supervisor,Administrator,每一级权限都有其特定的操作范围。能够根据用户的权限级别判断用户是否有权执行特定的操作。2设计分析如果实现为接口形式,那么每次在需......
  • PageOffice6 实现 word 全文检索
    在文档服务器中存储有成千上万个文档的情况下,用户想要找到并打开包含特定关键字的文档,无疑是一项艰巨的任务。如何高效地管理和检索大量的Word文档呢?在现有的技术解决方案中,许多方法都依赖于服务器端的ApachePOI技术。这种技术的基本原理是,先将所有文档的文本内容提取出来,然后存......
  • 教你如何使用Zig实现Cmpp协议
    本文分享自华为云社区《华为云短信服务教你用Zig实现Cmpp协议》,作者:张俭。引言&协议概述中国网络通信集团短信网关协议(CNGP)是中国网通为实现短信业务而制定的一种通信协议,全称叫做ChinaNetcomShortMessageGatewayProtocol,用于在PHS短消息网关(SMGW)和服务提供商(SP)之间、短消......
  • 基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统功能结构图系统功能界面图用户登录、用户注册界面图4垃圾图谱界面图管理员登录界面图用户......
  • 基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统功能结构图管理员登录界面图管理员功能界面图用户管理界面图车辆品牌管理界面图车辆颜色管......
  • 数控机床采集网关助力企业实现智能化生产-天拓四方
    随着工业4.0时代的到来,智能制造成为制造业转型升级的重要方向。数控机床作为制造业的核心设备,其数据采集与监控对于提升生产效率、优化生产流程具有重要意义。本案例将介绍数控机床采集网关的应用,通过该网关实现数控机床数据的实时采集、传输与分析,助力企业实现智能化生产。案......
  • go | 上传文件分析 | http协议分析 | 使用openssl 实现 https 协议 server.key、serve
    是这样的,现在分析抓包数据test.gopackagemainimport( "fmt" "log" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //Uploadsinglefile r.MaxMultipartMemory=8<<20 r.POST("/upload",func(......
  • 二分+单调队列优化 2
    7-7列车调度(天梯赛选拔赛)https://pintia.cn/problem-sets/1768624240956489728/exam/problems/1768624240990044166?type=7&page=0火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以......
  • 二分+单调队列思想
    [AHOI2018初中组]分组(洛谷P4447)题目描述小可可的学校信息组总共有\(n\)个队员,每个人都有一个实力值\(a_i\)。现在,一年一度的编程大赛就要到了,小可可的学校获得了若干个参赛名额,教练决定把学校信息组的\(n\)个队员分成若干个小组去参加这场比赛。但是每个队员都不会愿意与......