IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)

news2025/7/21 14:27:13

          我们都知道程序=数据结构+算法。相信很多人都学过严蔚敏的数据结构的课程。作为一个码农,在这不管是3.7女神节,还是3.8妇女节。我觉得都有必要向这些教育界的老前辈致敬。今天我就梳理梳理,最经典的数据结构教材。

严蔚敏介绍(来自百度百科)

严蔚敏(1938.04—),女,汉族。清华大学计算机系教授,长期从事数据结构教学和教材建设,和吴伟民合作编著的《数据结构》曾获“第二届普通高等学校优秀教材全国特等奖”和“1996年度国家科学技术进步奖三等奖”。成为我国大中专院校学习“数据结构”使用最多的教材版本。 

数据结构书籍封面:

我们来看看书籍目录:(大家看看自己还有多少还给老师了?)其实我们在面试中经常问的比较基础的东西就是这些东西。

第1章 结论
1.1 什么是数据结构
1.2 基本概念和术语
1.3 抽象数据类型的表示与实现
1.4 算法和算法分析
1.4.1 算法
1.4.2 算法设计的要求
1.4.3 算法效率的度量
1.4.4 算法的存储空间需求
第2章 线性表
2.1 线性表的类型定义
2.2 线性表的顺序表示和实现
2.3 线性表的链式表示和实现
2.3.1 线性链表
2.3.2 循环链表
2.3.3 双向链表
2.4 一元多项式的表示及相加
第3章 栈和队列
3.1 栈
3.1.1 抽象数据类型栈的定义
3.1.2 栈的表示和实现
3.2 栈的应用举例
3.2.1 数制转换
3.2.2 括号匹配的检验
3.2.3 行编辑程序
3.2.4 迷宫求解
3.2.5 表达式求值
3.3 栈与递归的实现
3.4 队列
3.4.1 抽象数据类型队列的定义
3.4.2 链队列--队列的链式表示和实现
3.4.3 循环队列--队列的顺序表示和实现
3.5 离散事件模拟
第4章 串
4.1 串类型的定义
4.2 串的表示和实现
4.2.1 定长顺序存储表示
4.2.2 堆分配存储表示
4.2.3 串的块链存储表示
4.3 串的模式匹配算法
4.3.1 求子串位置的定位函数Index(S,T,pos)
4.3.2 模式匹配的一种改进算法
4.4 串操作应用举例
4.4.1 文本编辑
4.4.2 建立词索引表
第5章 数组和广义表
5.1 数组的定义
5.2 数组的顺序表示和实现
5.3 矩阵的压缩存储
5.3.1 特殊矩阵
5.3.2 稀疏矩阵
5.4 广义表的定义
5.5 广义表的存储结构
5.6 m元多项式的表示
5.7 广义表的递归算法
5.7.1 求广义表的深度
5.7.2 复制广义表
5.7.3 建立广义表的存储结构
第6章 树和二叉树
6.1 树的定义和基本术语
6.2 二叉树
6.2.1 二叉树的定义
6.2.2 二叉树的性质
6.2.3 二叉树的存储结构
6.3 遍历二叉树和线索二叉树
6.3.1 遍历二叉树
6.3.2 线索二叉树
6.4 树和森林
6.4.1 树的存储结构
6.4.2 森林与二叉树的转换
6.4.3 树和森林的遍历
6.5 树与等价问题
6.6 赫夫曼树及其应用
6.6.1 最优二叉树(赫夫曼树)
6.6.2 赫夫曼编码
6.7 回溯法与树的遍历
6.8 树的计数
第7章 图
7.1 图的定义和术语
7.2 图的存储结构
7.2.1 数组表示法 [2] 
7.2.2 邻接表
7.2.3 十字链表
7.2.4 邻接多重表
7.3 图的遍历
7.3.1 深度优先搜索
7.3.2 广度优先搜索
7.4 图的连通性问题
7.4.1 天向图的连通分量和生成树
7.4.2 有向图的强连通分量
7.4.3 最小生成树
7.4.4 关节点和重连通分量
7.5 有向无环图及其应用
7.5.1 拓扑排序
7.5.2 关键路径
7.6 最短路径
7.6.1 从某个源点到其余各项点的最短路径
7.6.2 每一对顶点之间的最短路径
第8章 动态存储管理
8.1 概述
8.2 可利用空间表及分配方法
8.3 边界标识法
8.3.1 可利用空间表的结构
8.3.2 分配算法
8.3.3 回收算法
8.4 伙伴系统
8.4.1 可利用空间表的结构
8.4.2 分配算法
8.4.3 回收算法
8.5 无用单元收集
8.6 存储紧缩
第9章 查找
9.1 静态查找表
9.1.1 顺序表的查找
9.1.2 有序表的查找
9.1.3 静态树表的查找
9.1.4 索引顺序表的查找
9.2 动态查找表
9.2.1 二叉排序树和平衡二叉树
9.2.2 B_树和B+树
9.2.3 键树
9.3 哈希表
9.3.1 什么是哈希表
9.3.2 哈希函数的构造方法
9.3.3 处理冲突的方法
9.3.4 哈希表的查找及其分析
第10章 内部排序
10.1 概述
10.2 插入排序
10.2.1 直接插入排序
10.2.2 其他插入排序
10.2.3 希尔排序
10.3 快速排序
10.4 选择排序
10.4.1 简单选择排序
10.4.2 树形选择排序
10.4.3 堆排序
10.5 归并排序
10.6 基数排序
10.6.1 多关键字的排序
10.6.2 链式基数排序
10.7 各种内部排序方法的比较讨论
第11章 外部排序
11.1 外存信息的存取
11.2 外部排序的方法
11.3 多路平衡归并的实现
11.4 置换-选择排序
11.5 最佳归并树
第12章 文件
12.1 有关文件的基本概念
12.2 顺序文件
12.3 索引文件
12.4 ISAM文件和VSAM文件
12.4.1 ISAM文件
12.4.2 VSAM文件
12.5 直接存取文件(散列文件)
12.6 多关键字文件
12.6.1 多重表文件
12.6.2 倒排文件 [2] 

 重点学习数据结构:

