数据结构 课件

第一章

  • 数据的逻辑结构:

  集合:各个元素没有其他关系;

  线性结构:一对一;

  树形结构:一对多;

  图状结构(网状结构):多对多;

  • 数据的物理结构(存储结构):顺序存储;链式存储;索引存储;散列存储;
  • 数据的运算:运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

 

 第二章  线性表

 顺序表按位查找时间复杂度为O(1),按值查找平均和最坏时间复杂度为O(n);

顺序表优点:可随机存取,存储密度高;

顺序表缺点:要求大片连续空间,改变容量不方便;

单链表按位查找和按值查找时间复杂度都为O(n);

单链表创建:头插法、尾插法;(头插法的应用:链表的逆置;)

单链表插入操作的时间复杂度:

  1. 在头部插入节点:O(1),直接将新节点作为链表的头节点。
  2. 在尾部插入节点:O(n),需要遍历整个链表找到尾节点,然后将新节点插入尾节点之后。
  3. 在中间位置插入节点:O(n),需要遍历链表找到插入位置的上一个节点,然后进行插入操作。

单链表删除操作的时间复杂度:删除头节点:O(1);删除尾节点:O(n);删除中间节点:O(n)。

第三章  栈和队列

特性:后进先出(LIFO);

栈的增删(元素进栈出栈)只能在栈顶操作;

 栈的顺序存储和链式存储(实现方式:带头节点和不带头结点);

队列的特点:先进先出(FIFO);只能在队尾插入、在队头删除;

栈的应用:括号匹配的实现、中缀后缀前缀表达式求值中的应用、递归。

后缀、前缀表达式计算:操作数入栈;

中缀转后缀:操作符入栈;

中缀表达式:操作数和运算符入栈。

 队列的应用:树的层次遍历、图的广度优先遍历

 数组的存储结构:一维数组、二维数组。(数组下标默认从0开始;)

 第四章   串

字母与对应的next值的字母一致,以最前面的next值做为nextval的值;其他不一样的与next值保持一致。

第五章 树与二叉树

 

 

 

 

第六章  图

 

 从行指向列。

 

 

 

 DAG(有向无环图)描述表达式:

 

 特性:

第七章  查找

 二叉排序树(BST)

 

 平衡二叉树(AVL)

 红黑树(Red-Black Tree)RBT

第八章  排序

 插入(直接插、折半插、希尔)、交换(冒泡、快速)、选择(选择、堆)

 

 

 

 

归纳

  • 树的先根后根遍历 = 深度优先遍历

    树的层次遍历 = 广度优先遍历

  • 并查集最坏时间复杂度 Find O(n)——>小树并大树 O(log2n)——>压缩路径O(a(n))
  • 最小生成树:Prim O(|v||v|)、Kruskal O(|E|log2|E|)

    最短路径:BFS O(|V||V|或|v|+|E|)、Dijkstra O(|v||v|)、Floyd O(|v||v||v|)

  • 插入(直接插O(1)O(nn)稳定、折半插O(1)O(nn)稳定、希尔O(1)O(n1.3n)不稳定)

    交换(冒泡O(1)O(nn)稳定、快速O(1)O(nlog2n)不稳定)

    选择(选择O(1)O(nn)不稳定、堆O(1)O(nlog2n)不稳定)

  • ASL (Average Search Length),即平均查找长度.

    带权路径长度(WPL)。

 

