当前位置: 首页 > news >正文

数据结构,队列,顺序表队列,链表队列

        队列是一种常见的数据结构,它具有先进先出(First-In-First-Out,FIFO)的特性,类似于排队等候的场景。以下是队列的要点:

1. 定义:队列是一种线性数据结构,由一系列元素组成,可以进行插入和删除操作。插入操作(称为入队)只能在队列的末尾进行,删除操作(称为出队)只能从队列的前端进行。

2. 特性:队列遵循先进先出的原则,最先入队的元素将最先出队。

3. 基本操作:
   - 入队(Enqueue):将元素插入到队列的末尾。
   - 出队(Dequeue):从队列的前端删除一个元素,并返回删除的元素。
   - 队列是否为空(isEmpty):判断队列是否为空,即没有任何元素。
   - 队列长度(size):返回队列中元素的个数。

4. 实现方式:
   - 数组:使用数组实现队列时,需要维护两个指针,一个指向队列的前端,另一个指向队列的末尾。出队时移动前端指针,入队时移动末尾指针。注意需要循环利用数组空间。
   - 链表:使用链表实现队列时,新元素可以直接添加到链表末尾,出队时删除链表的头节点。

5. 队列的应用:
   - 广度优先搜索算法(BFS):在图的遍历中,广度优先搜索需要使用队列来实现层次遍历。
   - 计算机任务调度:操作系统中的任务调度可以使用队列来管理任务的执行顺序。
   - 队列作为其他数据结构的辅助结构:例如,树的层次遍历、图的广度优先搜索等。

6. 常见类型:
   - 普通队列(普通队列):遵循FIFO原则,用于常规的数据排队。
   - 优先队列(Priority Queue):在出队时按照优先级进行排序,元素的出队顺序不一定按照插入顺序。

        队列在计算机科学中具有广泛的应用,从操作系统到算法设计都有着重要作用。它是解决许多问题的重要工具之一。

顺序表队列

/*===============================================
*   文件名称:queue.c
*   创 建 者:WM
*   创建日期:2023年08月21日
*   描    述:顺序队列//下标为rear里没有数据
================================================*/
#include <stdio.h>
#include<stdlib.h>
#define SIZE 8
typedef int data_t;//构造节点类型
typedef struct node{data_t data[SIZE];//保存数据的数据域data_t front;data_t rear;
} sequeue;
sequeue *createEmptySequeue()
{sequeue *p = (sequeue *)malloc(sizeof(sequeue));if(NULL == p){perror("createEmptySequeue malloc failed");return NULL;}//只要你申请空间就是为了让他装上数据p->rear = 0;//使用的时候是数组的下标p->front = 0;//使用的时候是数组的下标return p;
}
int insert(sequeue* sq,data_t h)
{sq->data[sq->rear]=h;sq->rear=(sq->rear+1)%SIZE;//注意
}
int out_queue(sequeue *sq)
{ data_t val=sq->data[sq->front];sq->front=(sq->front+1)%SIZE;printf("%d \n",val);return val;
}
int isQueue_empty(sequeue *sq)
{if(sq==NULL) -1;return sq->front==sq->rear;
}
//注意
int isQueue_full(sequeue *sq)
{//return (sq->rear-sq->front+SIZE)%SIZE==SIZE-1;//这个算法很重要return (sq->rear+1) % SIZE == sq->front;//或者这个。
}
//注意
int isQueue_full2(sequeue*sq)
{if(sq->front>sq->rear)return  sq->front-sq->rear==1;if(sq->front<sq->rear)return sq->rear-sq->front==SIZE-1;
}int queue_num(sequeue* sq)//谁大谁在前面。
{return (sq->front<=sq->rear)?(sq->rear-sq->front):(sq->rear-sq->front+SIZE);
}void clear_queue(sequeue *sq)
{while (!isQueue_empty(sq))out_queue(sq);
}int main(int argc, char *argv[])
{ sequeue*phead=createEmptySequeue();for (int i = 0; i < SIZE-1; i++){insert(phead,i+1);}out_queue(phead);printf("%d \n",queue_num(phead));return 0;
} 

链表队列

