`
susam
  • 浏览: 105139 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

数据结构的知识点全貌

阅读更多

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

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

不废话,直接开始。

一、概论

  • 时间复杂度:就是算法实现的执行的时间,说白了就是程序套了好多循环。没有就是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的散列。

最后说几个问题:

  1. 排序用在数据库中的表记录上面,数据库必须要排序,就是在建立索引时发生的。大量的数据才会体现,排序算法的价值,可以用来节约钱啊。
  2. 数据库一般把索引文件和数据文件分开的。特别典型的就是MYSQL的MYISAM存储引擎。
  3. 所谓的存储引擎就是不通过的算法实现,采用不同的适合不同场合的算法,这些场合要求不同,比如有的要求速度,有的要求并发量大,可串行化。数据库采用具不同的存储引擎,对程序有很大的影响,且一定要合适。
分享到:
评论

相关推荐

    数据结构高分笔记考研必备

    思维导图可以帮助学习者快速把握数据结构的全貌,理清各个概念之间的关系。例如,节点、链表、数组、栈、队列、树、图等基本概念,以及它们的操作(如插入、删除、查找)都会在思维导图中清晰展现。此外,它可能还...

    数据结构第3版(李春葆)PPT+源程序+上机程序

    随着计算机技术的不断进步,对于数据结构的理解和应用能力要求越来越高,因而掌握扎实的数据结构知识对于计算机专业的学生和从业人员来说至关重要。 《数据结构第3版》一书,由著名学者李春葆教授编著,被认为是...

    可视化数据结构教学平台.pdf

    数据结构课程作为计算机专业的核心课程,其知识点抽象难以理解,而且教材篇幅有限,常常省略算法的具体实现细节。学生难以直观地感受不同算法解决问题的适用范围,尤其是在时间复杂度和空间复杂度方面。这些问题都...

    这里是一些知识点的归纳。知识点包括:Android、数据结构、Java、操作系统、数据库等。.zip

    在给定的压缩包文件中,我们看到了一系列与IT领域密切相关的知识点,涵盖了Android开发、数据结构、Java编程、操作系统原理以及数据库管理等核心主题。接下来,我们将对这些主题进行详细的探讨。 首先,Android是一...

    旅行模拟查询系统 96分 [BUPT]数据结构课程设计 - 旅行模拟查询系统 - 完整源代码 + 项目文档整合资源包(计算机学院 - 大二下).zip

    在这个旅行模拟查询系统中,可能会涉及以下知识点: 1. **字典(Dictionary)**:Python 的字典数据结构非常适合用来存储和查找键值对,例如城市与景点之间的关联,或者用户与行程的关系。 2. **列表(List)**:...

    Python知识点背诵手册(分章节超详细)Python知识点梳理手册

    Python是一种高级编程语言,以其简洁明了的语法和强大...《Python知识点背诵手册》将这些内容按章节详细拆解,便于学习者逐步掌握Python的全貌。结合实际项目练习,将理论知识转化为实践能力,是成为Python高手的关键。

    C语言数据结构课程设计

    这些都是计算机科学中基础且实用的知识点,它们不仅涵盖了C语言的基本语法和编程技巧,还涉及到数据结构与算法的应用。 首先,"停车场.c"可能是实现一个模拟停车场管理系统,这通常涉及到链表或数组来存储车位信息...

    数据结构关于树的程序

    下面我们将深入探讨其中涉及的知识点。 首先,树是一种抽象的数据结构,它由若干个节点组成,每个节点可以有零个或多个子节点,且存在一个特殊的节点称为根节点,没有父节点。在计算机科学中,树常用于模拟多种问题...

    图书借阅系统 C语言(数据结构)

    在这个图书借阅系统中,我们可以看到以下几个重要的知识点: 1. **C语言编程**:系统使用C语言作为主要编程语言,这是对基础编程能力的考验。C语言是底层编程的强大工具,适用于系统级编程和效率要求高的应用。 2....

    数据结构课程设计家族关系.doc

    下面我们将深入探讨该项目涉及的主要知识点。 1. **数据结构**:在本项目中,数据结构扮演了核心角色。特别是二叉树(Binary Tree)和三叉链表(Ternary Linked List)的应用。二叉树是一种特殊的树形数据结构,每...

    C++软件工程数据结构课件还有源码等经典资料

    这些知识点对于任何想要在IT行业深入发展的人员来说都是必不可少的。 数据结构是计算机科学的基础,它研究如何组织和存储数据以便更高效地访问和操作。这个资源包中的数据结构源码可能包括链表、队列、栈、树、图、...

    《数据结构课程设计》赫夫曼编码实验报告.pdf

    通过这样的课程设计,学生不仅能够掌握数据结构和算法的理论知识,还能够提升实际编程技能,加深对复杂数据压缩技术的理解。这对于未来在互联网、大数据处理以及其他需要高效数据存储和传输技术的领域中,都有着不可...

    计算机网络(第五版·谢希仁)知识点.pdf

    《计算机网络》第五版以详尽的知识点为我们描绘了计算机网络的全貌,从基础架构到技术细节,从性能指标到协议规范,每一个部分都是计算机网络不可或缺的组成元素。通过学习这些知识点,我们不仅能够更加深入地理解...

    操作系统,数据结构,网络,python,go,web.zip

    操作系统是计算机科学的基础,它是管理和控制计算机硬件...无论是操作系统底层原理,还是数据结构的巧妙运用,或是网络通信的细节,再到Python和Go的编程实践,以及Web开发的全貌,都对个人的技术成长有着极大的帮助。

    软件工程考研知识点汇总

    1. **概要设计**:确定软件的整体架构,包括模块划分、接口定义、数据结构和算法选择。 2. **详细设计**:对每个模块进行详细的设计,包括伪代码、流程图、类图、用例图等,为编码提供具体指导。 四、软件构造 1....

    数据之美 Beautiful Data

    #### 知识点一:个人数据收集与分析的重要性 在《数据之美》这本书中,作者强调了个人数据收集及其分析的重要意义。随着科技的发展和个人电子设备的普及,人们越来越容易记录自己的行为模式、生活习惯等数据。通过...

    Python库知识点 思维导图

    本思维导图涵盖了Python库中的关键知识点,旨在帮助学习者系统地理解和掌握Python库的使用。 首先,我们来看看Python的基础库,如标准库中的os、sys、io等。os库提供了与操作系统交互的函数,例如创建、删除文件或...

Global site tag (gtag.js) - Google Analytics