C数据结构:队列

简介

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
FIFO(First In First Out) 的特点。

入队列:进行插入操作的一端称为队尾 。

出队列:进行删除操作的一端称为队头。

入队出队形式:一种入队顺序,只有一种出队顺序。

队列的应用:比如生活中排队买东西,先排队的先购买,平时我们用微信聊天,用键盘进行各种数字的输入,到聊天框中输出,也是队列的应用。

顺序存储队列

循环的队列:

        1.头元素指向的数据永远不能有有效数据
        2.头元素和尾元素一样,则为空
        3.(尾元素+1)%数组长度 == 头元素  则,队列已满

main.c

#include <stdlib.h>
#include <stdio.h>
#include "queue.h"int main()
{queue* qu;qu = qu_create();if(qu == NULL)return -1;datatype arr[] = {1,2,3,4,5};for(int i=0;i<5;i++){qu_enqueue(qu,&arr[i]);}datatype tmp;qu_travel(qu);qu_dequeue(qu,&tmp);qu_dequeue(qu,&tmp);qu_travel(qu);qu_destroy(qu);return 0;
}

quque.h

#ifndef QUEUE_H
#define QUEUE_H#define MAXSIZE 5
typedef  int datatype;typedef struct node_st
{datatype data[MAXSIZE];int head,tail;
}queue;queue* qu_create();int qu_isempty(queue*qu);int qu_enqueue(queue*qu,datatype*data);int qu_dequeue(queue*qu,datatype*data);void qu_travel(queue*qu);void qu_clear(queue*qu);void qu_destroy(queue*qu);#endif

queue.c

