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

【数据结构】顺序队列与链式队列

顺序队列与链式队列

    • 1.队列的基本概念
    • 1.顺序存储的队列:循环队列
    • 3.链式存储的队列:链式队列

1.队列的基本概念

队列是一种逻辑结构,是一种特殊的线性表

  • 只能在固定的两端操作线性表

只要满足上述条件,那么这种特殊的线性表就会呈现一种“先进先出”的逻辑,这种逻辑就被称为队列。

由于约定了只能在线性表固定的两端进行操作,于是给队列这种特殊的线性表的插入删除,起个特殊的名称:

  • 队头:可以删除节点的一端
  • 队尾:可以插入节点的一端
  • 入队:将节点插入到队尾之后,函数名通常为enQueue()
  • 出队:将队头节点从队列中剔除,函数名通常为outQueue()
  • 取队头:取得队头元素,但不出队,函数名通常为front()

1.顺序存储的队列:循环队列

#include <stdio.h>
#include <stdlib.h>#define QUEUE_SIZE 10typedef struct sq_queue
{int data[QUEUE_SIZE];int tail;
}sq_queue_t;// 
sq_queue_t *sq_queue_init(void)
{sq_queue_t *my_sq_queue = malloc(sizeof(sq_queue_t));(my_sq_queue->tail) = -1;return my_sq_queue;
}// 入队
int en_queue(int new_data, sq_queue_t *sq_queue)
{// 判断队列是否满了if (sq_queue->tail > QUEUE_SIZE - 1){printf("队列已满!\n");return -1;}(sq_queue->tail)++;sq_queue->data[sq_queue->tail] = new_data;return 0;
}// 出队
int out_queue(sq_queue_t *sq_queue)
{int i;if (sq_queue->tail < 0){printf("队列已空!\n");return -1;}int temp = sq_queue->data[0];for (i = 0; i < sq_queue->tail; i++){ sq_queue->data[i] = sq_queue->data[i+1];}(sq_queue->tail)--;return temp;
}int main(int argc, char const *argv[])
{int i;sq_queue_t *my_sq_queue = sq_queue_init();if (!my_sq_queue){printf("[main] init fail\n");return -1;}for (i = 0; i < 12; i++){en_queue(i, my_sq_queue);}for (i = 0; i < 12; i++){printf("出队数据:%d\n", out_queue(my_sq_queue));}return 0;
}

3.链式存储的队列:链式队列

#include <stdio.h>
#include <stdlib.h>typedef struct list_queue
{int data;struct list_queue *tail;struct list_queue *next;
}list_queue_t;// 初始化链式队列, 定义结构体变量
list_queue_t *list_queue_init(void)
{list_queue_t *queue_head = malloc(sizeof(list_queue_t));queue_head->next = NULL;queue_head->tail = queue_head; // 对尾指针指向头节点,每次插入新的节点需要更新队尾指针return queue_head;
}// 入队--尾插
int in_queue(int new_data, list_queue_t *queue)
{list_queue_t *new_node = malloc(sizeof(list_queue_t));// 初始化数据域new_node->data = new_data;new_node->next = NULL;new_node->tail = NULL;// 把新的节点插入到队尾后面queue->tail->next = new_node; // 更新队尾---指向新的节点queue->tail = new_node;return 0;
}// 出队--把头节点的下一个节点删除,返回该节点的数据
int out_queue(list_queue_t *queue)
{// 判断队列是否为空if (!queue->next){printf("队列已空!\n");return -1;}// 定义指针p指向待删除的节点--也就是头节点的下一个节点list_queue_t *p = queue->next;// 备份待删除节点的数据int temp = p->data;// 将头节点的next指针指向待删除节点的下一个节点--删除队首queue->next = p->next;p->next = NULL;free(p);return temp;
}#define IN_QUEUE_NUM 5
int main(int argc, char const *argv[])
{unsigned char i;list_queue_t *head_queue = list_queue_init();for (i = 0; i < IN_QUEUE_NUM; i++){in_queue(i, head_queue);}for (i = 0; i < IN_QUEUE_NUM + 1; i++){printf("出队的数据:%d\n", out_queue(head_queue));}return 0;
}/*
执行结果:出队的数据:0出队的数据:1出队的数据:2出队的数据:3出队的数据:4队列已空!出队的数据:-1*/

相关文章:

【数据结构】顺序队列与链式队列

顺序队列与链式队列 1.队列的基本概念1.顺序存储的队列&#xff1a;循环队列3.链式存储的队列&#xff1a;链式队列 1.队列的基本概念 队列是一种逻辑结构&#xff0c;是一种特殊的线性表 只能在固定的两端操作线性表 只要满足上述条件&#xff0c;那么这种特殊的线性表就会…...

Cursor的详细使用指南

以下是一份关于 Cursor 的详细使用指南&#xff1a; 一、安装与设置 下载与安装&#xff1a; 首先&#xff0c;访问 Cursor 的官方网站&#xff0c;根据你的操作系统&#xff08;Windows、Mac 或 Linux&#xff09;下载相应的安装程序。运行安装程序&#xff0c;按照屏幕上的提…...