/*===============================================
*   文件名称:queue.c
*   创 建 者:WM
*   创建日期:2023年08月21日
*   描    述:链表队列
================================================*/
#include <stdio.h>
#include<stdlib.h>
typedef int data_t;//构造链表节点类型
typedef struct node{data_t data;//保存数据的数据域struct node*next;//保存下一个节点的地址
} linklist ;
typedef struct {linklist *front;linklist* rear;
} lqueue;lqueue* creat_lqueue()
{lqueue*lq=(lqueue*)malloc(sizeof(lqueue));lq->front=(linklist*)malloc(sizeof(linklist));lq->front->next=NULL;lq->rear=lq->front;return lq;
}
int insert(lqueue* lq,data_t h)
{linklist *new=(linklist *)malloc(sizeof(linklist));if(NULL==new) return -1;new->data=h;new->next=NULL;lq->rear->next=new;lq->rear=new;
}
int out_queue(lqueue*lq)
{linklist* m=lq->front->next;lq->front->next=m->next;int val=m->data;free(m);m=NULL;printf("%d \n",val);return val;
}
int isQueue_empty(lqueue*lq)
{return lq->front==lq->rear;
}
int queue_num(lqueue*lq)
{int len=0;linklist* h = lq->front;while (h->next!=NULL){h=h->next;len++;}return len;
}
void clear_queue(lqueue*lq)
{while (!isQueue_empty(lq))out_queue(lq);
}
int main(int argc, char *argv[])
{ lqueue*lqhead=creat_lqueue();insert(lqhead,9);insert(lqhead,110);printf("%d \n",queue_num(lqhead));out_queue(lqhead);out_queue(lqhead);printf("%d \n",queue_num(lqhead));clear_queue(lqhead);printf("%d \n",queue_num(lqhead));return 0;
} 

相关文章:

数据结构,队列,顺序表队列,链表队列

队列是一种常见的数据结构&#xff0c;它具有先进先出&#xff08;First-In-First-Out&#xff0c;FIFO&#xff09;的特性&#xff0c;类似于排队等候的场景。以下是队列的要点&#xff1a; 1. 定义&#xff1a;队列是一种线性数据结构&#xff0c;由一系列元素组成&#xff…...

Webgl利用缓冲区绘制三角形

什么是attribute 变量 它是一种存储限定符&#xff0c;表示定义一个attribute的全局变量&#xff0c;这种变量的数据将由外部向顶点着色器内传输&#xff0c;并保存顶点相关的数据&#xff0c;只有顶点着色器才能使用它 <!DOCTYPE html> <html lang"en"&g…...

正则表达式应用