#include <stdlib.h>
#include <stdio.h>
#include "queue.h"queue* qu_create()
{queue*qu;qu = malloc(sizeof(*qu));if(qu == NULL)return NULL;qu->head = 0;qu->tail = 0;return qu;}int qu_isempty(queue*qu)
{if(qu->tail == qu->head)return 0;return 1;
}
int qu_enqueue(queue*sq,datatype*x)
{if((sq->tail+1)%MAXSIZE == sq->head) // 队列满return -1;sq->tail = (sq->tail +1)%MAXSIZE; //取模构成一个循环sq->data[sq->tail] = *x;}
int qu_dequeue(queue*qu,datatype*data)
{if(qu_isempty(qu) ==0)return -1;qu->head = (qu->head+1)%MAXSIZE;qu->data[qu->head] = *data;return 0;
}
void qu_travel(queue*qu)
{if(qu->head == qu->tail) //队列为空return;int i;i = (qu->head +1)%MAXSIZE;while(i != qu->tail ){printf("%d ",qu->data[i]);i = (i+1)%MAXSIZE;}printf("%d \n",qu->data[i]); //输出最后一个函数
}void qu_clear(queue*qu)
{qu->head = qu->tail;}
void qu_destroy(queue*qu)
{free(qu);
}

链式存储队列

顺序存储长度固定不利于使用,链式存储利于使用。(还是对链表lib2的封装,大家可以看看之前的文章:C数据结构:链表高级篇

main.c

#include <stdlib.h>
#include <stdio.h>
#include "llist.h"
#include "queue.h"struct score_st
{int id;char name[32];int math;int chinese;
};void print_s(const void *record)
{const struct score_st*r = record;printf("%d %s %d %d \n",r->id,r->name,r->math ,r->chinese);}int main()
{QUEUE*qu;struct score_st temp;qu = queue_create(sizeof(struct score_st ));for(int i=0;i<5;i++){temp.id = i;snprintf(temp.name,32,"std_%d",i);temp.math = rand()%100;temp.chinese = rand()%100;queue_en(qu,&temp);}while(1){int ret;ret =  queue_de(qu,&temp);if(ret == -1)break;print_s(&temp);}queue_destroy(qu);return 0;
}

queue.c

#include "queue.h"QUEUE* queue_create(int size)
{return llist_create(size);
}int queue_en(QUEUE*ptr,const void *data)
{return llist_insert(ptr,data,LLIST_BACKWARD);
}static int alway_match(const void*p1,const void*p2)
{return 0;
}int queue_de(QUEUE*ptr,void*data)
{return llist_fetch(ptr,(void*)0,alway_match,data); //第二参数填什么都可以
}
void queue_destroy(QUEUE*ptr)
{llist_destroy(ptr);
}

queue.h

#ifndef QUQUE_H
#define QUQUE_H
#include "llist.h"typedef LLIST QUEUE;QUEUE* queue_create(int size);int queue_en(QUEUE*ptr,const void *data);int queue_de(QUEUE*ptr,void*data);void queue_destroy(QUEUE*ptr);#endif 

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

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

相关文章

OpenCV4.8 VS2019 MFC编程出现的诡异现象

OpenCV4.8及OpenCV4.4 VS2019MFC编程在调用imred&#xff08;&#xff09;函数时&#xff0c;debug X64试运行没问题。 release X64试运行时出现下面错误。 void CEasyPictureDlg::OnBnClickedOpen() {CFileDialog fdlg(TRUE, NULL, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMP…

私人健身教练预约管理小程序开发源码现成案例(小程序+APP+H5 源码部署)

一、私人健身教练预约管理系统-环境介绍 1.1 私人健身教练预约管理系统-运行环境 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 系统架构&#xff1a;TP 后端&#xff1a;SpringBoot 前端&#xff1a;Vue 2. 私人健身教练预约管理系统-系统介绍。 2.1私人健身教练预约管…

EasyExcel导出带自定义下拉框数据的Excel模板

文章目录 前言&#x1f4dd;一、导入依赖二、创建导出工具1.创建模板实体类2.创建自定义注解3.添加动态选择接口4.EasyExcelUtil工具类 三、导出、导入Excel接口1.导出接口2.导入接口3.导出结果 总结 前言&#x1f4dd; 在项目中导入excel时需要通过下拉框选择值传入&#xff…

【websocket-客户端可视化工具】

postman 新版postman (版本v11以上) &#xff0c;除了http协议&#xff0c;还支持了Websocket&#xff0c;MQTT&#xff0c;gRPC等多种连接协议&#xff0c;可以作为多种协议的客户端&#xff0c;使用起来非常方便。 使用 服务端代码 这里以websocket协议举例&#xff0c;代…

基于51单片机的八路抢答器—加随机抽选功能

基于51单片机的八路抢答器 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.主持人按键控制开始抢答&#xff1b; 2.开始抢答按下&#xff0c;数码管20秒倒计时&#xff1b; 3.8个按键代表八位选手&#xff0c;谁…

map容器

目录 map构造和赋值 map大小和交换 map插入和删除 map查找和统计 map排序 map构造和赋值 map中所有元素都是pair&#xff08;即一对&#xff09; pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;…

视频降噪算法 hqdn3d 原理分析

视频降噪 视频降噪是一种处理技术&#xff0c;旨在减少视频中的噪声&#xff0c;提高画面质量。噪声可能来自多种源头&#xff0c;包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…

今天又发现一个有意思的问题:SQL Server安装过程中下载报错,证明GPT是可以解决问题的

我们在安装数据库的时候&#xff0c;都会有报错问题&#xff0c;无论是Oracle、SQL Server、还是MySQL&#xff0c;都会遇到各种各样的报错&#xff0c;这归根到底还是因为电脑环境的不同&#xff0c;和用户安装的时候&#xff0c;操作习惯的不一样导致的问题。今天的问题是&am…

Spring事务失效的场景

1. 事务方法执行期间出现了异常&#xff0c;但是并未指定rollbackFor: Spring默认只会在遇到error和RunTimeException时才会回滚。 public boolean rollbackon ( Throwable ex){return (ex instanceof RuntimeException || ex instanceof Error); } 2. 事务方法执行期间出现了…

opencv4.8 系列一图像操作运算

使用 Scalar 函数进行加减乘除 dst image Scalar(50, 50, 50);imshow("加法运算",dst);dst image - Scalar(50, 50, 50);imshow("加法运算",dst);dst image / Scalar(2, 2, 2);imshow("除法法运算", dst);Mat m Mat::zeros(image.size(),i…

如何在Linux环境下运行Excel的VBA宏文件

在Linux下调用EXCEL&#xff08;XLSM&#xff09;文件&#xff0c;并执行里面的VBA宏&#xff0c;这个看似是个伪需求&#xff1b;但做过办公自动化的都知道&#xff0c;在10几20年前&#xff0c;VBA宏是办公自动化里面最简单&#xff0c;并最不可或缺的一环&#xff0c;甚至现…

SwiftUI 5.0(iOS 17.0,macOS 14.0+)新 Inspector 辅助视图之趣味漫谈

概览 在 SwiftUI 开发中,苹果为我们提供了多种辅助视图用来显示额外信息从而极大丰富了应用的表现力,比如:Alert、Sheet、ContextMenu 等等。 从 SwiftUI 5.0(iOS 17+)开始, 又增加了一种全新的辅助视图:Inspector。 在本篇博文中,您将学到如下内容: 概览1. Inspe…

哈迪斯2发售时间 哈迪斯游戏攻略 苹果电脑怎么玩《哈迪斯2》

这两年肉鸽游戏大爆发&#xff0c;只要不是美女抽卡养成那基本上就是肉鸽了&#xff0c;但是真正让玩家口服心服的肉鸽游戏不多&#xff0c;《哈迪斯》绝对算是其中一款。 近日让玩家期待已久的肉鸽大作&#xff0c;晶体管工作室制作的《哈迪斯》正统续作《哈迪斯2》终于开卖了…

网络编程基础回顾

计算机网络&#xff08;5&#xff09;&#xff1a;运输层 OSI 模型与 TCP/IP 协议 OSI七层协议模型 (open system interconnection) 应用层&#xff1a;为应用数据提供服务表示层&#xff1a;数据格式转化&#xff0c;数据加密会话层&#xff1a;建立、维护和管理会话传输层&…

微信小程序中的图像魔术:高效利用Canvas实现图片压缩技巧全解析

微信小程序中的图像魔术&#xff1a;高效利用Canvas实现图片压缩技巧全解析 Canvas基础与图片压缩原理Canvas介绍图片压缩原理 微信小程序实战&#xff1a;Canvas压缩图片步骤1&#xff1a;准备Canvas环境步骤2&#xff1a;加载图片步骤3&#xff1a;压缩逻辑实现 安全性能与安…

element-ui 中修改loading加载样式

element-ui 中的 loading 加载功能&#xff0c;默认是全屏加载效果 设置局部&#xff0c;需要自定义样式或者修改样式&#xff0c;方法如下&#xff1a; import { Loading } from element-uiVue.prototype.$baseLoading (text) > {let loadingloading Loading.service({…

2-6 任务 猜数小游戏(单次版)

本任务要求编写一个猜数小游戏&#xff08;单次版&#xff09;&#xff0c;游戏规则是计算机产生一个0到100之间的随机整数&#xff0c;用户通过输入猜测的数字进行猜测&#xff0c;根据猜测情况给出提示&#xff0c;直到猜对为止。编程思路是利用while循环和多分支结构实现永真…

JS 请编写一个Child继承Parent的方法

JS 有哪些继承方式 JavaScript 中常见的继承方式有以下几种&#xff1a; 原型链继承 构造函数继承 组合继承&#xff08;原型链加构造函数&#xff09; 原型式继承 寄生式继承 ES6 的 class 的 extends 关键字&#xff08;用于现代类继承&#xff09; 1、原型链继承 fu…

美特CRM upload.jsp 文件上传致RCE漏洞复现(CNVD-2023-06971)

0x01 产品简介 MetaCRM是一款智能平台化CRM软件,通过提升企业管理和协同办公,全面提高企业管理水平和运营效率,帮助企业实现卓越管理。美特软件开创性地在CRM领域中引入用户级产品平台MetaCRM V5/V6,多年来一直在持续地为客户创造价值,大幅提升了用户需求满足度与使用的满意…

静态分配IP,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…