自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 北林oj数据结构416

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔),当n=0时输入结束。利用单链表表示一个整数序列,请设计算法在空间复杂度为O(1)的前提下,两两交换其中相邻的结点。对于每组数据分别输出一行,输出操作后的链表元素(元素之间用空格分隔)。注意:需要进行实际的结点交换,不可以仅改变结点内部的值。交换链表中相邻的两个结点。

2024-03-30 17:46:41 113

原创 北林oj数据结构302

an-1),其中0≤ai<n(0≤i<n)。=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的主元素。若存在主元素,则输出该元素;第一行为一个整数n,代表数组中有n个元素。当n等于0时,输入结束。每组数据输出一行,若数组中存在主元素,输出主元素的值,若数组中不存在主元素,则输出-1。

2024-03-30 15:04:41 206

原创 北林oj数据结构301

设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(x0, x1…, xn-1)变换为(xp,xp+1,…,xn-1,x0,x1,…多组数据,每组数据有三行。第一行为一个整数n,代表数组R中有n个元素。第二行为数组R中的n个元素(元素之间用空格分隔)。第三行为一个整数p,代表将R中的序列循环左移p个位置。当n等于0时,输入结束。每组数据输出一行,为移动后的数组R中所存放的序列。每两个数之间用空格分隔。

2024-03-30 14:54:23 181

原创 北林oj数据结构300

已知一个带有表头结点的单链表,结点结构为(data,link),假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data域的值,并返回1;多组数据,每组数据两行。第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。第三行为要查询链表的倒数索引k。若查询到值则输出值,否则不输出。查找链表倒数第k个结点。

2024-03-30 14:29:37 313

原创 北林oj数据结构299

有一种简单的排序算法,叫做计数排序。这种排序算法对一个待排序的表进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键字比该记录的关键字小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。每组数据输出一行,为从小到大排序后的序列。

2024-03-30 11:59:47 88

原创 北林oj数据解构298

借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..n]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。多组数据,每组数据三行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数),第三行为要查找的key值。当n等于0时,输入结束。如果查找成功,输出key在数组中的位置(1到n)和key的值,两个数字之间用空格隔开。如果查找失败,输出“not find”。

2024-03-30 11:42:39 106

原创 北林oj数据结构295

有n个记录存储在带头结点的双向链表中,利用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向冒泡排序即相邻两趟排序向相反方向冒泡)。多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。每组数据输出一行,为从小到大排序后的序列。每两个元素之间用空格隔开。基于双向链表的双向冒泡排序法。

2024-03-30 09:41:27 202

原创 北林oj数据结构294

多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。每组数据输出一行,为从小到大排序后的序列。每两个元素之间用空格隔开。试以单链表为存储结构,实现简单选择排序算法。基于链表的简单选择排序。

2024-03-30 08:41:11 135

原创 北林oj数据结构266

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。为二叉树的最大宽度。基于二叉链表的二叉树最大宽度的计算。

2024-03-30 07:53:12 167

原创 北林oj数据结构293

多组数据,每组三行,第一行为待输入的关键字的个数n,第二行为对应的n个关键字,第三行为需要删除的关键字k。当n=0时输入结束。请写出在散列表中删除关键字为k的一个记录的算法,设散列函数为H,H(key)=key%13,解决冲突的方法为链地址法。每组数据输出用链地址法处理冲突的散列表。基于链地址法的散列表的删除。

2024-03-29 22:46:00 88

原创 北林oj数据结构292

多组数据,每组三行,第一行为待输入的关键字的个数n,第二行为对应的n个关键字,第三行为需要插入的关键字k。当n=0时输入结束。请写出在散列表中插入关键字为k的一个记录的算法,设散列函数为H,H(key)=key%13,解决冲突的方法为链地址法。每组数据输出用链地址法处理冲突的散列表。基于链地址法的散列表的插入。

2024-03-29 22:41:44 108

原创 北林oj数据结构289

已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild、rchild分别指向该结点左,右孩子的指针,data域存放结点数据。试编写算法,从小到大输出二叉排序树中所有数值大于等于x的结点的数据。要求先找到第一个满足条件的结点后,再依次输出其他满足条件的结点。多组数据,每组三行。第一行为二叉排序树的结点数n。第二行为空格分隔的n个数字,对应二叉排序树中的n个结点。从小到大输出大于等于x的结点数据。二叉排序树的限定条件下的数据输出。