一、线性表

线性表又称线性存储结构,是最简单的一种存储结构,专门用来存储逻辑关系为“一对一”的数据。

在一个数据集中,如果每个数据的左侧都有且仅有一个数据和它有关系,数据的右侧也有且仅有一个数据和它有关系,那么这些数据之间就是“一对一“的逻辑关系。

示例图:

 线性表的存储:

在具有“一对一“逻辑关系的数据集中,每个个体习惯称为数据元素(简称元素)

二、 栈和队列

栈:

对于逻辑关系为“一对一”的数据,除了用顺序表链表存储外,还可以用栈结构存储。
栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方:
1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的。

2、栈中无论存数据还是取数据,都必须遵循“先进后出”的原则,即最先入栈的元素最先出栈。

 队列:

队列用来存储逻辑关系为“一对一”的数据,是一种“特殊”的线性存储结构。

顺序表链表相比,队列的特殊性体现在以下两个方面:
1、元素只能从队列的一端进入,从另一端出去。

2、队列中各个元素的进出必须遵循“先进先出”的原则,即最先入队的元素必须最先出队。

 三、串

对于由多个字符(≥ 0)组成的字符串(例如 "maoheyeren"),数据结构单独提供了一种存储结构,称为串结构。

字符串中的字符之间具有“一对一”的逻辑关系,所以严格意义上讲,串存储结构也属于线性存储结构。和顺序表链表队列这些线性存储结构不同的是,串存储结构专门用来存储字符串。

空串指的是未存储任何字符的串,整个串的长度为 0。

String s = "";

空格串指的是由多个(>0)空格字符组成的串结构,整个串的长度为包含空格字符的个数。

String s = "    ";

子串和主串

maoheyeren

mao

四、数组和广义表

数组是对线性表的扩展,是一种“特殊”的线性存储结构,用来存储具有多种“一对一”逻辑关系的数据。

