当前位置: 首页 > 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.dtcms.com/a/263973.html

相关文章:

  • 转录组分析流程(三):功能富集分析
  • HakcMyVM-Arroutada
  • Rust 学习笔记:比较数值
  • Prompt生成指南
  • 数据结构与算法--蛇行矩阵问题
  • WPF学习笔记(17)样式Style
  • 【机器学习2】正则化regularizaiton(降低模型过拟合)
  • Http、Ftp、Dns和Dhcp服务器搭建
  • Go 服务如何“主动”通知用户?SSE广播与断线重连实战
  • 从docker-compose快速入门Docker
  • VCenter SSL过期,登录提示HTTP 500错误解决办法
  • Linux驱动学习day13(同步与互斥)
  • 记录一次生产环境ActiveMQ无法启动的问题
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(八)
  • Raspberry Pi 4边缘智能PLC:OpenPLC赋能物联网
  • 25-7-1 论文学习(1)- Fractal Generative Models 何恺明大佬的论文
  • 半导体和PN结
  • 遥感影像岩性分类:基于CNN与CNN-EL集成学习的深度学习方法
  • 胖喵安初 (azi) Android 应用初始化库 (类似 Termux)
  • Adobe AI高效设计技巧与创新思维指南
  • day41简单CNN
  • 注意力得分矩阵求解例子
  • 网站崩溃的幕后黑手:GPTBot爬虫的流量冲击
  • 第七讲~~测试工具(禅道项目管理系统)
  • 【记录】Word|Word创建自动编号的多级列表标题样式
  • poi java 删除word的空白页
  • 【docker】docker save和docker load
  • 通达信【极弱强势指标与股道波段交易系统】幅图
  • Gin 中间件详解与实践
  • 发布/订阅模式:解耦系统的强大设计模式