C语言实现链式队列

在C语言中,链式队列是一种使用链表实现的队列,它具有以下特点:

  1. 链式队列不需要预先分配固定大小的存储空间,可以动态地分配内存以适应不同大小的队列。
  2. 链式队列可以无限扩展,因此不会出现队列满的情况。
  3. 链式队列的入队和出队操作对于链表而言比较灵活,不需要移动大量元素

以下是对链式队列的实现和简单使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//节点结构体
struct Linknode
{struct Linknode* next;
};
struct LQueue
{struct Linknode pHeader;int m_size;struct Linknode* pTail;//尾节点指针
};
typedef void* linkqueue;
//初始化
linkqueue init_linkqueue()
{struct LQueue* myqueue = (struct LQueue*)malloc(sizeof(struct LQueue));if (myqueue == NULL){return NULL;}myqueue->pHeader.next = NULL;myqueue->m_size = 0;myqueue->pTail = &myqueue->pHeader;return myqueue;
}
//入队,尾插
void push_linkqueuq(linkqueue queue,void*data)
{if (queue == NULL){return ;}if (data == NULL){return;}struct LQueue* myqueue = (struct LQueue* )queue;struct Linknode* mynode = (struct Linknode* )data;//更改过指针指向myqueue->pTail->next = mynode;mynode->next = NULL;myqueue->pTail = mynode;myqueue->m_size++;
}
//出队,头删
void pop_linkqueue(linkqueue queue)
{if (queue == NULL){return;}struct LQueue* myqueue = (struct LQueue*)queue;if (myqueue->m_size == 0){return;}if (myqueue->m_size == 1){myqueue->pHeader.next = NULL;myqueue->pTail = &myqueue->pHeader;myqueue->m_size--;return;}struct Linknode* pFirst = myqueue->pHeader.next;myqueue->pHeader.next = pFirst->next;myqueue->m_size--;
}
//返回队头
void* front_linkqueue(linkqueue queue)
{if (queue == NULL){return NULL;}struct LQueue* myqueue = (struct LQueue*)queue;if (myqueue->m_size == 0){return NULL;}return myqueue->pHeader.next;
}
//队尾
void* back_linkqueue(linkqueue queue)
{if (queue == NULL){return NULL;}struct LQueue* myqueue = (struct LQueue*)queue;if (myqueue->m_size == 0){return NULL;}return myqueue->pTail;
}
//大小
int size_linkqueue(linkqueue queue)
{if (queue == NULL){return -1;}struct LQueue* myqueue = (struct LQueue*)queue;return myqueue->m_size;
}
//判断是否为空
int isEmpty(linkqueue queue)
{if (queue == NULL){return -1;}struct LQueue* myqueue = (struct LQueue*)queue;if (myqueue->m_size == 0){return 1;}return 0;
}
//销毁
void destroy_linkqueue(linkqueue queue)
{if (queue == NULL){return;}free(queue);  // 释放内存queue = NULL; // 将指针置为 NULL
}
struct person
{int* a;char name[64];int age;
};void test01()
{linkqueue myqueue = init_linkqueue();struct person p6 = { NULL, "aaa",18 };struct person p7 = { NULL, "bbb",123 };struct person p8 = { NULL ,"ccc",24 };struct person p9 = { NULL,"ddd",25 };push_linkqueuq(myqueue, &p6);push_linkqueuq(myqueue, &p7);push_linkqueuq(myqueue, &p8);push_linkqueuq(myqueue, &p9);printf("大小:%d\n", size_linkqueue(myqueue));while (!isEmpty(myqueue)){struct person* p1 = (struct person* )front_linkqueue(myqueue);printf("队头名字:%s,年龄:%d\n", p1->name, p1->age);struct person* p2 = (struct person*)back_linkqueue(myqueue);printf("队尾名字:%s,年龄:%d\n", p2->name, p2->age);printf("-------\n");pop_linkqueue(myqueue);}printf("大小:%d\n", size_linkqueue(myqueue));destroy_linkqueue(myqueue);
}
int main()
{test01();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产670亿参数的DeepSeek:超越Llama2,全面开源

模型概述 DeepSeek&#xff0c;一款国产大型语言模型&#xff08;LLM&#xff09;&#xff0c;凭借其670亿参数的规模&#xff0c;正引领着人工智能领域的新浪潮。这款模型不仅在多项中英文公开评测榜单上超越了700亿参数的Llama 2&#xff0c;而且在推理、数学和编程能力方面…

JDK各个版本特性讲解-JDK16特性

JDK各个版本特性讲解-JDK16特性 一、JAVA16概述二、语法层面变化1.JEP 397&#xff1a;密封类&#xff08;第二次预览&#xff09;2.JEP 394&#xff1a;instanceof 的模式匹配3.JEP 395&#xff1a;记录4_JEP 390&#xff1a;基于值的类的警告 三、API层面变化1.JEP 338&#…

(备战2024)三天吃透Java面试八股文,面试通过率高达90%

什么样的求职者能够获得面试官的青睐&#xff1f;求职者需要准备哪些内容来面对形形色色的面试官&#xff1f;这两份资料是我在几十场面试中被面试官问到的问题&#xff0c;比其他复制粘贴的面试题强一百倍&#xff0c;堪称全网最强&#xff08;我不太喜欢“全网最强”这样的字…

车辆违规开启远光灯检测系统:融合YOLO-MS改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着社会的不断发展和交通工具的普及&#xff0c;车辆违规行为成为了一个严重的问题。其中&#xff0c;车辆违规开启远光灯是一种常见的违规行为&#xff0c;给其…

贝蒂快扫雷~(C语言)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​&#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;贝蒂的游戏 贝蒂的主页&#xff1a;Betty‘s blog 引言&#xff1a; 扫雷相信大家小时候到玩过吧&#xff0c;那…

数据库故障Waiting for table metadata lock

场景&#xff1a;早上来发现一个程序&#xff0c;链接mysql数据库有点问题&#xff0c;随后排查&#xff0c;因为容器在k8s里面。所以尝试重启了pod没有效果 一、重启pod: 这里是几种在Kubernetes中重启Pod的方法: 删除Pod,利用Deployment重建 kubectl delete pod mypodDepl…

python爬虫进阶篇:利用Scrapy爬取同花顺个股行情并发送邮件通知

一、前言 上篇笔记我记录了scrapy的环境搭建和项目创建和第一次demo测试。本篇我们来结合现实场景利用scrapy给我们带来便利。 有炒股或者其它理财产品的朋友经常会关心每日的个股走势&#xff0c;如果结合爬虫进行实时通知自己&#xff0c;并根据自己预想的行情进行邮件通知&…

字符设备的注册与注销实现

一. 简介 前面文章学习了 编写字符设备驱动框架&#xff0c;并加载驱动模块。了解了 一组注册与注销设备的函数。 了解了字符设备号的组成以及如何分配。文章地址如下&#xff1a; 字符设备驱动框架的编写-CSDN博客 字符设备驱动模块的编译-CSDN博客 字符设备注册函数与注…

跟着我学Python进阶篇:01.试用Python完成一些简单问题

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

Nodejs 第三十章(防盗链)

防盗链&#xff08;Hotlinking&#xff09;是指在网页或其他网络资源中&#xff0c;通过直接链接到其他网站上的图片、视频或其他媒体文件&#xff0c;从而显示在自己的网页上。这种行为通常会给被链接的网站带来额外的带宽消耗和资源浪费&#xff0c;而且可能侵犯了原始网站的…

听一些大神说测试前途是IT里最差的,真的是这样吗?

一&#xff1a;行业经历 测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为高级测试&#xff0c;工资也翻了几倍&#xff1b;个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力&#xff1b;我刚出来的时候是在鹅厂做外包的功能测试&#xff0c;天天…

c++ = default 和 = delete

default 和 delete 在C中&#xff0c;声明自定义的类型之后&#xff0c;编译器会默认生成一些成员函数&#xff0c;这些函数被称为默认函数。其中包括&#xff1a; &#xff08;1&#xff09;&#xff08;默认&#xff09;构造函数 &#xff08;2&#xff09;拷贝&#xff08…

ROS通信频率变慢、低于设定值的解决方法

1 问题 ROS gazebo以100Hz的频率发消息&#xff0c;触发A节点的回调函数&#xff0c;进而回调函数发送新消息到B节点。理论上新消息的频率也应该是100Hz。但是用rqt_topic查看发现&#xff0c;频率只有30多Hz。 2 解决 在初始化Subscriber的时候加上ros::TransportHints().…

【halcon深度学习之那些封装好的库函数】determine_dl_model_detection_param

determine_dl_model_detection_param 目标检测的数据准备过程中的有一个库函数determine_dl_model_detection_param “determine_dl_model_detection_param” 直译为 “确定深度学习模型检测参数”。 这个过程会自动针对给定数据集估算模型的某些高级参数&#xff0c;强烈建议…

C++命名空间(超详细)using namespace std

文章目录 前言一、为什么要有命名空间二、命名空间的定义1.正常定义2.嵌套定义3.多文件 三、命名空间的使用1.命名空间名称作用域限定符2.使用using将命名空间某个成员引入3.使用using namespace将整个命名空间引入 四、c标准库总结 前言 在本文章中&#xff0c;我们将要详细介…

Linux服务器nginx部署Vue前端(详细版)

提示&#xff1a;适用于前后端项目的部署 文章目录 前言一、打包前端文件二、下载和部署Nginx三、配置conf文件启动nginx 前言 搜索到这篇文章想必你已经对Nginx比较了解&#xff0c;我也不对Nginx进行介绍赘述了&#xff0c;只需要明白Nginx本身也是一个静态资源的服务器&…

【Qt开发流程】之文件目录、文件、输入和输出

概述 应用程序操作过程中&#xff0c;经常要对设备或文件进行读或者写操作。也会经常对文件及目录进行操作。 在Qt中&#xff0c;QIODevice类是Qt中所有进行I/O操作的设备的基类&#xff0c;比如QFile、 QIODevice为支持数据块读写的设备&#xff08;如QFile、QBuffer和QTcpSo…

安全运营之安全检查和测试

安全运营是一个将技术、流程和人有机结合的复杂系统工程&#xff0c;通过对已有安全产品、工具和服务产出的数据进行有效的分析&#xff0c;持续输出价值&#xff0c;解决安全问题&#xff0c;以确保网络安全为最终目标。 安全检查和测试是确保系统、设备或环境安全的重要手段…

23种设计模式【创建型模式】详细介绍之【原型模式】

23种设计模式【创建型模式】详细介绍之【原型模式】 设计模式的分类和应用场景总结原型模式设计模式系列&#xff1a;深入理解原型模式&#xff08;Prototype Pattern&#xff09;什么是原型模式&#xff1f;为什么使用原型模式&#xff1f;原型模式的实现方式原型模式的代码示…