正则表达式应用 正则匹配以{开头&#xff0c;以}结尾 \{.*?\}正则匹配以[开头&#xff0c;以]结尾 \[.*?\]校验数字的表达式 数字&#xff1a;^[0-9]*$n位的数字&#xff1a;^\d{n}$至少n位的数字&#xff1a;^\d{n,}$m-n位的数字&#xff1a;^\d{m,n}$零和非零开头的数字…...

9.4 【C语言】用指针处理链表

9.4.1 什么是链表 它是动态地进行存储分配的一种结构。 链表中各元素在内存中的地址是不连续的。要找某一元素&#xff0c;必须先找到上一个元素&#xff0c;根据它提供的下一元素地址才能找到下一个元素。 如果不提供“头指针”&#xff0c;则整个链表无法访问。 9.4.2 建…...

后端面试话术集锦第四篇:rabbitmq面试话术

🚗后端面试集锦目录 💖后端面试话术集锦第一篇:spring面试话术💖 💖后端面试话术集锦第二篇:spring boot面试话术💖 💖后端面试话术集锦第三篇:spring cloud面试话术💖 💖后端面试话术集锦第四篇:ElasticSearch面试话术💖 💖后端面试话术集锦第五篇:r…...

Linux目录结构与文件管理(01) (三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Linux 系统的组成 二、目录结构 根目录 三、文件管理 目录管理 总结 前言 今天主要学习了Linux的目录结构&#xff0c;主要是一些命令的含义和用法&am…...

OpenCV为老照片,黑白照片增加色彩

Colorful Image Colorization 图片的颜色上色&#xff0c;主要使用到了CNN卷积神经网络&#xff0c;作者在ImageNet数据集上进行了大量的训练&#xff0c;并将此问题使用在分类任务中&#xff0c;以解决问题的潜在的不确定性&#xff0c;并在训练时使用颜色重新平衡的损失函数方…...

HTML之VSCode简单配置与创建

目录 插件下载 然后输入源码&#xff1a; 使用 效果 插件下载 下载这个插件后可以直接运行&#xff1a; 然后创建一个文件&#xff1a; 然后输入源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…...

2023亿发一体化新零售POS收银解决方案,打造连锁门店经营新未来

在零售业不断演变的今天&#xff0c;门店形态繁多&#xff0c;收银环节的共通性与差异性并存。传统的通用解决方案已不适应多样化的业态需求&#xff0c;而在线上线下一体化的时代背景下&#xff0c;全渠道经营能力也成为商家的迫切需求。 一体化新零售POS收银系统&#xff0c…...

Android ---使用Jenkins 打包release版本不能安装或者安装后不显示APP

大家在用 Jenkins的时候&#xff0c;是不是会觉得很爽&#xff0c;因为他在用的过程中&#xff0c;是无脑的&#xff0c;毕竟一键触发&#xff01;&#xff01;&#xff01;&#xff01; 这边记录一个昨天&#xff0c;今天遇到的一个坑货问题&#xff0c;别人提交了所有代码&am…...

【Spring】什么是 AOP(面向切面编程) ? 为什么要有 AOP ? 如何实现 Spring AOP ?

文章目录 前言一、什么是 AOP ?二、为什么要使用 AOP ?三、 AOP 的组成四、Spring AOP 的实现1, 添加依赖2, 定义切面3, 定义切点4, 定义通知5, 创建连接点 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法…...

11.并发:自旋锁

原子操作和自旋锁的区别 相同点都是保护共享资源。 不同点在于&#xff1a; 原子操作简单易用&#xff0c;但只能做计数操作&#xff0c;保护的东西太少。 自旋锁主要用于多核处理器。短时期的轻量级加锁&#xff0c;加锁失败时原地打转、忙等待。避免了上下文调度和系统开销较…...

使用EF Core更新与修改生产数据库

使用EF Core的Code First&#xff0c;在设计阶段&#xff0c;直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除、更新最新的数据结构。由于没有什么数据&#xff0c;删除的风险非常低。但是对于已经投入生产的数据库&#xff0c;这个方法就绝对不可行了。 考虑…...

法律小程序开发:让法律咨询更便捷

在现代社会&#xff0c;法律咨询服务越来越受到人们的重视和需求。为了方便用户预约法律咨询&#xff0c;很多律所都开始使用小程序来提供在线预约服务。那么&#xff0c;如何制作一款律所预约小程序呢&#xff1f; 首先&#xff0c;我们可以选择乔拓云网作为制作小程序的平台。…...

【C++多线程】C++11互斥锁和条件变量实现生产者消费者模型

先看几个问题&#xff0c;第三个问题可以先看代码然后再理解 Q1&#xff1a;临界区在哪 A1: 队列中元素在「生产者生产&#xff08;push&#xff09;」和「消费者消费&#xff08;pop&#xff09;」时就是临界区 Q2&#xff1a;同步操作在哪 A2: 很显然&#xff0c;队列只有…...

Webpack迁移Vite采坑指南

前言 本文不介绍什么是webpack、什么是vite&#xff0c;也不分析为什么要迁移。如果你想从webpack迁移到vite&#xff0c;你可能会遇到一些坑&#xff0c;这里我会尽量详细地介绍每一种可能遇到的坑以及解决办法。 老规矩&#xff0c;先说AI的评价&#xff1a;这篇从webpack迁…...

设计模式-职责链模式

文章目录 职责链模式模式概述主要角色适用场景实现步骤优点注意事项 定义职责链结构示例总结 职责链模式 职责链模式是一种行为设计模式&#xff0c;它可以将请求的发送者和请求的处理者解耦&#xff0c;并按照预定义的顺序处理请求。职责链模式常用于需要逐级审批或转交处理的…...

CMake学习笔记-VSCode使用Cmake编译C++工程

环境 Win MinGW CMake Git 单文件工程 # 1 指定最小版本号 cmake_minimum_required(VERSION 3.10) # 2 指定工程名 project(Tutorial) # 3 设置编译器路径 set(CMAKE_C_COMPILER "D:/ProgramPackage/mingw64/mingw64/bin/gcc.exe") set(CMAKE_CXX_COMPILER &q…...

redis相关

如果redis没有设置expire&#xff0c;他是否默认永不过期&#xff1f; 清理线上Redis没有设置过期时间的key_青苔小榭的博客-CSDN博客 如何给Redis中未设置过期时间key添加过期时间&#xff1f; - 知乎 Redis中的几种更新策略_如何实现redis数据的局部更新_LG_985938339的博客…...

【VRTK4.0运动专题】轴移动AxisMove(真实身体的移动)

文章目录 1、概览2、释义3、属性设置 1、概览 2、释义 “竖直轴”控制的行为“水平轴”控制的行为1Vertical-Slide 滑动Horizontal-Slide 滑动2Vertical-Slide 滑动Horizontal-SmoothRotate 转动3Vertical-Slide 滑动Horizontal-SnapRotate 转动&#xff08;不连续&#xff09…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...