数据结构知识概要

数据结构是算法的基石,算法是软件灵魂。

数据结构的很多概念真的是很莫名其妙,很多坑爹的定义,笔者开始很搞不明白,为什么学数据结构?为什么用哪个拗口词语?这些概念到底用在什么地方?笔者试图用自己简单的话来阐述这些问题,希望能对这些感觉不是很好理解的同学有帮助。

不废话,直接开始。

一、概论
  • 时间复杂度:就是算法实现的执行的时间,说白了就是程序套了好多循环。没有就是o(n),2层循环就是o(n2),如此,剩下就不要管了。
  • 空间复杂度:说白了就是你定义了好多的变量,程序执行是额外使用了好多冗余内存。
  • 算法标准:什么算法是好的算法?好用就行。1、正确2、简单 3、占内存少 4、速度快 ,这几点不可兼得,自己把握,其实能简单和速度是主要的。
二、线性表

顺序存储结构:连续的存储。

链式存储结构:内存中随机存储的,只需要指针写出下一个结点在哪里即可。

  • 线性表:逻辑上不分叉就行。一个个数据元素前后相连(就是前驱、后继)。数据项平等对待。与此相对就是数、图。用途:其实就是数组啦。
  • 链表:采用链式存储方式的线性表。什么是链式存储?就是一个数据项中不仅保存数据还要告诉下一个数据在哪里。用途:数据大小不确定时用。

从普通链表拓展的概念:

  1. 循环链表:首尾相连的链表;
  2. 双链表:前后相随的链表;前<  >后

用途:特殊情况加快链表的操作;

三、栈和队列

这个什么东西?就是功能被限制的链表,没有什么区别;

栈:只能从上面往下放,然后从上面去取;  就是一个坑啊,有木有!

  • 链栈:链式存储的栈;
  • 顺序栈:顺序存储的栈;

队列:前面装入数据,后面取出数据; 用途:保障时间的顺序,比如用户事务操作;

  • 链队列:链式存储的队列;  链队列:长度没限制啊,是不是、
  • 顺序队列:顺序存储的队列; 
四、串

就是把字符放到前面的线性表中。不然怎么叫字符串呢? 所以很多语言字符串就是一个对象;

五、多维素组

素组的元素可以又是一个数组。 这个就是一个树。

六、树

有分叉的链表但是不能首尾相连;(线索二叉树除外,线索二叉树就是图了都);

  • 二叉树:最多两个分支。
  • 深林:几个树放到一起(没连接哈),就是个深林;形象啊、
  • 遍历:记住以根为标准即可,先访问根:先序;访问了左边,再访问根:中序;最后访问根:后序;
  • 最优二叉树(哈夫曼树):就是把权重的往上放。   用途:用来编码,用的多的,权重的自然放在前面了,权力大的就在上面(和金字塔的社会不是很像么?);
  • 线索二叉树:叶子节点的指针域不要浪费,指向其他,按照遍历的顺序来。其实就是一个图了。
七、图

无限个指针域,随你指向那个结点,不要重复就行。

  • 无向图:指向a 被指向a,算作一样;
  • 有向图:指向a被指向a,不同的,不一样;
  • 带权:指向这个行为还有程度值,权值。
  • 网络:带权的有向图。 路由协议中,由路由器组成的网络就是向且带权,比如速度、延迟不一样,上传、下载速度不一样;

遍历的问题有点麻烦

  • 深度优先:就是一直往下走,不回头。
  • 广度优先:一层一层剥下去。
  • 生成树:把图滤成一个树。删除循环的连接;primus算法类似深度优先的思想,克鲁斯卡尔算法类似广度优先的思想;
  • 最短路径:一个一个列出来,比较最小的;
八、排序和查找

先看排序:

  1. 冒泡排序:就像气泡一样,当前元素和下一个比,合适就这样,不合适就交换折腾 n * n次
  2. 快速:元素找到自己的排序位置,当每个人都找到了,那个顺序就定了。
  3. 选择:老实的排序法,找到最值,放在哪里,又去找最值。。。。
  4. 堆:和选择一样建一个具有堆的性质二叉树(节点永远比子节点大),堆顶就是最值,拿出来,再建一次堆。。。
  5. 插入:随便拿一个向有序的中放。问:开始没有有序的序列啊?答:开始只有找一个元素参照,一个必然是有序的,然后可以结合二分法查找,来排序,用查找的思想排序,逆天了有木有啊、
  6. 归并:几组有序的合并成一个。很简单,每人轮流拿出一个比较下,放进篮子里不就完了。

排序好了才能查找,否则就只能一个一个查找了

  1. 顺序查找:就是一个一个来;
  2. 二分法:简单,找中间,每次排除一半;
  3. 分块:建个索引,就是分割区域,这些区域对应到一个序列,例如123,然后去找,索引越细致,速度越快,但是修改了,会重建索引,把握程度即可。
  4. 二叉排序树:把数据存在一个树里,这个树的数据以中序遍历的顺序来存,这个结点的左边比右边小,就很好找了、每次排除整体的一半。
  5. B-树:用二叉排序树当做索引存普通数据,因为二叉排序树的建立、删除代价太大了。

什么是散列?

举个栗子。。。。数据位1-100,怎么存?你可以用1-5(自己定哈),1-20划到1中,21-40划到2中。那么就是1-100的散列为1-5,查找就很方便了,先看在那个区域里,再去找。可以说这是二分法的推广,二分法其实就是看做1-2的散列。


