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

队列——链式存储

时间:2023-09-03 11:44:37浏览次数:26  
标签:存储 队列 结点 next 链式 front NULL LinkNode rear

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

 

标签:存储,队列,结点,next,链式,front,NULL,LinkNode,rear
From: https://www.cnblogs.com/zyj3955/p/17674817.html

相关文章

  • 队列——顺序存储
    #include<stdio.h>#defineMaxSize10//定义typedefstruct{intdata[MaxSize];intrear,front;//队尾指针rear指向队尾元素的下一个位置,队头指针front指向对头元素}SqQueue;//初始化voidInitQueue(SqQueue&Q){Q.front=Q.rear=0;}//判断队空b......
  • 前端存储方案一览
    Cookies在HTML5标准前本地储存的主要的也是最早提出的⽅式,优点是兼容性好,请求头⾃带cookie⽅便(使用fetch的话需要额外配置),缺点是⼤⼩只有4k,⾃动请求头加⼊cookie浪费流量,而且每个domain限制20个cookie,使⽤起来麻烦,需要自行封装相关方法。Cookie一旦创建成功,名称就无法修改Cookie是......
  • rabbitmq死信队列
    死信的概念死信队列(DeadLetterQueue)是指当消息无法被消费者正常消费时,将这些无法消费的消息发送到专门的死信队列中,以便进行进一步的处理。这种处理方式通常被称为“死信处理”。应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生......
  • 在SQL server中如何写存储过程
    总结一下SQLserver中如何存储。USE[SSQADM] ----Use是跳转到哪个数据库,对这个数据库进行操作。GO    ----GO向SQLServer实用工具发出一批Transact-SQL语句结束的信号,相当于提交上面的SQL语句。----GO是把t-sql语句分批次执行。(一步成功了才会执行下一......
  • Springboot项目打成jar包,如何设置存储路径?并且上传的静态文件如何访问?
    第一步设置资源资源存储路径找到需要保存指定文件路径添加以下代码//保存上传的资源文件路径,路径在部署jar包同级目录。Stringpath=System.getProperty("user.dir")+"/static/images/";Filedir=newFile(path);if(!dir.exists()){dir.mkdirs();}......
  • portswigger——Response queue poisoning(响应队列中毒)_02
    响应队列中毒响应队列中毒是一种强大的请求走私攻击形式,它会导致前端服务器开始将响应从后端映射到错误的请求。实际上,这意味着同一前端/后端连接的所有用户都将获得针对其他人的持久响应。这是通过走私一个完整的请求来实现的,从而在前端服务器只期望一个响应时从后端引发两个响......
  • Linux文件系统及存储
                   ......
  • Redis队列Stream&Redis多线程详解(8)
    Redis目前最新版本为Redis-6.2.6,考虑到实际的情况,本次课程会以CentOS7下Redis-6.2.4版本进行讲解。下载地址:https://redis.io/download安装运行Redis很简单,在Linux下执行上面的4条命令即可,同时前面的课程已经有完整的视频讲解,请到网盘中下载观看,并自行安装。如安装过程出......
  • 分布式存储FusionStorage将搬迁走的计算节点踢出集群
    1、登录DeviceManager管理界面,在服务-vbs页面下,选中已经异常的VBS,将异常的VBS进行强制删除。2、通过第三方远程连接工具,连接进FSM后台,IP为浮动IP,用fsadmin用户进入,切换到root用户。fsadmin默认密码:IaaS@OS-CLOUD9!2.1执行su- rootroot默认密码:IaaS@OS-CLOUD8!3、执行ism......
  • 计算机体系结构量化学习方法-学习笔记0(i7 存储层次结构)
    1、interi7所用层次结构内容​ 修改处DataDLB(DataTLB).​ 2、Interi7存储器层次结构及指令与数据访问步骤图 3、指令与数据访问步骤:指令地址的页帧(36bit)被发送给指令TLB(①)。同时虚拟地址的12位页内偏移量被发送给指令缓存(ICACHE).对于8路组相连cache来说,缓存需要......