2025美赛数学建模B题思路+模型+代码+论文

2025美赛数学建模A题B题C题D题E题思路模型代码&#xff08;1.24第一时间更新&#xff0c;更新见文末名片&#xff09; 论文数学建模感想 纪念逝去的大学数学建模&#xff1a;两次校赛&#xff0c;两次国赛&#xff0c;两次美赛&#xff0c;一次电工杯。从大一下学期组队到现在…...

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…...

2024国游销量前20游戏分析:某开放世界武侠(排名11)

1、销量约20万套&#xff0c;销售额1400万人民币。 与一代的发售间隔为三年。 虽然对于网游大厂来说这个数字不够看&#xff0c;但对一个小团队来说足够维持了&#xff0c;三年的运营成本不是小数目。 2、开发商属于国内最早做3DMMO的厂商之一&#xff0c;创始人曾在国外大学…...

如何使用python技术爬取下载百度文库文档?

使用 Python 爬取百度文库文档需要通过分析网页结构和接口请求来实现。以下是一个基于搜索结果的实现方法&#xff0c;适用于爬取百度文库中的文档内容&#xff1a; 第一部分&#xff1a;获取百度文库文档 实现步骤 获取文档 ID 和基本信息 通过文档的 URL 获取文档 ID&…...

navicat无法连接虚拟机的docker中的mysql

我的数据库安装在了虚拟机的docker中&#xff0c;启动MySQL后&#xff0c;在主机上使用navicat一直连接不上。 首先确认密码是否有问题&#xff1a; docker exec -it mysql8 bash #进入mysql容器 mysql -u root -p #登录MySQL&#xff0c;我这边密码是123456 密码没问题的话…...

如何使用CRM数据分析优化销售和客户关系?

嘿&#xff0c;大家好&#xff01;你有没有想过为什么有些公司在市场上如鱼得水&#xff0c;而另一些却在苦苦挣扎&#xff1f;答案可能就藏在他们的销售策略和客户关系管理&#xff08;CRM&#xff09;系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…...

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件&#xff1a;PlaceGameDemo2.unitypackage 链接: https://pan.baid…...

使用HTML5 Canvas 实现呼吸粒子球动画效果的原理

在网页开发领域&#xff0c;动画效果能够极大地提升用户体验&#xff0c;让页面变得更加生动有趣。今天&#xff0c;我们深入剖析一个基于 HTML5 Canvas 的 3D 粒子动画 —— 呼吸粒子球。通过详细解读其代码实现&#xff0c;我们将全面了解如何运用 HTML5 的强大功能构建出如此…...

Java 中实体类与操作类分离

目录 一、为啥要把实体类和操作类分开 二、实体类长啥样&#xff0c;怎么用 三、操作类的使命与实现 四、实战演练&#xff1a;实体类与操作类协同工作 五、拓展思考&#xff1a;这种分离带来的好处与进一步优化 六、总结与展望 家人们&#xff0c;今天我想跟你们唠唠我在…...

【STM32HAL-----GPIO】

1. 什么是GPIO&#xff1f;&#xff08;了解&#xff09; 2. STM32 GPIO简介 2.1. GPIO特点 2.2. GPIO电气特性 2.3. GPIO引脚分布图 IO引脚分布特点&#xff1a;按组存在、组数视芯片而定、每组最多16个IO引脚。 3. IO端口基本结构介绍 4. GPIO八种工作模式 4.1. 输入浮空 特…...

Java Web开发高级——单元测试与集成测试

测试是软件开发的重要环节&#xff0c;确保代码质量和功能的正确性。在Spring Boot项目中&#xff0c;单元测试和集成测试是常用的两种测试类型&#xff1a; 单元测试&#xff1a;测试单个模块&#xff08;如类或方法&#xff09;是否按预期工作。集成测试&#xff1a;测试多个…...

编译chromium笔记

编译环境&#xff1a; windows10 powershell7.2.24 git 2.47.1 https://storage.googleapis.com/chrome-infra/depot_tools.zip 配置git git config --global user.name "John Doe" git config --global user.email "jdoegmail.com" git config --global …...

Web开发 -前端部分-CSS3新特性

1 CSS概述 2 CSS3私有前缀 3 CSS3的长度单位 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...

【基础篇】什么是SQL注入,如何防止?

什么是 SQL 注入&#xff0c;如何防止&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是一种常见的网络安全漏洞&#xff0c;它发生在 Web 应用程序中&#xff0c;当恶意用户在输入数据时&#xff0c;将恶意的 SQL 代码插入到输入中&#xff0c;从而导致应用程序…...

Swift语言的数据结构

Swift语言的数据结构 Swift是一种现代化的编程语言&#xff0c;它以安全性、性能和简洁性著称。尽管Swift通常被视为面向对象的语言&#xff0c;但它也支持函数式编程的特性&#xff0c;使得开发者可以以多种方式构建应用程序。在Swift中&#xff0c;数据结构是编程的基础&…...