实际场景中,存储具有 N 种“一对一”逻辑关系的数据,通常会建立 N 维数组

一维数组和其它线性存储结构很类似,用来存储只有一种“一对一”逻辑关系的数据

一维数组:

 二维数组用来存储包含两种“一对一”逻辑关系的数据。二维数组可以看作是存储一维数组的一维数组

二维数组:

 五、树和二叉树

树结构通常用来存储逻辑关系为 "一对多" 的数据。

 和链表类似,树存储结构中也将存储的各个元素称为 "结点"。

通常,我们将一棵树中几个结点构成的“小树”称为这棵树的“子树”。
一个结点拥有子树的个数,就称为该结点的度(Degree)。

从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推。

如果一棵树中,各个结点左子树和右子树的位置不能交换,那么这棵树就称为有序树。反之,如果树中结点的左、右子树可以互换,那么这棵树就是一棵无序树。

由 m(m >= 0)个互不相交的树组成的集合就称为森林。

空树指的是没有任何结点的树,连根结点都没有。

二叉树:

简单地理解,满足以下两个条件的树就是二叉树:

  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

 

 

六、图 

图结构常用来存储逻辑关系为“多对多”的数据。比如说,一个学生可以同时选择多门课程,而一门课程可以同时被多名学生选择,学生和课程之间的逻辑关系就是“多对多”。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML学习笔记入门到精通day01

零、 复习昨日 见代码 一、二阶段介绍 第一阶段 java基本语法 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aY95CV7t-1678153713499)(D:\前锋学习笔记\笔记\image-20230307094126248.png)] 二、HTML 2.1 HTML概念 ​ 网页,是网站中的一…

MS python学习(7)

Managing Keys - dotenv Managing keys usage of .env module 项目地址:https://github.com/theskumar/python-dotenv Reads the key,value pair from .env and adds them to environment variable. 将key明文(hard code)形式写在script里…

java开发基础了解

