数据结构讲了什么


时间复杂度与空间复杂度:
想象你在做一道数学题,时间复杂度就像是你解这道题需要多少时间,空间复杂度就像是你做这道题需要多少张草稿纸。
线性表:
线性表就像是一排排的座位。顺序表就像是电影院里的座位,你可以随便坐,但如果你想换到另一个座位,可能得站起来走过去。链式表则像是火车车厢,你不能随便换车厢,但如果你想换车厢,只需要从当前车厢走到另一个车厢的连接处。
栈和队列:
栈就像是一个盘子堆,你只能从顶上拿盘子,后放上去的盘子先拿走。队列就像是排队买票,先来的先买到,后来的后买到。双端队列就像是双向运行的扶梯,两头都能上人也能下人。
串的模式匹配算法:
朴素模式匹配就像是你在一本书里找某个词,可能需要从头翻到尾。KMP算法就像是你找词的时候,如果发现这个词不匹配,可以利用已经看过的部分快速跳到下一个可能的位置。
树:
二叉树就像是家庭树,每个家庭成员(节点)最多只有两个小孩(子节点)。遍历树就像是拜访家庭成员,你可以先拜访家长再拜访小孩(先序遍历),或者先拜访小孩再拜访家长(后序遍历)。线索二叉树就像是在家庭树的边上加了一些提示,让你更快找到人。哈夫曼树和并查集就像是一些特殊的家庭,它们有特殊的规则来管理家庭成员。
图:
图就像是一张地图,有很多点(顶点)和连接这些点的线(边)。图的存储就像是画地图的方法,有的是用网格(邻接矩阵),有的是用标签(邻接表)。图的遍历就像是在地图上走,广度优先搜索就像是你先走遍一个城市的所有街道再走下一个,深度优先搜索就像是你沿着一条街道一直走到头再回头。
查找算法:
查找就像是在电话簿里找人。顺序查找法就像是你从电话簿的第一页开始,一个一个名字往下看。折半查找法就像是你先看电话簿的中间,如果找不到,再看上半部分或下半部分。二叉排序树、平衡二叉树和红黑树就像是一些特殊的电话簿,它们按照字母顺序排列,让你更快找到人。B树和B+树就像是图书馆的目录,它们帮你快速找到想要的书。散列(Hash)表就像是你有一个超大的盒子,你把每个人的名字和他们的电话号码放在盒子的不同格子里,这样你可以直接去拿。
排序算法:
排序就像是整理一堆卡片。插入排序就像是你每次拿一张新卡片,然后把它插入到已经排好序的卡片中正确的位置。希尔排序就像是你先把卡片分成几堆,每堆卡片先排好序,然后再把这几堆卡片合并起来。冒泡排序就像是你重复地把卡片堆里的大卡片往堆底移动。快速排序就像是你每次从卡片堆里挑一张卡片作为基准,然后把比它大的卡片放到一边,比它小的放到另一边,然后再对这两堆卡片重复这个过程。堆排序就像是你把卡片堆成一堆,然后按照某种规则重新排列它们。归并排序就像是你把卡片分成两半,各自排好序,然后再把两半合并起来。基数排序就像是你按照卡片上的数字一位一位地排序。外部排序就像是你有很多卡片,但是你的手不够大,不能一次拿完,所以你得用别的方法来排序。
这些算法和数据结构就像是不同的工具和方法,根据不同的情况选择最合适的一种来解决问题。
外部排序
外部排序:就像你有很多书要整理,但是桌子不够大,你需要先把一部分书放在地上,等桌子上的书整理好了再放回来。
这些算法和数据结构就像是不同的工具和方法,根据不同的情况选择最合适的一种来解决问题。

王道数据结构概述:


第1章:时间复杂度与空间复杂度
时间复杂度:衡量算法执行所需时间的量度,通常用大O表示法来描述。
空间复杂度:衡量算法执行过程中所需的存储空间量度。
第2章:线性表
顺序表:使用数组来实现的线性表,支持随机访问。
插入和删除操作可能需要移动大量元素。
查找操作可以直接访问任意位置。
链式表:使用链表来实现的线性表,不支持随机访问。
插入和删除操作不需要移动元素,只需修改指针。
查找操作需要从头开始遍历。
单链表、双链表、循环链表:链表的不同变体,具有不同的结构和特性。
静态链表:使用数组实现,但不支持动态扩展。
顺序表和链表的比较:讨论了顺序表和链表的优缺点。
第3章:栈和队列
栈:后进先出(LIFO)的数据结构,支持推入(push)和弹出(pop)操作。
队列:先进先出(FIFO)的数据结构,支持入队(enqueue)和出队(dequeue)操作。
双端队列:允许在队列的两端进行入队和出队操作。
栈的应用:括号匹配、表达式求值、递归等。
队列的应用:任务调度、打印任务管理等。
第4章:串的模式匹配算法
朴素模式匹配算法:简单的字符串匹配方法,效率较低。
KMP算法:更高效的字符串搜索算法,通过预处理模式字符串来优化匹配过程。
第5章:树
二叉树:每个节点最多有两个子节点的树结构。
遍历:先序、中序、后序遍历是二叉树的常见遍历方式。
线索二叉树:在二叉树的空指针上存储信息,以支持更快的遍历。
哈夫曼树:用于数据压缩的树结构,其路径长度的加权和最小。
并查集:用于处理一些不交集的合并及查询问题。
第6章:图
图的基本概念:图由顶点和边组成,可以是有向或无向。
图的存储:邻接矩阵、邻接表等。
图的遍历:广度优先搜索(BFS)和深度优先搜索(DFS)。
最小生成树:在所有连接图的生成树中,边的权重之和最小的树。
最短路径问题:Dijkstra算法、Floyd算法等。
拓扑排序:对有向无环图的顶点进行线性排序,使得对于每个有向边(u, v),u都在v之前。
第7章:查找算法
顺序查找法:线性搜索,效率较低。
折半查找法:在有序数组中进行查找,效率较高。
二叉排序树:一种特殊的二叉树,可以进行高效的查找、插入和删除操作。
平衡二叉树:自动保持平衡的二叉排序树,如AVL树。
红黑树:一种自平衡的二叉查找树。
B树和B+树:用于数据库和文件系统的树结构,支持高效的范围查询。
散列(Hash)表:通过哈希函数将键映射到表中的位置,支持快速查找。
第8章:排序算法
插入排序:通过构建有序序列,对未排序数据进行插入。
希尔排序:插入排序的一种更高效的改进版本。
冒泡排序:通过重复交换相邻元素,将较大的元素移动到序列的末尾。
快速排序:分治算法,通过选取基准值将数据分为两部分,递归排序。
堆排序:利用堆这种数据结构进行排序。
归并排序:将数组分成两半,分别排序后再合并。
基数排序:根据数字的每一位进行排序。
外部排序
外部排序:当数据太大无法全部加载到内存时,需要使用外部存储进行排序。
 

 

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值