考研数据结构
ZLambert
这个作者很懒,什么都没留下…
展开
-
每日一题Day39
基于栈的可操作判断描述假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。输入多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。输出对应每组数据输出一行。若序列A...原创 2018-08-16 16:00:13 · 1107 阅读 · 0 评论 -
每日一题Day43
基于栈的后缀算术表达式求值描述从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“=”作为输入结束,操作数之间用空格分隔,操作符只可能有+、−、*、/四种运算。输入多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。参加运算的数为double类型。输出对于每组数据输出一行,为表...原创 2018-08-17 11:51:42 · 1507 阅读 · 0 评论 -
每日一题Day44
中缀表达式转化为后缀表达式描述输入一个中缀算术表达式,将其转换为后缀表达式。运算符包括+、-、*、/、(、)、=,参加运算的为小于10的自然数。(只考虑二元运算即可)输入多组数据,每组数据一行,对应一个算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。输出对于每组数据输出一行,为表达式的后缀式。样例输入1 9+(3-1)*3+1/2=1+...原创 2018-08-17 12:53:11 · 578 阅读 · 0 评论 -
每日一题Day82
砾石的交换排序描述设有顺序放置的n个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红,白,蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后,重新安排时对每粒砾石的颜色只能看一次,并且只允许交换操作来调整砾石的位置。输入多组数据,每组数据两行。第一行为砾石的数量n,第二行有n个字母,代表每个砾石的颜色(字母之间用空格分隔,R代表红色,W代表白色,B代...原创 2018-08-27 16:09:32 · 1454 阅读 · 0 评论 -
每日一题Day51
基于二叉链表的树结构相等的判断描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。输入多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。样例...原创 2018-08-20 15:52:49 · 639 阅读 · 0 评论 -
每日一题Day52
基于二叉链表的二叉树左右孩子的交换描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为交换左右孩子后的二叉树的先序序列。样例输入1 abcd00e00f00ig00...原创 2018-08-20 16:45:53 · 681 阅读 · 0 评论 -
每日一题Day53
基于二叉链表的二叉树的双序遍历描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,...原创 2018-08-20 16:52:32 · 550 阅读 · 0 评论 -
每日一题Day54
基于二叉链表的二叉树的遍历描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序、中序和后序遍历。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出三行,为二叉树的先序、中序和后序序列。样例输入1 abcd00e00f00i...原创 2018-08-20 16:58:58 · 390 阅读 · 0 评论 -
每日一题Day55
基于二叉链表的二叉树结点个数的统计描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法对二叉树的结点(度为0、1、2)个数进行统计。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行,每行三个数分别为二叉树的度为0、1、2的结点个数。每两个数用空格...原创 2018-08-20 17:09:00 · 434 阅读 · 0 评论 -
每日一题Day42
基于栈的中缀算术表达式求值描述输入一个中缀算术表达式,求解表达式的值。运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。)输入多组数据,每组数据一行,对应一个算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。参加运算的数为double...原创 2018-08-17 11:18:34 · 3066 阅读 · 1 评论 -
每日一题Day71
六度空间理论描述“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。输入多组数据,每组数据m+1行。第一行有两个数字n和m,代...原创 2018-08-22 19:46:20 · 538 阅读 · 0 评论 -
每日一题Day70
基于邻接表的长度为k的简单路径的求解描述一个连通图采用邻接表作为存储结构。设计一个算法,判断无向图中任意给定的两点是否存在一条长度为k的简单路径。输入多组数据,每组m+3数据行。第一行有两个数字n,m和k,代表有n个顶点,m条边和长度k。第二行有n个字符,代表n个顶点的编号。第三行到第m+2行每行有两个字符h和p,代表边依附的两个顶点。每条边的长度为1。第m+3行有两个字符d和f,...原创 2018-08-22 18:45:35 · 423 阅读 · 0 评论 -
每日一题Day40
基于栈的回文字符序列判断描述回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。输入多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。输出对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。样例输入1 abb...原创 2018-08-16 16:16:15 · 1137 阅读 · 0 评论 -
每日一题Day41
双栈的基本操作描述将两个栈存放于一个数组空间中,栈底分别处于数组的两端。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈算法的函数。函数调用次序依次为:进栈、栈满的判断、出栈、栈空的判断。双栈数据结构的定义如下:typedef struct node{ int *top[2]; int *base[2]; int maxsize;}...原创 2018-08-16 18:16:13 · 728 阅读 · 0 评论 -
每日一题Day50
病毒感染监测描述医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为方便研究,研究者将人的DNA和病毒的DNA均表示成由一些小写字母组成的字符串,然后检测某种病毒的DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了病毒,否则没有感染。注意:人的DNA...原创 2018-08-19 14:46:55 · 2713 阅读 · 0 评论 -
每日一题Day78
平衡二叉树的高度的计算描述假设一棵平衡二叉树的每个结点都标明了平衡因子b,设计一个算法,求平衡二叉树的高度。输入多组数据,每组数据一行,为平衡二叉树的先序序列。输入的数字为该节点的平衡因子。当序列为“#”时,输入结束。输出每组数据输出一行,为平衡二叉树的高度。样例输入1 110###0##1110###0##10####样例输出134解答:根据...原创 2018-08-26 14:26:15 · 1099 阅读 · 0 评论 -
每日一题Day79
基于链地址法的散列表的插入描述请写出在散列表中插入关键字为k的一个记录的算法,设散列函数为H,H(key)=key%13,解决冲突的方法为链地址法。输入多组数据,每组三行,第一行为待输入的关键字的个数n,第二行为对应的n个关键字,第三行为需要插入的关键字k。当n=0时输入结束。输出每组数据输出用链地址法处理冲突的散列表。样例输入1 51 4 2 3 564...原创 2018-08-26 14:56:58 · 619 阅读 · 0 评论 -
每日一题Day80
基于链地址法的散列表的删除描述请写出在散列表中删除关键字为k的一个记录的算法,设散列函数为H,H(key)=key%13,解决冲突的方法为链地址法。输入多组数据,每组三行,第一行为待输入的关键字的个数n,第二行为对应的n个关键字,第三行为需要删除的关键字k。当n=0时输入结束。输出每组数据输出用链地址法处理冲突的散列表。样例输入1 51 4 2 3 534...原创 2018-08-26 15:07:07 · 510 阅读 · 0 评论 -
每日一题Day81
二叉树的WPL计算描述二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T, 采用二叉链表存储,结点结构为:left weight right,其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针,请设计求T的WPL的算法。输入多组数据,每组数据一行,为一个二叉树的先序序列(序列中元素为0时,表示该结点为空,每两个元素之...原创 2018-08-26 16:31:17 · 707 阅读 · 0 评论 -
每日一题Day69
基于深度优先搜索的两顶点路径存在与否的判断描述设计一个算法,试基于深度优先搜索判断以邻接表方式存储的有向图中是否存在由顶点vi到达顶点vj的路径。输入多组数据,每组m+3数据行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行有n个字符,代表n个顶点的编号。第三行到第m+2行每行有两个字符h和k,代表边依附的两个顶点。第m+3行有两个字符vi和vj,代表需要判断的两个顶点。当...原创 2018-08-22 17:31:01 · 453 阅读 · 0 评论 -
每日一题Day56
基于二叉链表的二叉树高度的计算描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,,编写递归算法计算二叉树的高度。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据分别输出一行,为二叉树的高度。样例输入1 abcd00e00f00ig00h00abd00e00...原创 2018-08-20 17:26:06 · 299 阅读 · 0 评论 -
每日一题Day57
基于二叉链表的二叉树叶子结点到根结点的路径的求解描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出每个叶子结点到根结点的路径。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出n行(n为叶子结点的个数),每行为一个叶子结点到根节点的路径(按照叶子结点从左...原创 2018-08-20 18:15:53 · 375 阅读 · 0 评论 -
每日一题Day62
基于邻接表的顶点的删除描述给定一个无向图,在此无向图中删除一个顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n-1行。为删除顶点后的邻接表。每两个数字之间用空格隔开。...原创 2018-08-21 17:36:33 · 481 阅读 · 0 评论 -
每日一题Day63
基于邻接表的新边的增加描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为增加边后的邻接表。每两个数字之间用空格隔开...原创 2018-08-21 18:16:48 · 588 阅读 · 0 评论 -
每日一题Day64
基于邻接矩阵的新边的增加描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为增加边后的邻接矩阵。每两个数字之间用空格...原创 2018-08-21 18:23:18 · 461 阅读 · 0 评论 -
每日一题Day65
基于邻接表的边的删除描述给定一个无向图,在此无向图中删除一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为删除边后的邻接表。每两个数字之间用空格隔开。...原创 2018-08-21 18:44:20 · 335 阅读 · 0 评论 -
每日一题Day66
基于邻接矩阵的边的删除描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为删除边后的邻接矩阵。每两个数字之间用空格隔...原创 2018-08-21 18:48:43 · 611 阅读 · 0 评论 -
每日一题Day67
基于邻接矩阵的顶点的删除描述给定一个无向图,在此无向图中删除一个顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n-1行。为删除顶点后的邻接矩阵。每两个数字之间用空格隔开。...原创 2018-08-21 19:06:00 · 514 阅读 · 0 评论 -
每日一题Day68
基于邻接表的深度优先遍历描述一个连通图采用邻接表作为存储结构。设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。输入多组数据,每组m+2数据行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个整数h和k,代表边依附的两个顶点。第m+2行有一个整数d,代表从d开始遍历。当n和m都等于0时,输入结束。输出每组数据输出一行,为...原创 2018-08-21 19:50:24 · 886 阅读 · 0 评论 -
每日一题Day77
基于链表的简单选择排序描述试以单链表为存储结构,实现简单选择排序算法。输入多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。输出每组数据输出一行,为从小到大排序后的序列。每两个元素之间用空格隔开。样例输入1 54 5 3 2 961 3 5 7 9 20样例输出1...原创 2018-08-25 19:07:17 · 478 阅读 · 0 评论 -
每日一题Day61
基于邻接表的新顶点的增加描述给定一个无向图,在此无向图中增加一个新顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束输出每组数据输出n+1行。为增加顶点后的邻接表。每两个数字之间用空格隔开。...原创 2018-08-21 17:11:13 · 325 阅读 · 0 评论 -
每日一题Day76
二叉排序树的限定条件下的数据输出描述已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild、rchild分别指向该结点左,右孩子的指针,data域存放结点数据。试编写算法,从小到大输出二叉排序树中所有数值大于等于x的结点的数据。要求先找到第一个满足条件的结点后,再依次输出其他满足条件的结点。输入多组数据,每组三...原创 2018-08-24 16:51:38 · 931 阅读 · 1 评论 -
每日一题Day75
二叉排序树的判定描述假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。输入多组数据,每组数据有一行。每行为一个二叉树对应的前序序列(其中‘#’表示空树)。当序列为“#”时,输入结束。输出每组数据输出1行,若此二叉树为二叉排序树则输出“YES”,否则输出“NO”。样例输入1 ba##...原创 2018-08-24 16:08:51 · 537 阅读 · 0 评论 -
每日一题Day58
基于二叉链表的二叉树最长路径的求解描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行,第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。样例输入1...原创 2018-08-20 18:33:00 · 544 阅读 · 0 评论 -
每日一题Day59
基于二叉链表的二叉树最大宽度的计算描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为二叉树的最大宽度。样例输入1 ...原创 2018-08-20 19:31:40 · 577 阅读 · 0 评论 -
每日一题Day85
最长公共子序列描述ben和mei在做一个项目。现在他们遇到了一个难题,需要你的帮助。问题可以抽象为,给定两个整型数串,求它们的最长公共子序列。最长公共子序列的定义是,一个数列 S ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。输入输入包含多组测试数据,每组数据首先包含一个N和一个M,分别表示两个整型串的长度,接下来是两...原创 2018-08-30 21:41:55 · 614 阅读 · 0 评论 -
每日一题Day72
基于Dijkstra算法的最短路径求解描述一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知。给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间的最短路径。输入多组数据,每组数据有m+3行。第一行为两个整数n和m,分别代表城市个数n和路径条数m。第二行有n个字符,代表每个城市的名字。第三行到第m+2行每行有两个字符a和b和一个整数d,...原创 2018-08-23 16:54:42 · 1718 阅读 · 1 评论 -
每日一题Day73
最长的最短路径的求解描述设计一个算法,求图G中距离顶点v的最短路径长度最大的一个顶点。输入多组数据,每组数据m+2行。每组数据第一行为两个整数n和m,代表有n个顶点m条路。顶点编号为1到n。第二行到第m+1行每行有三个整数a,b和c,代表顶点a和顶点b之间有一条长度为c的路。第m+2有一个整数v,代表顶点v。当n和m都等于0时,输入结束。输出每组数据输出两行。第一行为最短路...原创 2018-08-23 17:16:37 · 1707 阅读 · 1 评论 -
每日一题Day74
基于递归的折半查找描述请编写一个递归的折半查找算法,查找给定有序数组中的某一元素。输入多组数据,每组数据有三行。第一行为数组长度n,第二行为n个递增排列的数字,第三行为需要查找的数字k。当n=0时输入结束。输出每组数据输出一行,如果可以找到数字,则输出“YES”,否则输出“NO”。样例输入1 51 4 6 7 8661 2 5 7 9 10080...原创 2018-08-24 15:26:07 · 487 阅读 · 0 评论 -
每日一题Day60
基于邻接矩阵的新顶点的增加描述给定一个无向图,在此无向图中增加一个新顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n+1行。为增加顶点后的邻接矩阵。每两个数字之间用空格...原创 2018-08-21 16:47:52 · 801 阅读 · 0 评论