![](https://img-blog.csdnimg.cn/20201218200419214.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
笔记及做题记录
时间原因,图的选择判断没有写成博客
考研再见吧~
qq_45958683
这个作者很懒,什么都没留下…
展开
-
【顺序表】顺序表函数库
基本操作有:定义顺序表结构1 初始化顺序表2 销毁顺序表3 清空顺序表4 插入一个元素5 删除一个元素6 获取某个位置的元素7 获取表长8 判断表是否为空9 有序合并两有序表#include <bits/stdc++.h>#define LIST_INIT_SIZE 100 // 初始容量#define LISTINCREMENT 10 // 空间增量#define OK 1#define ERROR -1#define OVERFLOW -1using n原创 2020-12-12 19:48:30 · 250 阅读 · 0 评论 -
【单链表】7-1 两个有序链表序列的合并 (20分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例:1 2 3 4 5 6 8 10// 两个有序链表序列的合并#include <stdli原创 2020-12-07 22:33:40 · 437 阅读 · 0 评论 -
【单链表】6-2 单链表元素定位 (12分)
L是一个带头结点的单链表。本题要求在链表中查找第一个数据域取值为x的节点,返回节点的位序(从1开始),查找不到则返回0。。例如,原单链表各个元素节点的元素依次为1,2,3,4,则ListLocate_L(L, 1)返回1,ListLocate_L(L, 3)返回3,而ListLocate_L(L, 100)返回0。输入样例:41 2 3 41输出样例:1// 单链表元素定位#include <stdio.h>#include <stdlib.h>#incl原创 2020-12-07 23:08:44 · 812 阅读 · 0 评论 -
【单链表】6-3 删除单链表中最后一个与给定值相等的结点 (10分)
本题要求在链表中删除最后一个数据域取值为x的节点。L是一个带头结点的单链表,函数ListLocateAndDel_L(LinkList L, ElemType x)要求在链表中查找最后一个数据域取值为x的节点并将其删除。例如,原单链表各个节点的数据域依次为1 3 1 4 3 5,则ListLocateAndDel_L(L,3)执行后,链表中剩余各个节点的数据域取值依次为1 3 1 4 5。函数接口定义:void ListLocateAndDel_L(LinkList L, ElemType x);其原创 2020-12-07 23:39:49 · 657 阅读 · 0 评论 -
【单链表】6-1 带头结点的单链表就地逆置 (9分)
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置,如原单链表元素依次为1,2,3,4,则逆置后为4,3,2,1。函数接口定义:void ListReverse_L(LinkList &L);其中 L 是一个带头结点的单链表。裁判测试程序样例://库函数头文件包含#include<stdio.h>#include<ma原创 2020-12-07 23:51:21 · 556 阅读 · 0 评论 -
【单链表】7-24 求链式线性表的倒数第K项 (20分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7通过代码AAA 尾插法创建链表,转化为查找正数第 len-k+1 项#include <stdlib.h>#include <原创 2020-12-08 11:40:37 · 388 阅读 · 0 评论 -
【栈】顺序栈的实现
#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;#define OK 1#define ERROR -1#define OVERFLOW -1#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typedef int SElemType;typedef struc原创 2020-10-28 19:48:45 · 75 阅读 · 0 评论 -
【栈】链栈的实现
链栈:栈中元素的数目变化较大或不清楚栈元素的数目,可考虑使用链式存储结构实现形式:无头结点的单链表,栈名指针指向栈顶元素#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;#define OK 1#define ERROR -1#define OVERFLOW -1typedef int Status;typedef int SElemType;t原创 2020-10-28 20:41:11 · 96 阅读 · 0 评论 -
【二叉树】二叉树的相关操作
#include <stdlib.h>#include <malloc.h>#include <stdio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1#define NULL 0typedef int Status;// 二叉树存储结构定义 // 二叉链表存储结构typedef int TElemType;typedef struct原创 2020-12-07 16:36:27 · 75 阅读 · 0 评论 -
【查找】静态查找 -- 顺序查找
查找表(1)查询某个“特定的”数据元素是否在查找表中(2)检索某个“特定的”数据元素的各种属性(3)在查找表中插入一个数据元素(4)从查找表中删去某个数据元素静态查找:(1)(2)动态查找:(1)(2)(3)(4)顺序查找 : 存储结构和查找操作 与 顺序表基本相同#include <iostream>#include <cstdio>using namespace std;#define OK 1#define TRUE 1#define ERROR .原创 2020-11-04 20:28:58 · 177 阅读 · 0 评论 -
【查找】静态查找 -- 折半查找
折半查找 O(log2N\log_2Nlog2N)思路:查找有序的数据,每轮与中间元素比较相等则返回当前元素的位序;待查找元素大于中间元素,到右侧区间查找;否则,到左侧区间查找注意:找不到待查找元素返回0// 折半查找#include <iostream>#include <cstdio>using namespace std;#define OK 1#define TRUE 1#define ERROR -1// 存储结构typedef int .原创 2020-11-04 20:52:13 · 197 阅读 · 0 评论 -
【查找】动态查找 -- 二叉搜索树(查找 插入 删除) + 平衡二叉树(创建)
概念根结点值大于其左子树中的所有结点值根结点值小于其右子树中的所有结点值左右子树都是二叉搜索树#include <iostream>#include <cstdio>using namespace std;#define OK 1#define ERROR -1// 存储结构typedef int KeyType;typedef struct{ KeyType key;}ElemType;typedef struct BiTNode{ E.原创 2020-11-03 23:08:58 · 199 阅读 · 0 评论 -
【查找】6-2 是否二叉搜索树 (25分)
本题要求实现函数,判断给定二叉树是否二叉搜索树。函数接口定义:bool IsBST ( BinTree T );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数IsBST须判断给定的T是否二叉搜索树,即满足如下定义的二叉树:定义:一个二叉搜索原创 2020-12-09 11:19:00 · 175 阅读 · 0 评论 -
【排序】内部排序总结和对比
插入排序直接插入排序时间复杂度: 最好(正序):O(n)O(n)O(n) 最坏(逆序):O(n2)O(n^2)O(n2) 平均:O(n2)O(n^2)O(n2)空间复杂度:O(1)O(1)O(1)稳定原始序列基本有序时该方法好折半插入排序时间复杂度: 最坏(逆序):O(n2)O(n^2)O(n2) 正序:O(nlogn)O(nlogn)O(nlogn).原创 2020-12-09 17:13:51 · 81 阅读 · 0 评论 -
【选择判断】作业1-数据结构的基本概念及顺序表基本操作
判断题若用链表来表示一个线性表,则表中元素的地址一定是连续的。数据的逻辑结构是指数据的各数据项之间的逻辑关系。抽象数据类型中基本操作的定义与具体实现有关。选择题数据的()包括集合、线性结构、树形结构和图形结构四种基本类型。 A. 存储结构 B. 逻辑结构 C. 基本运算 D. 算法描述数据在计算机内存中的表示是指() 。 A. 数据的存储结构 B. 数据结构 C. 数据的逻辑结构 D. 数据元素之间的关系下列关于数据的逻辑结构的叙述中,()是正确的。 A.原创 2020-12-10 19:27:16 · 220 阅读 · 0 评论 -
【选择判断】作业2-算法的时间复杂度和空间复杂度
判断题算法分析的两个主要方面是时间复杂度和空间复杂度的分析。N2logNN^2logNN2logN和NlogN2NlogN^2NlogN2具有相同的增长速度。2N2^N2N和NNN^NNN具有相同的增长速度。在任何情况下,时间复杂度为O(n2)O(n^2)O(n2)的算法比时间复杂度为O(n∗logn)O(n*logn)O(n∗logn)的算法所花费的时间都长。对于某些算法,随着问题规模的扩大,所花的时间不一定单调增加。选择题下面代码段的时间复杂度是()。x=n;原创 2020-12-10 19:53:35 · 1214 阅读 · 0 评论 -
【选择判断】作业3-线性表抽象数据类型定义与顺序表操作
判断题对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)O(1)O(1)和O(N)O(N)O(N)。若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)O(1)O(1)和O(N)O(N)O(N)。(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。(neuDS)所谓随机存取,就是通过首地址和元素的位序号值可原创 2020-12-10 20:12:30 · 358 阅读 · 0 评论 -
【选择判断】作业5-单链表
判断题在具有NNN个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)O(1)O(1)和O(N)O(N)O(N)。选择题原创 2020-12-12 01:28:48 · 1892 阅读 · 0 评论 -
【选择判断】作业6-改进的单链表及其应用
选择题对于一非空的循环单链表,h和p分别指向链表的头、尾结点,则有: A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D.原创 2020-12-12 02:00:34 · 351 阅读 · 0 评论 -
【选择判断】作业7-栈及其应用
判断题通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。选择题 A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B原创 2020-12-12 10:56:07 · 1811 阅读 · 0 评论 -
【选择判断】作业8-栈与递归
选择题令P代表入栈,O代表出栈。若利用堆栈将中缀表达式3*2+8/4转为后缀表达式,则相应的堆栈操作序列是: A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D.原创 2020-12-12 11:06:12 · 982 阅读 · 0 评论 -
【选择判断】作业9-队列及其应用
判断题所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。选择题 A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C.原创 2020-12-12 10:23:16 · 676 阅读 · 0 评论 -
【判断选择】作业10-数组和广义表
选择题设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为 A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D. A. B. C. D.原创 2020-12-12 16:02:23 · 825 阅读 · 0 评论 -
【选择判断】作业11-树与二叉树概念与基本操作
判断题存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。T选择题如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最多为: A. (kh−1)/(k−1)(k^h−1)/(k−1)(kh−1)/(k−1) B. (kh−1−1)/(k−1)(k^{h−1}−1)/(k−1)(kh−1−1)/(k−1) C. (kh+1−1)/(k−1)(k^{h+1}−1)/(k−1)(原创 2020-12-12 16:34:23 · 91 阅读 · 0 评论 -
【选择判断】作业12-二叉树的遍历
判断题某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为...A...B...,而中序遍历序列为...B...A...。若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。已知一棵二叉树的先序遍历结果是ABC原创 2020-12-12 17:16:29 · 5592 阅读 · 1 评论 -
【选择判断】作业13-树与森林
判断题对于一个有NNN个结点、KKK条边的森林,不能确定它共有几棵树。选择题若森林FFF有15条边、25个结点,则FFF包含树的个数是: A. 8 B. 9 C. 10 D. 11将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是:父子关系; 2. 兄弟关系; 3. u的父结点与v的父结点是兄弟关系 A. 只有2 B. 1和2 C. 1和3 D. 1、2和3对于一个有NNN个结点、KKK条边的森林原创 2020-12-12 18:02:58 · 329 阅读 · 0 评论 -
【选择判断】作业14-Huffman树及其应用
判断题对N(≥2)N(≥2)N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。选择题对N(N≥2)N(N≥2)N(N≥2)个权值均不相同的字符构造哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是: A. 树中一定没有度为1的结点 B. 树中两个权值最小的结点一定是兄弟结点 C. 树中任一非叶结点的权值一定不小于下一层任一结点的权值 D. 该树一定是一棵完全二叉树设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3原创 2020-12-18 19:55:52 · 859 阅读 · 0 评论 -
【选择判断】作业19-静态查找表与二叉搜索树
选择题将{ 5, 11, 13, 1, 3, 6 }依次插入初始为空的二叉搜索树。则该树的后序遍历结果是: A. 3, 1, 6, 13, 11, 5 B. 1, 3, 11, 6, 13, 5 C. 1, 3, 5, 6, 13, 11 D. 3, 1, 5, 6, 13, 11若二叉搜索树是有N个结点的完全二叉树,则不正确的说法是: A. 所有结点的平均查找效率是O(logN)O(logN)O(logN) B. 中位值结点在根结点或根的左子树上 C. 最小值一定在叶结点上原创 2020-12-18 19:57:41 · 331 阅读 · 0 评论 -
【判断选择】作业20-平衡二叉树与B-树
判断题mmm阶B树的根结点最多有mmm棵子树。对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树。选择题下列叙述正确的是()。 A. 在任意一棵非空二叉搜索树,删除某结点后又将其插入,则所得二叉搜索树与删除前原二叉搜索树相同。 B. 二叉树中除叶结点外, 任一结点X,其左子树根结点的值小于该结点(X)的值;其右子树根结点的值≥该结点(X)的值,则此二叉树一定是二叉搜索树。 C. 虽然给出关键字序列的顺序不一样,但依次生成的二叉搜索树却是一样的。 D. 在二叉搜索原创 2020-12-18 19:59:10 · 1893 阅读 · 0 评论 -
【判断选择】作业21--哈希查找
选择题采用线性探测法解决冲突时所产生的一系列后继散列地址: A. 对地址在何处没有限制 B. 必须小于等于原散列地址 C. 必须大于等于原散列地址 D. 可以大于或小于但不等于原散列地址散列冲突可以被描述为: A. 两个有不同键值的元素具有相同的散列地址 B. 两个有相同键值的元素具有不同的散列地址 C. 两个有不同数据的元素具有相同的键值 D. 两个元素除了有不同键值,其它都相同将M个元素存入用长度为S的数组表示的散列表,则该表的装填因子为: A. M×SM×SM×原创 2020-12-18 19:58:27 · 870 阅读 · 0 评论 -
【判断选择】作业22--插入类与交换类排序
判断题对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。对NNN个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)O(NlogN)O(NlogN)。选择题设有100个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是: A. 100,100 B. 100,54 C. 54,63 D. 45,44设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是: A. 7 B. 10 C.原创 2020-12-18 19:59:30 · 593 阅读 · 1 评论 -
【判断选择】作业23-快速排序与堆排序
判断题对NNN个记录进行简单选择排序,比较次数和移动次数分别为O(N2)O(N_2)O(N2)和O(N)O(N)O(N)。对NNN个记录进行堆排序,需要的额外空间为O(N)O(N)O(N)。选择题有组记录的排序码为{ 46,79,56,38,40,84 },则利用堆排序的方法建立的初始堆为: A. 84,79,56,46,40,38 B. 84,56,79,40,46,38 C. 79,46,56,38,40,80 D. 84,79,56,38,40,46对N个记录进行堆排序原创 2020-12-18 19:59:53 · 1436 阅读 · 0 评论 -
【判断选择】作业24-归并排序与基数排序
判断题对NNN个记录进行归并排序,归并趟数的数量级是O(NlogN)O(NlogN)O(NlogN)。基数排序是稳定的算法。To sort NNN records by merge sort, the number of merge runs is O(NlogN)O(NlogN)O(NlogN).Mergesort is stable.选择题对NNN个记录进行归并排序,归并趟数的数量级是: A. O(logN)O(\log{N})O(logN) B. O(N)O(N)O(N)原创 2020-12-18 20:00:09 · 1855 阅读 · 0 评论 -
【判断选择】作业25-外部排序与串的模式匹配
判断题KMP算法的特点是在模式匹配时指示主串的指针不会变小回溯。选择题(neuDS)设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( )。 A. O(m) B. O(n) C. O(n + m) D. O(n×m)串 ‘ababaaababaa’ 的next数组为: A. 012345678999 B. 012121111212 C. 011234223456 D. 0123012322345字符串‘ababaabab’ 的nextval 为原创 2020-12-18 20:00:26 · 699 阅读 · 0 评论