零碎知识点:

  1. 有序表属于逻辑结构。
  2. 顺序存储:随机存储;链式存取只能实现顺序存取。
  3. 静态链表以next=-1 为结束标志;插入和删除只修改指针,不移动元素。
  4. 链式存储结构比顺序存储结构更能方便的表示各种逻辑结构。【链式存储结构用指针表示逻辑关系,指针的设置是任意的;顺序存储结构只能用物理上的邻接关系来表示逻辑结构】
  5. 循环队列:队空:Q.f ==  Q.r ;队满:(Q.r + 1)%MaxSize == Q.f ; 队长:(Q.r-Q.f+MaxSize)%MaxSize
  6. 将递归程序转化为非递归程序  用栈实现。
  7. 后序非递归遍历的过程中,栈中保留当前节点的所有祖先。
  8. 已知前后序序列,不存在度为1的结点时 能确定唯一二叉树。
  9. 树的路径长度是从树根到每一个结点的路径长度的总和。树根到每个结点路径的最大值是树的高度减1。
  10. 结点的带权路径长度:从根结点到该结点之间的路径长度与该结点权的乘积。
  11. 二叉树分左右,有序树不分。对任意二叉树的高度:[log2N]+1 ~ N。
  12. 堆:适合大批数据的部分排序。
  13. Huffman树——》最优二叉树——》带权路径长度最短的树
  14. Huffman编码——》不等长编码——》是通过中最经典的压缩编码
  15. WPL = 所有叶子结点的带权路径长度之和。
  16. 无向完全图:n(n-1)/2
  17. 查找任何一个元素都要至少比较2次:分块查找。
  18. 二叉排序树最少比较1次。
  19. 判断回路:拓扑排序、关键路径、DFS
  20. 强连通有向图,边的个数至少为(n)
  21. 拓扑序列唯一,顶点的出度入度不一定最多为 1 ,(线性有向图)
  22. 单循环队列只设尾指针 出队 O(log2n)
  23. 顺序表平均移动次数至少为n/2;顺序查找平均比较次数(n+1)/2
  24. 元素比较次数与初始序列无关的是:简单选择、堆、归并、基数排序。
  25. 元素移动次数与初始序列无关的是:选择、插入、基数排序。
  26. 算法的时间复杂度与初始序列无关的是:选择、堆、归并、基数排序。
  27. 算法的排序趟数与初始序列无关的是: 选择、插入、基数排序。
  28. 数据对象是性质相同的数据元素的集合。
  29. 循环链表插入删除时要进行上溢和下溢的判断。
  30. 链队列用单循环链表表示,只设尾指针,出队操作时间复杂度为O(log2n)
  31. 设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为:top=top->next。
  32. 整个单链表由头指针唯一确定。
  33. 序列基本有序时,直接插入排序和冒泡排序效率高,最好时间复杂度为O(n)。
  34. 采用逆邻接表的存储方式来加速求解给定顶点的入度,边扫描边记录所有顶点的入度。O(n+e)
  35. 联通n个顶点的有向图,至少需要n条弧【有向环】
  36. 在一个含15个结点的二叉排序树上,查找一个不存在的元素,比较次数最少的是  1  次。【当树仅有左子树或右子树时】
  37. 在二叉排序树中插入一个结点的时间复杂度为O(n)。
  38. 关节点:删除顶点V与V上的所有边,图不再是连通图,顶点V就叫关节点。(没有关节点的连通图为双(重)连通图)。

    判断:画DFS:如果根结点a有两个或两个以上的分支,a就是关节点。

        生成树有两颗子树意味着两个子树之间互不相同。生成树中根结点的子树各不相通。除通过根结点本身。  若V没有和它祖先相同的回边,V是关节点。无向连通图中若删除结点和关联边则使图不联通。

  • 设二叉树有2n个结点,且m<n,不可能存在 ( ) 结点。   A.n个度为0   B.2m个度为0    C.2m个度为1    D.2m个度为2

  解:2n = n0+n1+n2=n2+2n2+1,n1 = 2(n-n2)-1    n1为奇数,选C。

  • 若度为m的哈夫曼树中,叶子结点个数为n,则非叶子节点的个数为( (n0-1)/(m-1) )。

  解:n=n0+nm  n-1=m*nm = nm+n0-1   (m-1)nm=n0-1

  • 若无向图G=(V,E)中含有7个顶点,要保证G在任何情况下都是联通的,则至少需要的边数最少是(16)

  解:(6*5)/2+1 =16

 

posted @ 2023-07-04 18:06  nullIsland01  阅读(140)  评论(0)    收藏  举报