数据结构个人总结

来源:互联网 发布:apache 配置文件路径 编辑:程序博客网 时间:2024/06/05 19:37

学习数据结构书和卷子也有一段时间了,对本书也有了一定的宏观认知,在这里就来分享一下个人对数据结构的理解和认识。

总览

第一章讨论问题的求解步骤及概念。讨论数据结构、数据、数据元素、数据项、数据逻辑结构、数据存储结构、运算、算法时间复杂度和空间复杂度等概念。
第二、三章讨论线性结构。线性结构中节点按逻辑关系一次排列形成一条“链”,节点之间的关系是线性的,常见的数据结构有线性表、栈、队列和数组等,线性表中的元素具有后进先出的特征,队列则具有先进先出的特征。
第四章讨论树形结构。树形结构具有分支、层次特征,其形态像自然界中的树。每一层上的节点可以和下一层中的多个节点相关,但只能和上一层中一个节点相关。本书重点为二叉树的存储结构及其操作。
第五章讨论图结构图中任何两个节点都可以邻接,节点之间的关系是任意的。本书主要讨论图的存储结构和图的相关操作。其存储结构有邻接矩阵、邻接表等。
第六章讨论查找查找是指根据给定的某个键值,在集合中确定一个关键字等于给定键值的数据元素。常见的查找表有顺序表、二叉排序树和散列表。
第七章讨论排序排序是指将一个数据元素的序列重新排列成一个按关键字有序的序列。排序的方法多种多样,性能也各不相同,每种方法都有自己的特点。书中重点讨论排序有直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和归并排序等。

内容

考试点:数据顺序存储与链式存储、栈与队列的操作、二叉树的存储及遍历、哈夫曼算法及应用、各类排序算法。
——–知识部分:

1.数据结构的内容:
数据的逻辑结构:分为线性结构和非线性结构
数据的存储结构:书数据的逻辑结构在存储器里的实现
数据的运算:插入、删除、排序、查找等

2.数据的存储结构分为:顺序存储结构和链式存储结构

3.单链表与双链表的插入与删除(此处可在书中查找)

4.栈与队列的基本运算有:插入、删除、读取头元素到变量中,原栈或队列保持不变、判 断是否为空、将栈或队列置为空

5.树:树并不重要,重要的知识点是二叉树,不过在这里要会树和二叉树的转换

6.二叉树的遍历:中序遍历、前序遍历、后续遍历;(重点考察) 完全二叉树(定义):在一棵二叉树中,若最多只有最下面两层的节点数可小于2,且最下面一层的节点集中于最左边的位置,则称此二叉树为完全二叉树; 树的先根次序周游对应于二叉树的前序周游(遍历),树的后根次序周游对应于二叉树的中序周游(遍历)

7.二叉树的存储结构:链式存储结构与顺序存储结构。
二叉树的链式存储: 是指二叉树的各节点随机存储在内存空间中,节点之间的关系用指针标示; 二叉树链表的节点包括三个:左指针,数据域,右指针;其中左指针指向左子节点,有指针指向右子节点;也可以是指一个父指针(parent)用于指向父节点; 二叉树链表的重要知识点:一个n节点的二叉树链表,有n+1个空指针域
二叉树的顺序存储: 二叉树的顺序存储就是按一定的次序,用一组地址连续的存储单元存储二叉树的节点元素

8.哈夫曼树:在有n个叶子节点,并带有相同权值的二叉树中 ,必定存在一个二叉树,使其带权路径长度最短,这样的二叉树被称为“最优二叉树”或“哈夫曼树”

哈夫曼树

9.排序算法:常考的排序算法有:插入排序、冒泡排序、选择排序、快速排序、堆排序 插入排序: 首先先建立一个空列表,然后放入一些已排序的有序数列(自定) ,然后然后从原列表中取出一个数,并放入新列表,仍使新列表保持有序;重复这个动作直到原列表为空

  • 冒泡排序:顾名思义,就像冒泡一样(可以从小到大,也可以从大到小),大的升上去,小的降下来。首先将所有元素放入工作列表中,从列表的第一位数字到倒数第二位数字,逐个比较一个数和它的下一位,如果这个数大于它的下一位,则将它和它的下一位交换,重复该 步骤,直到不能交换

  • 选择排序:设数组中存储了n个待排序数字,从数组中找到最小值和最大值分别放在数组的最左边和最右端,然后选出次小值和次大值放到左数第二位和右数第二位,……,最后建立完整的顺序

  • 快速排序:这是一种高效排序方法: 实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而”保证列表的前半部分都小于后半部分”就使得前
    半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。

  • 堆排序:与前面的算法都不同,它是这样的: 首先新建一个空列表,作用与插入排序中的”有序列表”相同。 找到数列中最大的数字,将其加在”有序列表”的末尾,并将其从原数列中删除。 重复2号步骤,直至原数列为空。 堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种
    数据结构以及它奇妙的特 征,使得”找到数列中最大的数字”这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的)。 看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法。至少,他们的时间复杂度差了一个数量级,一个是平方级的,一个是对数级的。

算法的时间复杂度:
平均时间复杂度

  • 插入排序 O(n2)
  • 冒泡排序 O(n2)
  • 选择排序 O(n2)
  • 快速排序 O(n log n)
  • 堆排序O(n log n)
  • 归并排序 O(n log n)
  • 基数排序 O(n)
  • 希尔排序 O(n1.25)
原创粉丝点击