算法的时间复杂度和空间复杂度理解

⑴ 找出算法中的基本语句;
 
  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
 
  ⑵ 计算基本语句的执行次数的数量级;
 
  只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
 
  ⑶ 用大Ο记号表示算法的时间性能。
 
  将基本语句执行次数的数量级放入大Ο记号中。
 
  如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
 
  for (i=1; i<=n; i++)
  x++;
 
  for (i=1; i<=n; i++)
  for (j=1; j<=n; j++)
  x++;
 
  第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n2)=Ο(n2)。
 
  常见的算法时间复杂度由小到大依次为:
 
  Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
 
Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间,而Ο(2n)和Ο(n!)称为指数时间。计算机科学家普遍认为前者是有效算法,把这类问题称为P类问题,而把后者称为NP问题。

空间复杂度




最后说几个问题:

  1. 排序用在数据库中的表记录上面,数据库必须要排序,就是在建立索引时发生的。大量的数据才会体现,排序算法的价值,可以用来节约钱啊。
  2. 数据库一般把索引文件和数据文件分开的。特别典型的就是MYSQL的MYISAM存储引擎。
  3. 所谓的存储引擎就是不通过的算法实现,采用不同的适合不同场合的算法,这些场合要求不同,比如有的要求速度,有的要求并发量大,可串行化。数据库采用具不同的存储引擎,对程序有很大的影响,且一定要合适。
转自:http://www.nowamagic.net/librarys/veda/detail/2301
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 王道数据结构视频PDF是一套以视频和PDF文档形式提供的学习资料,主要涵盖数据结构的相关知识和算法。这套资料包含了丰富的内容和案例,通过视频和PDF的结合使用,可以帮助学生更好地理解和掌握数据结构的基本概念和常用算法。 视频部分是通过讲解和演示的形式呈现,采用互动式的方式,让学生能够更加直观地理解和学习相关知识。视频内容通常包括数据结构的定义、特性、分类以及常见的数据结构如链表、栈、队列、树、图等的基本操作和应用。此外,视频还会重点介绍一些常用的算法,如排序算法、搜索算法等,并通过实例演示其具体应用和实现方法。视频的讲解通常比较详细,内容涵盖面比较广,适合初学者学习和复习使用。 PDF部分则是提供了视频内容的详细讲解和总结,以供学生在观看视频之后进行进一步的复习和巩固。PDF文档通常包括视频中讲解的知识点的详细笔记、重点概括、案例分析和习题等。通过PDF文档的学习,学生可以更加系统地掌握和消化视频中的知识点,并通过习题的练习来检验自己的学习效果。 总的来说,王道数据结构视频PDF是一套较为全面且具有教学实用性的学习资料。通过视频与PDF相结合的方式,能够帮助学生更好地理解和掌握数据结构的相关知识,以实现对数据结构的深入学习和应用。如果需要系统学习数据结构,这份资料是一个不错的选择。 ### 回答2: 《王道数据结构视频PDF》是一套教学资源,旨在帮助学习者系统地学习数据结构知识。该资源包含视频教学和PDF教材两部分内容。 在视频教学方面,王道数据结构视频为学习者提供了全面而深入的讲解。通过视频的形式,学习者可以直观地观看教师的讲解和示范,更好地理解和掌握数据结构的概念、算法和应用。视频中不仅会介绍基础的数据结构,如数组、链表、栈和队列等,还会涉及到更高级的数据结构,如树、图和哈希表等。同时,视频还会配以实例演示和代码实现,帮助学习者将理论知识应用到实际问题中。 除了视频教学外,王道数据结构视频PDF还提供了相关的教材资料。这些PDF文档包含了教学视频中的要点、笔记和示例代码。通过阅读这些教材,学习者可以加深对数据结构的理解,复习和巩固知识点,并且随时查看核心概念和重要内容。 总的来说,王道数据结构视频PDF是一套全面的教学资源,通过视频教学和PDF教材的结合,为学习者提供了系统、全面、深入的学习数据结构的途径。无论是初学者还是已有一定基础的学习者,都可以借助这套资源提升自己的数据结构水平,为将来的工作和学习打下坚实的基础。 ### 回答3: 王道数据结构视频PDF是一种通过视频与PDF结合的学习资源,针对数据结构领域的学习提供了方便快捷的途径。这种资源的优势在于通过视频形式呈现的教学内容可以直观地展示作者的思路和讲解,通过PDF文档可以深入地理解教学内容,并进行详细的阅读和复习。 对于学习者而言,使用王道数据结构视频PDF可以更加全面地学习数据结构知识,视频可以帮助学习者掌握基本概念和算法,通过讲解可以深入了解实际应用和解决问题的思路。而通过PDF文档,可以对视频内容进行回顾和复习,也可以加深对知识点的理解和记忆。 此外,王道数据结构视频PDF还可以提供交互式学习的机会。学习者可以通过视频开展自己的学习计划和进度安排,并且可以根据个人需求或学习进展选择性地进行观看或阅读。同时,学习者也可以根据学习情况进行有针对性的复习,提升学习效果。 总之,王道数据结构视频PDF是一种优质的学习资源,通过视频与PDF结合,为学习者提供了全面、直观、有交互性的学习方式。通过视频可以掌握基本知识和思路,通过PDF文档可以巩固知识,并进行复习。这种资源的使用有助于提高数据结构的学习效果,让学习者更好地理解和运用数据结构的相关知识

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值