首页 > 其他分享 >队列——链式存储

队列——链式存储

时间:2023-09-12 20:31:38浏览次数:29  
标签:存储 队列 结点 链式 front NULL LinkNode rear 指针

核心思路:

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(){
    
} 

标签:存储,队列,结点,链式,front,NULL,LinkNode,rear,指针
From: https://blog.51cto.com/zyj3955/7448260

相关文章

  • 安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因
    安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控Easy......
  • 视频监控管理平台/视频汇聚/视频云存储EasyCVR安全检查相关问题及解决方法3.0
    智能视频监控系统/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力,作为安防视频监控综合管理平台,它支持多协议接入、多格式视频流分发,视频监控综合管理平台EasyCVR支持海量视频汇聚管理,可应用在多样化的场景上,包括城市“一网统管”建设、智慧工地风险预警、智慧工厂......
  • AttributeError: 'int' object has no attribute 'items' 混合数据存储
    data={'2023:09:01':{'867726032728067':68},'2023:09:02':{'867726032728067':68},'2023:09:03':0,'2023:09:04':{'866384064965578':48,'867266067918648':46......
  • 视频监控管理平台/视频汇聚/视频云存储EasyCVR安全检查的相关问题及解决方法3.0
    智能视频监控系统/视频云存储/集中存储/视频汇聚平台EasyCVR具备视频融合汇聚能力,作为安防视频监控综合管理平台,它支持多协议接入、多格式视频流分发,视频监控综合管理平台EasyCVR支持海量视频汇聚管理,可应用在多样化的场景上,包括城市“一网统管”建设、智慧工地风险预警、智慧工厂......
  • 安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR下级海康设备无法级联是什么原因
    安防视频监控平台/视频集中存储/云存储/磁盘阵列EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。有用户反馈,在使用下级平台的海康设备级联到视频监控Easy......
  • 消息队列 RabbitMQ
    发布者:生产者,消息的发送方。连接:网络连接。Channel:信道,多路复用连接中的一条独立的双向数据流通道。Exchange:交换器(路由器),负责消息的路由到相应队列。类型:direct、fanout、topicBinding:队列与交换器间的关联绑定。消费者将关注的队列绑定到指定交换器上,以便Exchange能准确分发消息......
  • 链式前向星
    在图算法中,有很多数据结构可以存下一张图,如果边的数量m很多(m约等于n^2)和节点数量n的平方相当,那么可以采用邻接矩阵存储,也就是个二维数组。但是如果是稀疏图的话,邻接矩阵显得十分浪费。此时可以使用链式前向星来存储。用C++的结构来说明就是://===============================......
  • 服务器数据恢复-EVA存储更换离线硬盘时又有硬盘离线导致存储崩溃不可用的数据恢复案例
     服务器数据恢复环境:HPEVA某型号存储,存储中一共有23块磁盘,上层映射给一台windowsserver服务器上。服务器故障&检测&分析:该EVA存储上三块磁盘指示灯显示黄色,此时存储设备还能正常工作。运维更换显示黄色的指示灯对应的硬盘,在更换硬盘的过程中,又有一块硬盘对应指示灯显示黄色离......
  • 存储管理系统设计
    存储管理系统设计一、Dcache设计数据cache是一块只读的cache,主要负责缓存处理器操作所需要的数据。该cache选择4路组相连的方式,容量为32KB,行大小为8个字,采用lru替换算法。其结构同样分为存储体和控制器两部分。​ 访问地址位32位,其中​低5位表示行内偏移,​......
  • 如何在Linux上设置高可用的消息队列
    消息队列是现代分布式系统中常用的一种通信方式,它可以在多个进程或者多台服务器之间传递数据,实现解耦和异步通信的目的。在Linux系统上,我们可以通过一些开源的消息队列软件来搭建高可用的消息队列系统。本文将以RabbitMQ为例,介绍如何在Linux上搭建和配置高可用的消息队列。步骤一:安......