2024-03-29 22:17:08 173

原创 北林oj数据结构288

假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。多组数据,每组数据有一行。每行为一个二叉树对应的前序序列(其中‘#’表示空树)。当序列为“#”时,输入结束。每组数据输出1行,若此二叉树为二叉排序树则输出“YES”,否则输出“NO”。

2024-03-29 21:41:31 157

原创 北林oj数据结构287

多组数据,每组数据有三行。第一行为数组长度n,第二行为n个递增排列的数字,第三行为需要查找的数字k。当n=0时输入结束。每组数据输出一行,如果可以找到数字,则输出“YES”,否则输出“NO”。请编写一个递归的折半查找算法,查找给定有序数组中的某一元素。

2024-03-29 21:22:39 386

原创 北林oj数据结构282

多组数据,每组m+2数据行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个整数h和k,代表边依附的两个顶点。第m+2行有一个整数d,代表从d开始遍历。当n和m都等于0时,输入结束。一个连通图采用邻接表作为存储结构。设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。每组数据输出一行,为深度优先搜索的遍历结果。每两个数字之间用空格隔开。基于邻接表的深度优先遍历。

2024-03-29 20:42:00 137

原创 北林oj数据结构280

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。为删除边后的邻接表。每两个数字之间用空格隔开。给定一个无向图,在此无向图中删除一条边。基于邻接表的边的删除。

2024-03-29 19:53:03 98

原创 北林oj数据结构278

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。为增加边后的邻接表。每两个数字之间用空格隔开。给定一个无向图,在此无向图中增加一条边。基于邻接表的新边的增加。

2024-03-29 19:44:35 96

原创 北林oj数据结构277

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。每组数据输出n-1行。为删除顶点后的邻接表。每两个数字之间用空格隔开。给定一个无向图,在此无向图中删除一个顶点。基于邻接表的顶点的删除。

2024-03-29 19:34:42 182

原创 北林oj数据结构275

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束。每组数据输出n+1行。为增加顶点后的邻接表。每两个数字之间用空格隔开。给定一个无向图,在此无向图中增加一个新顶点。基于邻接表的新顶点的增加。

2024-03-29 19:26:18 164

原创 北林oj数据结构286

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。每组数据输出n-1行。为删除顶点后的邻接矩阵。每两个数字之间用空格隔开。给定一个无向图,在此无向图中删除一个顶点。基于邻接矩阵的顶点的删除。

2024-03-29 17:41:30 141

原创 北林oj数据结构281

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。为删除边后的邻接矩阵。每两个数字之间用空格隔开。给定一个无向图,在此无向图中增加一条边。基于邻接矩阵的边的删除。

2024-03-29 17:28:56 192

原创 北林oj数据结构279

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。为增加边后的邻接矩阵。每两个数字之间用空格隔开。给定一个无向图,在此无向图中增加一条边。基于邻接矩阵的新边的增加。

2024-03-29 17:26:21 178

原创 北林oj数据结构276

多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束。每组数据输出n+1行。为增加顶点后的邻接矩阵。每两个数字之间用空格隔开。给定一个无向图,在此无向图中增加一个新顶点。基于邻接矩阵的新顶点的增加。

2024-03-29 17:13:41 229

原创 北林oj数据结构414

对于每组数据分别输出一行,输出删除后链表的所有元素。如果删除后,链表删除为空,输出The LinkList is Empty!多组数据,每组数据有三行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔),第三行为k。当n=0时输入结束。利用单链表表示一个整数序列,请设计算法通过一趟遍历,删除链表中的倒数第k个结点。删除链表中的倒数第k个结点。

2024-03-28 11:31:19 277

原创 北林oj数据结构413

多组数据,每组数据有三行,第一行为数组的大小n,第二行为n个元素(元素之间用空格分隔),第三行为目标值,当n=0时输入结束。设计算法,找出数组中相加之和为目标值的两个数,并输出这两个数的下标。每组输入仅对应一种答案,相同的元素不能被重复利用。对于每组数据分别输出一样,输出两个数的下标(元素间用空格分隔)

2024-03-28 10:39:26 344

原创 北林oj数据结构412