牛客周赛 Round 77

题目链接&#xff1a;牛客周赛 Round 77 A. 时间表 tag&#xff1a;签到 B. 数独数组 tag&#xff1a;签到 Description&#xff1a;给定n个数&#xff0c;每个数的范围为1-9&#xff0c;问能否经过排列&#xff0c;使其每个长度为9的连续子数组都包含1-9这9个数字。 Sol…...

浅谈云端编辑器,分析其亮点与不足

浅谈云端编辑器&#xff0c;分析其亮点与不足 这个云端编辑器界面可以分为左侧题目筛选栏、中间题目描述与代码编辑区域、右侧AI提示功能三部分。以下是详细的分析&#xff1a; 1. 左侧题目筛选栏 层次结构清晰&#xff1a;左侧栏展示了一个层级结构&#xff0c;题目按主题分…...

web应用引入cookie机制的用途和cookie技术主要包括的内容

web应用引入cookie机制&#xff0c;用于用户跟踪。 &#xff08;1&#xff09;HTTP响应报文中的Cookie头行&#xff1a;set-Cookie &#xff08;2&#xff09;用户浏览器在本地存储、维护和管理的Cookie文件 &#xff08;3&#xff09;HTTP请求报文中的Cookie头行&#xff1a;…...

OpenClaw技能安装失败全解析:从依赖冲突到网络问题的系统性解决方案

1. 项目概述&#xff1a;当技能“卡住”时&#xff0c;我们遇到了什么&#xff1f;最近在折腾OpenClaw这类开源AI助手平台时&#xff0c;不少朋友都踩进了同一个坑&#xff1a;从官方市场或者第三方渠道找到了心仪的技能&#xff08;Skill&#xff09;&#xff0c;点击“安装”…...

从测速到配置:一套完整的cFosSpeed网络加速保姆级教程(适用于小白)

从零开始掌握cFosSpeed&#xff1a;网络加速全流程实战指南对于经常进行在线游戏、视频会议或大文件传输的用户来说&#xff0c;网络延迟和带宽利用率低下往往是影响体验的关键痛点。cFosSpeed作为一款专业的网络流量优化工具&#xff0c;能够显著改善这些问题&#xff0c;但许…...

录音会议纪要整理不同使用场景,实用口碑选择建议

针对不同场景的录音整理需求&#xff08;短录音、中长录音、长内容深度整理&#xff09;&#xff0c;本文基于实际使用体验&#xff0c;分享不同场景下的工具选择建议与使用心得。一、场景一&#xff1a;短录音&#xff08;15-60分钟&#xff0c;发音清晰&#xff09;典型场景&…...

Vulnhub-DC-1

1.信息收集 使用工具nmap扫描主机端口 这是Drupal是使用PHP语言编写的开源内容管理框架&#xff08;CMF&#xff09;&#xff0c;它由内容管理系统&#xff08;CMS&#xff09;和PHP开发框架&#xff08;Framework&#xff09;共同构成 Web指纹扫描 发现是&#xff1a;drupal…...

FM3773 低功耗离线式恒流/恒压 PSR 控制器

概述 FM3773 是一种高性能的交流/直流用于电池充电器和适配器的电源控制器&#xff0c;内置 850V 功率三极管。该设备采用脉冲频率调制&#xff08;PFM&#xff09;的方法来建立非连续导通模式&#xff08;DCM&#xff09;反激式电源。 FM3773 提供精确的恒定电压&#xff0c;恒…...

企业内统一API网关与Taotoken聚合平台对接方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内统一API网关与Taotoken聚合平台对接方案 在推进AI应用落地的过程中&#xff0c;许多中大型企业面临一个共同挑战&#xff1a…...

抖音内容批量下载实战:从零开始构建个人视频资料库

抖音内容批量下载实战&#xff1a;从零开始构建个人视频资料库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...

ModernWMS核心功能详解:从ASN入库到Dispatch出库的完整工作流

ModernWMS核心功能详解&#xff1a;从ASN入库到Dispatch出库的完整工作流 【免费下载链接】ModernWMS The open source simple and complete warehouse management system is derived from our many years of experience in implementing erp projects. We stripped the origin…...

基于PIC32单片机实现Android USB音频转SPDIF输出的DIY方案

1. 项目概述&#xff1a;为Android设备打造一个高保真SPDIF音频接口作为一名长期折腾嵌入式音频和家庭影院的玩家&#xff0c;我经常遇到一个痛点&#xff1a;手头那些性能不错的Android手机或平板&#xff0c;其内置的3.5mm耳机孔或者USB-C口的音频输出质量&#xff0c;在连接…...

深入解析NxDumpTool:Switch游戏文件系统提取的终极指南 [特殊字符]

深入解析NxDumpTool&#xff1a;Switch游戏文件系统提取的终极指南 &#x1f3ae; 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com…...