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

数据结构day5——队列和树

目录

一、队列:先进先出的数据缓冲区

队列的核心概念

队列的典型应用场景

队列的基本操作

队列的两种 C 语言实现方式

1. 顺序队列(基于数组的实现)

2. 循环队列(解决假溢出问题)

二、树:一对多的层次结构

树的基本概念

树的存储方式

二叉树:最常用的树结构

二叉树的定义

二叉树的特点

特殊的二叉树

二叉树的重要特性

二叉树的 C 语言实现与遍历

三、总结


在数据结构的世界里,队列和树是两种截然不同却又同样重要的结构。队列以其 "先进先出" 的特性成为处理有序数据的利器,而树则凭借 "一对多" 的层次关系,成为解决复杂问题的强大工具。本文将带你深入了解这两种结构的原理、特性,并通过 C 语言实现它们的核心功能。

一、队列:先进先出的数据缓冲区

队列(Queue)是一种限定仅在一端进行插入操作,另一端进行删除操作的线性表,这种特性使其成为处理有序数据的理想选择。

队列的核心概念

  • 队尾(Rear):允许插入元素的一端
  • 队头(Front):允许删除元素的一端
  • 核心特性:先进先出(First In First Out,简称 FIFO)—— 最早进入队列的元素将最早被取出

队列的典型应用场景

队列最核心的应用是作为缓冲区,协调处理速度不同的设备或模块:

  • CPU(高速设备)与硬盘、键盘、鼠标(低速设备)之间的数据交互
  • 网络数据传输中的数据包排队处理
  • 打印任务队列管理
  • 广度优先搜索(BFS)算法的实现基础

队列的基本操作

操作名称功能描述时间复杂度
initQueue初始化队列O(1)
enQueue向队尾插入元素(入队)O(1)
deQueue从队头删除元素(出队)O(1)
getFront获取队头元素(不删除)O(1)
isEmpty判断队列是否为空O(1)
isFull判断队列是否已满O(1)
size获取队列中元素个数O(1)

队列的两种 C 语言实现方式

1. 顺序队列(基于数组的实现)

顺序队列使用数组作为底层存储,但存在 "假溢出" 问题(队尾已满但队头有空闲空间)。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>#define MAX_QUEUE_SIZE 100typedef struct {int data[MAX_QUEUE_SIZE];int front;  // 队头指针(指向队头元素)int rear;   // 队尾指针(指向队尾元素的下一个位置)
} SeqQueue;// 初始化队列
void initQueue(SeqQueue *queue) {queue->front = 0;queue->rear = 0;
}// 判断队列是否为空
bool isEmpty(SeqQueue *queue) {return queue->front == queue->rear;
}// 判断队列是否已满
bool isFull(SeqQueue *queue) {return queue->rear == MAX_QUEUE_SIZE;
}// 入队操作
bool enQueue(SeqQueue *queue, int value) {if (isFull(queue)) {printf("队列已满,无法入队!\n");return false;}queue-
http://www.lqws.cn/news/593425.html

相关文章:

  • 县级智慧水务一体化方案及落地案例PPT(39页)
  • 8.Docker镜像讲解
  • 高强螺栓的计算与选用
  • 深入金融与多模态场景实战:金融文档分块技术与案例汇总
  • Qt时间显示按钮功能详解
  • 【docker】unknown shorthand flag: ‘f‘ in -f See ‘docker --help‘.
  • 实变与泛函题解-心得笔记【16】
  • Electron 应用中的内容安全策略 (CSP) 全面指南
  • MySQL索引深度解析:B+树、B树、哈希索引怎么选?
  • 机器学习在智能金融风险评估中的应用:信用评分与欺诈检测
  • day48
  • C++ 网络编程(13) asio多线程模型IOServicePool
  • CAU数据挖掘实验 表分析数据插件
  • 零信任安全管理系统介绍
  • 安防监控视频汇聚平台EasyCVR v3.7.2版云端录像无法在web端播放的原因排查和解决方法
  • 笔记本电脑怎样投屏到客厅的大电视?怎样避免将电脑全部画面都投出去?
  • Rust 是什么
  • [C#] WPF - 自定义样式(Slider篇)
  • WPF学习(三)
  • 08跨域
  • vue-i18n+vscode+vue 多语言使用
  • Mac 部署Latex OCR并优化体验(打包成App并支持全局快捷键)
  • WebSocket技术全面解析:从历史到实践
  • (Python)Python基础语法介绍(二)(Python基础教学)
  • 老年护理实训室建设方案:打造沉浸式护理实训环境
  • pulseaudio实现音频的网络传输
  • Wireshark TS | 诡异的光猫网络问题
  • 中心效应:多中心临床试验的关键考量
  • Selector组件组件
  • sentinel滑动窗口及熔断限流实现原理