Java 2023-03-07 1、开发工具 (1)jdk1.8 ,11,17,从11开始不免费 java纯面向对象------面向对象(对象)面向过程(函数)。就和JavaScript语言。 (2)Mysql8.0 (3&#xff…

MySQL是怎样运行的——如何正确的使用索引

序言 下边我们将唠叨许多种让B树索引发挥最大效能的技巧和注意事项,不过大家要清楚,所有的技巧都是源自你对B树索引本质的理解,所以如果你还不能保证对B树索引充分理解,那么再次建议回过头把前边的内容看完了再来,要不…

TouchBoard 使用教程

一. 硬件采购: 其实我是想买原版的TouchBoard的,但是售罄了, 只能买国产的了,这是淘宝唯一一家提供技术支持的店铺(下面的库文件直接找店家要就行) https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.3c3a645epX97Bf&ft=t&id=706464470339 其他硬件…

Day10-网页布局实战CSS3

一 补充 1 画三角形 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

WebAuthn无密码身份验证技术

背景WebAuthn全称是Web Authentication API&#xff0c;是由W3C和FIDO在 Google、Mozilla、Microsoft、Yubico 等公司的参与下编写的规范。WebAuthn是一组在服务器、浏览器和身份验证器之间启用无密码身份验证技术。一般使用非对称加密技术&#xff0c;用公钥代替传统的密码&am…

Vue实例的常用属性 Vue实例常用方法

vm.$ el和 vm.$ data 在new Vue()实例中经常设置el&#xff0c;data选项&#xff0c;data选项里面又可以定义很多属性&#xff08;常称为数据属性&#xff09;&#xff0c;Vue提供了一些有用的实例属性与方法&#xff0c;它们都有前缀$,以便与用户定义的属性相区别。 使用Vue…

Linux服务:LVS负载均衡+keepalived架构

目录 一、LVS 1、负载均衡的结构 2、LVS三种工作模式 3、LVS调度算法 5、ipvsadm工具 二、KEEPALIVED 1、KEEPALIVED作用 2、KEEPALIVED原理 3、KEEPALIVED工作模式 4、KEEPLIVED问题及优化 三、LVSKEEPALIVED架构实现 1、实验目的 2、实验拓扑 3、实验准备 4、…

关于几种求最短路算法的碎碎念(Dijkstra、spfa、floyd)

目录 一、求1号点到n号点的最短路 1、所有边都是正数——Dijkstra &#xff08;1&#xff09;朴素版dijkstra - 邻接矩阵 &#xff08;2&#xff09;堆优化版dijstra - 邻接表 2、存在负权边——spfa 3、dijkstra和spfa的区别 二、起点和终点未知&#xff0c;求某两点间…

【16】linux命令每日分享——chmod修改权限

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

使用QIS(Quantum Image Sensor)图像重建总结(1)

最近看了不少使用QIS重建图像的文章&#xff0c;觉得比较完整详细的还是Abhiram Gnanasambandam的博士论文&#xff1a;https://hammer.purdue.edu/articles/thesis/Computer_vision_at_low_light/20057081 1 介绍 讲述了又墨子的小孔成像原理&#xff0c;到交卷相机&#xf…

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译 文章目录[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译2012年英语二翻译真题总结积累&#x1f9d0;来点好玩的想法~ 这次试试让AI做更多的事情它居然给出了流汗黄豆&#x1f605;让它评价一下参考答案让AI评价我的翻译让AI …

工具及方法 - Windows下出现“IPv4/IPv6 No Internet Access“错误

家里的PS4&#xff0c;突然用电信网刷新不了PS会员游戏了。同样的网&#xff0c;登录微软账号也登不上。难道是网络问题&#xff1f; 可我换成手机热点就是好的&#xff0c;而且PS4再用电信网络就恢复了。 让我郁闷了一下&#xff0c;开始怀疑人生。后来上网查了一下&#xf…

IM即时通讯开发用Netty实现心跳机制、断线重连机制

所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性。注&#xff1a;心跳包还有另一个作用&#xff0c;经常被忽略&#xff0c;即&#xff1a;一个连接如果长时间不用&#xff0c;防火墙或者路由器就会…

百天百题(1/100)Java创建线程的方式?

首先创建线程有四种种方式&#xff1a; 1.继承Thread类 缺点&#xff1a;1.Java是不支持多继承的&#xff0c;所以我们不能在继承其他的类了 2.不能通过线程池来此操作&#xff0c;每次创建一个线程都需要先创建一个类&#xff0c;创建和销毁线程对整体的资源开销是非常大的。…

Thread 类的基本用法

1.线程创建 Thread类&#xff1a;创建的线程都是一样的 1.继承Thread,重写run&#xff1b; 2.实现Runable,重写run&#xff1b; 3.使用匿名内部类&#xff0c;继承Thread; 4.使用匿名内部类&#xff0c;实现Runnable&#xff1b; 5.使用lambda表达式&#xff08;常用&#xff…

IDEA插件系列(3):Maven Helper插件

一、引言在写Java代码的时候&#xff0c;我们可能会出现Jar包的冲突的问题&#xff0c;这时候就需要我们去解决依赖冲突了&#xff0c;而解决依赖冲突就需要先找到是那些依赖发生了冲突&#xff0c;当项目比较小的时候&#xff0c;还比较依靠IEDA的【Diagrams】查看依赖关系&am…

嵌入式学习笔记——使用寄存器编程操作GPIO

使用寄存器编程操作GPIO前言GPIO相关的寄存器GPIO 端口模式寄存器 (GPIOx_MODER) (x A..I)位操作GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x A..I)GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x A..I/)GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x A..I/)GPIO 端口输入数据寄…

Python bool 到底怎么用? 【源码拆解】

人生苦短 我用python 一、布尔类型描述 布尔类型是计算机中最基本的类型&#xff0c; 它是计算机二进制世界的体现&#xff0c;一切都是 0 和 1 。 Python中的布尔类型只有两种值&#xff1a;True 和 False 。 &#xff08;注意&#xff1a;首字母都是大写&#xff0c;与C、Ja…