首页 > 其他分享 >2023-04-01-队链LinkQueue的基本操作

2023-04-01-队链LinkQueue的基本操作

时间:2023-04-01 15:14:02浏览次数:40  
标签:队链 01 data LinkQueue next front 基本操作 LinkNode rear

//队链

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

typedef struct LinkNode//定义队链结点
{
    int data;
    struct LinkNode *next;
    
}LinkNode;

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

void initLinkQueue(LinkQueue *Q)//队链初始化
{
    (*Q)=(LinkQueue)malloc(sizeof(LinkQueue));//Q是一个指针,所以需要进行初始化,否则便是一个野指针,没有办法赋值
    
    (*Q)->front = (*Q)->rear = (LinkNode *)malloc(sizeof(LinkNode));//让front和rear指向头结点
    (*Q)->front->next = NULL;
}

bool isEmpty(LinkQueue Q)//判断队链是否为空
{
    if(Q->front == Q->rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void EnLinkQueue(LinkQueue *Q,int e)//入队操作
{
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->data=e;
    p->next=NULL;
    (*Q)->rear->next=p;
    (*Q)->rear=p;
}

bool DeLinkQueue(LinkQueue *Q,int *e)//出队操作
{
    if(isEmpty(*Q))
    {
        return false;
    }
    else
    {
        *e=(*Q)->front->next->data;//因为front指向的是头结点,所以删除的是front的next
        LinkNode *p;
        p=(*Q)->front->next;//因为front指向的是头结点,所以删除的是front的next
        (*Q)->front->next=p->next;
        if((*Q)->rear==p)
        {
            (*Q)->rear=(*Q)->front;//当队链中只有一个结点时,即rear指向的结点,则删除后让rear和front都指向头结点
        }
        free(p);
        return true;
    }
}

int main()
{
    LinkQueue Q;
    initLinkQueue(&Q);
    EnLinkQueue(&Q,666);
    EnLinkQueue(&Q,888);

    int *e;
    int a=0;
    e=&a;

    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    DeLinkQueue(&Q,e);
    printf("delete_value: %d",*e);
    printf("front_value: %d rear_value: %d\n",Q->front->next->data,Q->rear->data);
    
    return 0;
}

 

标签:队链,01,data,LinkQueue,next,front,基本操作,LinkNode,rear
From: https://www.cnblogs.com/ryuichi-ssk/p/17278635.html

相关文章

  • 数据库应用2023-04-01
     indexvsfulltextindexinmysqlInMySQL,anindexisadatastructurethatimprovesthespeedofdataretrievaloperationsonatable.Itworksbyallowingthedatabasetofindandretrievespecificrowsmorequickly,byreducingtheamountofdatath......
  • 《Mysql基础》【Mysql表的基本操作 新建表、修改表、删除表、外键约束、主键约束、完
     --mysql数据库程序设计笔记:表基本操作:1、新建表:格式如:1)、建表加主键:createtable表名(idintNOTNULLauto_incrementcomment'自增主键id',列名类型(范围)comment'列备注',...primarykey(id))engine=InnoDB;2)、建表加候选键副键约束createtable表名......
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
    日文假名和韩国谚文回忆上次内容上次回顾了非ascii的拉丁字符编码的进化过程0-127是ascii的领域 世界各地编码分布拉丁字符扩展ascii共16种由iso组织制定从iso-8859-1到iso-8859-16 无法同时显示俄文和法文  此......
  • [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
    日文假名和韩国谚文回忆上次内容上次回顾了非ascii的拉丁字符编码的进化过程0-127是ascii的领域世界各地编码分布拉丁字符扩展ascii共16种由iso组织制定从iso-8859-1到iso-8859-16无法同时显示俄文和法文此时中日韩的文字也需要进入计算机象形文字的字符集超级巨大日本......
  • day01
    剑指Offer09.用两个栈实现队列leetcode传送门用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回-1)分析:栈是操作受限的线性表,只能在一......
  • x210-2023-04-01
    1、由于之前提到过使用的USB转网口虽然能用,但是在笔记本上会显示红叉,所以不能保证这个会不会给调试带来更多的不确定性,而且刚开始移植用的kernel是kernel.org的,所以在未开启以及添加对应的网络驱动之前,想要直接使用NFS去挂载根文件系统是不大现实的,所以只能选择ramdisk方式(因为ram......
  • 程序设计应用2023-04-01
    数据库配置#Database#https://docs.djangoproject.com/en/4.1/ref/settings/#databasesDATABASES={  'default':{    'ENGINE':'django.db.backends.sqlite3',    'NAME':BASE_DIR/'db.sqlite3',  ......
  • 2023-04-01-循环队列CycleSqQueue的基本操作
    //循环链表//牺牲一个单元来区分队空还是队满#include<stdio.h>#include<stdbool.h>#defineMAXSIZE6typedefstruct{intdata[MAXSIZE];intfront,rear;}CySqQueue;voidinitCySqQueue(CySqQueue*C)//初始化循环链表{C->front=0;C->rear=0;......
  • 多媒体技术2023-04-01
    格式工厂,转换图片 Photoshop新建,类型:照片,打印,图稿和插图,web,移动设备,胶片和视频。颜色模式,背景色 打开图片:可以放大图片,然后看到每个像素点。图像菜单栏,打开图像大小,宽高是厘米。图像-->模式-->RGB            -->8bit通道每个颜色占8bit,所以......
  • 人月神话阅读笔记01
    由于该书所描述的内容比较庞杂,本人预计将分为三篇文章对于相关内容和感想进行阐述。作为开章第一篇,就先来说说为什么“人月”是“神话”。小学的时候我们都做过这样的应用题:“工厂需要加工一批零件,安排5名工人的话需要10小时完成,那么安排25名工人加工,多少小时可以完成”之类的。......