给定一个单链表,把所有的奇数结点和偶数结点分别排在一起,重新链成一个新链表。请注意,这里的奇数结点和偶数结点指的是结点编号的奇偶性,而不是结点的值的奇偶性。多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。要求:空间复杂度应为 O(1),时间复杂度应为 O(n),n 为链表结点总数。奇数结点和偶数结点分割后重新链成的新链表。

2024-03-28 10:18:23 287

原创 北林oj数据结构304

【代码】北林oj数据结构304。

2024-03-28 09:51:42 312

原创 北林oj数据结构267

每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。每组数据输出一行,第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。基于二叉链表的二叉树最长路径的求解。

2024-03-27 20:34:16 102

原创 北林oj数据结构268

每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出每个叶子结点到根结点的路径。每组数据输出n行(n为叶子结点的个数),每行为一个叶子结点到根节点的路径(按照叶子结点从左到右的顺序)。基于二叉链表的二叉树叶子结点到根结点的路径的求解。

2024-03-27 20:20:32 120

原创 北林oj数据结构271

每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,,编写递归算法计算二叉树的高度。每组数据分别输出一行,为二叉树的高度。基于二叉链表的二叉树高度的计算。

2024-03-27 19:18:58 205

原创 北林oj数据结构270

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法对二叉树的结点(度为0、1、2)个数进行统计。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。每组数据输出一行,每行三个数分别为二叉树的度为0、1、2的结点个数。每两个数用空格分隔。基于二叉链表的二叉树结点个数的统计。

2024-03-27 19:13:40 189

原创 北林oj数据结构269

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序、中序和后序遍历。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。每组数据输出三行,为二叉树的先序、中序和后序序列。基于二叉链表的二叉树的遍历。

2024-03-27 18:55:17 95

原创 北林oj数据结构265

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。每组数据输出一行,为双序遍历法得到的二叉树序列。基于二叉链表的二叉树的双序遍历。

2024-03-27 17:22:36 194

原创 北林oj数据结构264

每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。为交换左右孩子后的二叉树的先序序列。基于二叉链表的二叉树左右孩子的交换。

2024-03-27 17:14:03 205

原创 北林oj数据结构263

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。若两个二叉树相等输出“YES”,否则输出“NO”。基于二叉链表的树结构相等的判断。

2024-03-27 16:48:03 302

原创 北林oj数据结构257

写一个算法统计在输入字符串中各个不同字符出现的频度并将结果输出(字符串中的合法字符为A-Z之间的26个字母和0-9之间的10个数字)。对于每组数据输出n行,每一行为一个字符出现的频度(只输出存在的字符,格式为:字符:频度),字符排列顺序按照ASCII码从小到大的顺序。多组数据,每组数据有一行,为待统计字符频度的字符串。当字符串为“0”时,输入结束。

2024-03-26 11:12:43 271

原创 北林oj数据结构259

编写算法,实现下面函数的功能。函数void insert(char*s,char*t,int pos)将字符串t插入到字符串s中,插入位置为pos(插在第pos个字符前)。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)多组数据,每组数据有三行,第一行为插入的位置pos,第二行为要被插入的字符串s,第三行为待插入的字符串t。当pos为“0”时输入结束。对于每组数据输出一行,为t插入s后的字符串。

2024-03-25 16:25:33 313

原创 北林oj数据结构261

设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求:正(负)数序列中数的相对顺序不变,算法时间复杂度为O(n))。多组数据,每组数据有两行,第一行为数组中存放的数的个数n,第二行为n个整数。当n=0时输入结束。对于每组数据分别输出一行,为分割排序后的数组。数组的正负数分割排序。

2024-03-25 12:14:16 326

原创 北林oj数据结构260

多组数据,每组数据有m+1行,第一行为二维数组的行数m和列数n,之后m行为输入的二维数组。当n=0且m=0时输入结束。设二维数组a[1..m, 1..n] 含有m*n 个整数。写一个算法判断a中所有元素是否互不相同。对于每组数据分别输出一行,若二维数组中存在相等元素则输出“YES”,否则输出“NO”。二维数组中的元素查重。

2024-03-25 10:26:39 254

原创 北林oj数据结构253

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。对于每组数据分别输出一行,对应链表中的各个结点的平均值,输出保留两位小数。利用单链表表示一个整数序列,利用递归的方法计算单链表中各个结点的平均值。递归求解单链表中的平均值。

2024-03-22 11:15:57 95

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除