数据结构 期末复习

目录

前言

第一章  绪论

1.1 什么是数据结构

1.2 基本概念和术语

1.4 算法和算法分析

第二章

第九章  查找

9.1 静态查找

 顺序查找 :

分块查找:

9.2 动态查找

二叉排序查找

平衡二叉树AVL

哈希查找

 第十章 排序

10.1 插入排序---希尔排序

10.2 冒泡排序---快速排序

10.3 选择排序---堆排序

10.4 归并排序

10.5 基数排序

总结


前言

快期末了,浅浅复习一下数据结构。


第一章  绪论

  • 1.1 什么是数据结构

  • 1.2 基本概念和术语

数据 :是能输入到计算机中并被计算机程序处理的符号的总称。

数据元素: 是数据的基本单位。

数据项: 数据的最小单位。

四种基本结构:集合、线性结构、树形结构、图状结构(网状结构)。

两种存储结构:顺序存储结构、链式存储结构。 

  • 1.4 算法和算法分析

算法的5个特性:有穷性、确定性、可行性、输入、输出。

算法设计的要求:正确性可读性、健壮性、效率高、低存储量。 

 时间复杂度T(n)的计算:就是看基本操作重复执行的次数。

第二章  线性表

线性表有链表和顺序表。

链表在插入、删除时比较好。

顺序表在查找时比较好。

1.顺序表的优缺点

优点:元素可以随机存取。   

           元素位置可用一个简单的公式表达并求取

缺点:在做插入或删除时,需要移动大量元素。

2.单链表的优缺点。

优点:在做插入或删除时,无需移动大量元素。

缺点:元素不可随机存取

          元素位置表达求取较为复杂。

长度为n的单链表插入、删除、查找第i个元素的时间复杂度是 O(n)

第三章 栈和队列

循环队列 rear永远指的是空的。为了区分是满还是空。浪费一个空间,当(rear+1)%q==f时,表示循环队列满了。

第六章 树和二叉树

结点的度:结点拥有的子树数。

树的度:树内各结点的度的最大值。

二叉树中:

1.叶子的数量=度为2的数量+1;

2.具有n个结点的完全二叉树,深度为log_{2}n​+1;​​​前面的对数向下取整

 第七章 图

无向完全图 1/2*n*(n-1)条边

有向完全图 n*(n-1) 条边

最小生成树:Prim算法、克鲁斯卡尔算法。

最短路径:dijkstra算法

关键路径:做题!!!!

第九章  查找

9.1 静态查找

  •  顺序查找

1.从表中最后一个记录开始

2.逐个进行记录的关键字和给定值的比较

3.若某个记录比较相等,则查找成功

4.若直到第1个记录都比较不等,则查找不成功

将待查找的数存在a[0]处,即为哨兵。然后把数列存入a[1]到a[n]。查找时从后往前查找,这样就不需要每次查找都比较一次是否越界了,查找到就return i;break;

  •    折半查找(二分查找):

1.先确定待查记录所在的范围(前部分或后部分)

2.逐步缩小(一半)范围直到找()到该记录为止

折半查找首先需要按升序排好数列,用冒泡排序法就行了。折半查找就是将数组的最小的下标设为low,最大的下标设为high。mid=(low+high)/2。每一次比较待查找的值与a[mid]的值。若相等就找到了;若不相等:

1)待查找的数>a[mid],low=mid+1;

(2)待查找的的数<a[mid],high=mid-1;再次比较,循环。

当high<low时跳出循环。说明没有找到。

纸质考试可能让我们画判定树,就是一颗二叉树,结点里是下标

 有了判定树之后可以算出ASL(成功)。上图这个例子ASL(成功)=(1*1+2*2+4*3+4*4)/11。

  • 分块查找:

主表:用数组存放待查记录 , 每个数据元素至少含有关键字域
索引表:每块含有最大关键字域和指向本块第一个结点的指针

 这个算法大致就是把所有数字分成很多块,把每一块的最大值记录下来。然后把待查找的数和这些最大值进行比较,就可以判断出这个数可能在哪一块中出现,然后再去这一个小块中查找。

9.2 动态查找

  • 二叉排序查找

二叉排序树:或者是一颗空树,或者是具有下列性质的二叉树:

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)它的左右子树也分别为二叉排序树。

题目:

  • 平衡二叉树AVL

平衡因子:左、右子树深度之差

平衡二叉树:是一个二叉查找树,并且每个结点的平衡因子只能取-1,0,1中的一个。

非AVL树中红框圈住的结点不满足平衡二叉树的要求。

非平衡树平衡化:
1.单向左旋  RR型


2.单向右旋  LL型


3.先单向右旋,再单向左旋  RL型


4.先单向左旋,再单向右旋  LR型

 

  • 哈希查找

哈希函数构造方法:

1.直接定址法。

2.数字分析法。

3.平方取中法。

4.折叠法。

5.除留取余法。表长m,除数p。

H(key)=key%p。***p的选择注意:p<=m;p为质数 或 不包含小于20的质因数的合数。

处理冲突的方法:

1.开放定址法。线性探测,二次探测,随机探测。

给定关键字集合{19,01,23,14,55,68, 11,82,36},设定哈希函数H(key)=key MOD 11 (表长=11)

 2.再哈希法。

3.链地址法(拉链法)。分为表头插入和表尾插入。

给定关键字集合{19,01,23,14,55,68, 11,82,36},设定哈希函数H(key)=key MOD 11 (表长=11)[表后插入]

    

ASL = (1/9)(1x6 + 2x3)  = 12/9

已知一组关键字(19,14,23,1,68,20,84,27,55,11,10,79)哈希函数为: H(key)=key MOD 13,用链地址法处理冲突[表头插入]

 第十章 排序

10.1 插入排序---希尔排序

        插入排序 O(n^{^{2}}). 稳定。

        希尔排序O(nlog{_{2}}n).不稳定。

        

10.2 冒泡排序---快速排序

        冒泡排序O(n^{^{2}}). 稳定。

        快速排序 O(nlog{_{2}}n).不稳定。

一趟排序过程:选一个 Pivotkey。

1.从high指向的记录开始,向前找到第一个关键字的值小于Pivotkey的记录,将其放到low指向的位置,low+1

2.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,将其放到high指向的位置,high-1

3.重复1,2,直到low=high枢轴记录放在low(high)指向的位置

10.3 选择排序---堆排序

        选择排序O(n^{^{2}}).不稳定。

        选择排序:每一趟(例如第i趟,i=0,1,,n-2)在后面n-i个待排序记录中选出关键字最小的记录,与第i个记录交换

        堆排序 O(nlog{_{2}}n).不稳定。

        最大堆:K{i}>=K{2i}并且K{_i}>=K{_{2i+1}}.

        创建初始堆:最后一个非终端结点(第n/2个结点)开始1个结点,逐步做筛选

        交换

        n个序列需要n-1次(筛选+交换)。

        

        

        

         

        

10.4 归并排序

        归并排序O(m+n),稳定。

        

         2-路归并排序O(nlog{_{2}}n),稳定。

10.5 基数排序

        链式基数排序,先按最低位分配、收集。再往高位走。

        


总结

主要是针对笔试,一些概念上的东西。慢慢更,希望不要半途而废。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值