考研数据结构(每日一题)目录
将这些天做的题进行了一个小汇总,点击相应的链接就能找到啦。
有些代码会有点小问题,各位大佬求指教。
-
day60
题目:设计一个算法用于判断带头结点的循环双链表是否对称。
https://blog.csdn.net/DTRblank/article/ -
day59
题目:已知一个整数序列A=(a0,a1,…,an-1),其中0<=a1<n(0<=i<n)。若存在ap1=ap2=…=apm=x且m>n/2(0<=pk<n,1<=k<=m),则称x为A的主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素,又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素,否则输出-1.
https://blog.csdn.net/DTRblank/article/ -
day58
题目:设有一个带头节点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点从中删除,直到单链表为空为止,再删除表头结点。
https://blog.csdn.net/DTRblank/article/ -
day57
题目:后序遍历的非递归算法
https://blog.csdn.net/DTRblank/article/ -
day56
题目:计算二叉树中所有的叶子结点个数
https://blog.csdn.net/DTRblank/article/ -
day55:
题目:已知一棵二叉树链式存储,设计一个算法,输出根结点到每个叶子结点的路径。
https://blog.csdn.net/DTRblank/article/ -
day54:
题目:假设二叉树采用二叉链表结构存储,设计一个算法,求二叉树中值为x的层号。
https://blog.csdn.net/DTRblank/article/ -
day53:
题目:已知由n(n>=2)个正整数构成得到集合A={ak|0<=k<n},将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2,设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。
https://blog.csdn.net/DTRblank/article/ -
day52:
题目:荷兰国旗问题:设有一个仅有红、白、蓝三种颜色的条块组成的条块序列,请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗图案。
https://blog.csdn.net/DTRblank/article/ -
day51:
题目:编写一个算法,使之能够在数组L[1…n]中找出第k小的元素(即从小到大排序后处于第k个位置的元素)
https://blog.csdn.net/DTRblank/article/ -
day50:
题目:已知线性表按顺序存储,且每个元素都是不相同的整数型元素,设计所有奇数移动到所有偶数前面的算法。
https://blog.csdn.net/DTRblank/article/ -
day49:
题目:编写双向冒泡排序算法,在正反两个方向交替进行扫描,即第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面,如此反复进行。
https://blog.csdn.net/DTRblank/article/ -
day48:
题目:编写一个递归算法,在一棵有n个结点的、随机建立起来的二叉排序树上查找第k(1<=k<=n)小的元素,并返回指向该结点的指针。要求算法的平均时间复杂度为O(log2n),二叉排序树的每个结点中除data,lchild,rchild等数据成员外,增加一个count成员,保存以该结点为根的子树上的结点个数。
https://blog.csdn.net/DTRblank/article/ -
day47
题目:
1.设计一个算法,求出给定二叉排序树中最小和最大的关键字
2.设计一个算法,从大到小输出二叉排序树中所有值不小于k的关键字
https://blog.csdn.net/DTRblank/article/ -
day46
题目:判断二叉树是否是平衡二叉树的算法。
https://blog.csdn.net/DTRblank/article/ -
day45
题目:设计一个算法,求出指定结点在给定二叉排序树中的层次。
https://blog.csdn.net/DTRblank/article/ -
day44
题目:判断给定的二叉树是否是二叉排序树。
https://blog.csdn.net/DTRblank/article/ -
day43
题目:折半查找的递归算法。初始调用时。low为1,high为ST.length。
https://blog.csdn.net/DTRblank/article/ -
day42
题目:已知无向连通图G由顶点集V和遍集E组成,|E|>0,当G中度为奇数的顶点个数为不大于2的偶数时,G存在包含所有边且长度为|E|的路径(称为EL路径)。设图G采用邻接矩阵存储。请设计算法 int IsExistEL(MGraph G),判断G是否存在EL路径,若存在,则返回0。
https://blog.csdn.net/DTRblank/article/ -
day41
题目:设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时:输出的等价中缀表达式分别为(a+b)(c(-d))和(a*b)+(-(c-d))
https://blog.csdn.net/DTRblank/article/ -
day40
题目:二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和,给定一棵二叉树T,采用二叉链表存储,结点结构为(left,weight,right),其中叶结点的weight域保存该结点的非负权值,设root为指向T的根结点的指针,请设计求T的WPL的算法。
https://blog.csdn.net/DTRblank/article/ -
day39
题目:写出在中序线索二叉树里查找指定结点在后序的前驱结点的算法。
https://blog.csdn.net/DTRblank/article/ -
day38
题目:试设计判断两棵二叉树是否相似的算法。所谓二叉树T1和T2相似,指的是T1和T2都是空的二叉树或都只有一个根结点,或T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的。
https://blog.csdn.net/DTRblank/article/ -
day37
题目:设计一个算法将二叉树的叶结点按从左到右的顺序连成一个单链表,表头指针为head,二叉树按二叉链表方式存储,链接时用叶结点的右指针域来存放单链表指针。
https://blog.csdn.net/DTRblank/article/ -
day36
题目:设有一棵满二叉树(所有结点值均不同),已知其先序序列为pre,求其后序序列post。
https://blog.csdn.net/DTRblank/article/ -
day35
题目:假设二叉树采用二叉链表存储结构,求非空二叉树b的宽度(即具有结点数最多的那一层的结点个数)
https://blog.csdn.net/DTRblank/article/ -
day34
题目:设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和q分别指向该二叉树中任意两个结点的指针,试编写算法ANCESTOR(ROOT,p,q,r)找到p和q的最近公共祖先结点r。
https://blog.csdn.net/DTRblank/article/ -
day33
题目:在二叉树中查找值为x的结点,编写算法打印值为x的结点的所有祖先,假设值为x的结点不多于一个。
https://blog.csdn.net/DTRblank/article/ -
day32
题目:已知二叉树以二叉链表存储,编写算法完成:对于树中每个元素值为x的结点,删去以它为根的子树,并释放相应的空间。
https://blog.csdn.net/DTRblank/article/ -
day31
题目:假设二叉树采用二叉链存储结构存储,设计一个算法,求先序遍历序列中第k(1<=k<=二叉树中结点个数)个结点的值
https://blog.csdn.net/DTRblank/article/ -
day30
题目:设树B是一棵采用链式结构存储的二叉树,编写一个把树B中所有结点的左右子树进行交换的函数。
https://blog.csdn.net/DTRblank/article/ -
day29
题目:假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支(度为2)结点个数。
https://blog.csdn.net/DTRblank/article/ -
day28
题目:二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法。
https://blog.csdn.net/DTRblank/article/ -
day27
题目:假设二叉树采用二叉链表存储结构,设计一个算法求二叉树的高度(递归和非递归)
https://blog.csdn.net/DTRblank/article/ -
day26
题目:设有两个栈s1、s2都采用顺序栈方式,并共享一个存储区[0,…,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式。试设计s1、s2有关入栈和出栈的操作算法。
https://blog.csdn.net/DTRblank/article/ -
day25
题目:设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型,试设计算法判断该链表的全部n个字符是否中心对称,例如xyx、xyyx都是中心对称。
https://blog.csdn.net/DTRblank/article/ -
day24
题目:用单链表保存m个整数,结点的结构为[data][link],且|data|<=n(n为正整数),要求设计一个时间复杂度尽可能高效的算法,对于链表中data的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。
https://blog.csdn.net/DTRblank/article/ -
day23
题目:设线性表L=(a1,a2,a3,…,an-2,an-1,an)采用带头结点的单链表保存,请设计一个空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的各节点,得到线性表L’=(a1,an,a2,an-1,a3,an-2,…)
https://blog.csdn.net/DTRblank/article/ -
day22
题目:假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,可共享相同的后缀存储空间
https://blog.csdn.net/DTRblank/article/ -
day21
题目:已知一个带有表头结点的单链表。假设该链表只给出了头指针list,在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数),若查找成功,算法输出该结点的data域的值。并返回1;否则,返回0。
https://blog.csdn.net/DTRblank/article/ -
day20
题目:在一个递增有序的线性表中,有数值相同的元素存在,若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如(7,10,10,21,30,42,42,51,70)将变为(7,10,21,30,42,51,70)
https://blog.csdn.net/DTRblank/article/ -
day19
题目:设A和B是两个单链表(带头节点),其中元素递增有序,设计一个算法从A和B中的公共元素产生单链表C,要求不破坏A、B的结点
https://blog.csdn.net/DTRblank/article/ -
day18
题目:设C={a1,b1,a2,b2,…,am,bn}为线性表,采用头结点的hc单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A={a1,a2,…,an},B={bn,…,b2,b1}
https://blog.csdn.net/DTRblank/article/ -
day17
题目:将一个带头节点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表序号为奇数的袁术,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。
https://blog.csdn.net/DTRblank/article/ -
day16
题目:给定一个带头结点的单链表,设head为头指针,结点结构为(data,next),data为整型元素,next为指针,试写出算法,按照递增次序输出单链表中各节点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作为辅助空间)
https://blog.csdn.net/DTRblank/article/ -
day15
题目:给定两个单链表,编写算法找出两个链表的公共结点。
https://blog.csdn.net/DTRblank/article/ -
day14
题目:设在一个带表头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)
https://blog.csdn.net/DTRblank/article/ -
day13
题目:给定一个含n(n>=1)个整数的数组,请谁一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1,数组{1,2,3}中未出现的最小正整数是4。
https://blog.csdn.net/DTRblank/article/ -
day12
题目:一个长度为L(L>=1)的升序序列S,处在第L/2个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11.现在有两个等长升序序列A和B,试设计一个转时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。
https://blog.csdn.net/DTRblank/article/ -
day11
题目:从顺序表中删除具有最小值的元素,(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。
https://blog.csdn.net/DTRblank/article/ -
day10
题目:(1)使用头插法建立单链表
(2)使用尾插法建立单链表
https://blog.csdn.net/DTRblank/article/ -
day09
题目:试编写带头节点的单链表L中删除一个最小值节点的高效算法(假设最小值节点是唯一的)
https://blog.csdn.net/DTRblank/article/ -
day08
题目:设将n(n>1)个整数存放到一维数组R中。设计一个在实践和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…,Xn-1)变换为(Xp,Xp+1,…,Xn-1,X0,X1,…,XP-1)
https://blog.csdn.net/DTRblank/article/ -
day07
题目:已知在一维数组A[m+n]中依次存放两个线性表(a1,a2,a3…,am)和(b1,b2,b3…,bn)。试编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3…bn)放在(a1,a2,a3…,am)的前面。
https://blog.csdn.net/DTRblank/article/ -
day06
题目:从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
https://blog.csdn.net/DTRblank/article/ -
day05
题目:从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。
https://blog.csdn.net/DTRblank/article/ -
day04
题目:对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,将算法删除线性表中所有值为x的数据元素。
https://blog.csdn.net/DTRblank/article/ -
day03
题目:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)
https://blog.csdn.net/DTRblank/article/ -
day02
题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
https://blog.csdn.net/DTRblank/article/ -
day01
题目:在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。
https://blog.csdn.net/DTRblank/article/