datetime:2022-04-09 17:46
author:nzb
数据结构与算法
绪论
基本概念
数据
数据元素、数据项
数据对象、数据结构
数据类型、抽象数据类型(ADT)
数据结构三要素
逻辑结构
集合
线性结构
树形结构
图状结构(网状结构)
物理结构(存储结构)
顺序存储
物理内存中是连续的
非顺序存储
物理内存中是分散的
链式存储
索引存储
散列存储
数据的运算
学习建议
- 概念多,比较无聊。抓大放小,重要的是形成框架,不必纠结细节概念。
队列
定义
一种操作受限的线性表,只能在队尾插入、在队头删除
特性:先进先出(FIFO)
术语:队头、队尾、空队列、队头元素、队尾元素
基本操作
创、销
增、删(入队、出队、只能在规定的一段进行)
查(获得队头元素,但不删除)
判空
队列的顺序实现
实现思路
用静态数组存放数据 元素,设置队头/队尾(front、rear)指针
循环队列:用模运算(取余)将存储空间在逻辑上变为“环状”
Q.rear = (Q.rear + 1) % MaxSize
重要考点
如何初始化、入队、出队
如何判空、判满
如何计算队列的长度
分析思路
确定 front、rear 指针的指向
rear 指向队尾元素后一个位置
rear 指向队尾元素
确定判空判满的方法
牺牲一个存储单元
增加 size 变量记录队列长度
增加 tag = 0/1 用于标记最近的一次操作是出队/入队
队列的链式实现
区别
带头结点
不带头结点
基本操作
创(初始化)
增(入队)
注意第一个元素入队
删(出队)
注意 最后一个元出队
查(获取队头元素)
判空
判满?不存在的,可以无限加(内存足够)
队列变种
双端队列
允许从两端插入、两端删除的队列
输入受限的双端队列
允许从两端删除、从一端插入的队列
输出受限的双端队列
允许从两端插入、从一端删除的队列
队列应用
树的层次遍历
图的广度优先遍历
操作系统的应用
CPU资源的分配:多个进程运行(浏览器、QQ、微信)
打印数据缓冲区