- 博客(54)
- 收藏
- 关注
原创 【头歌实训:层次遍历二叉树】
层次遍历要求先访问离根节点最近的层的节点,然后依次访问下一层的节点。例如:图1的层次遍历顺序为节点上的数字,结果为:ABECDF。平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。在LevelOrder中实现二叉树的层次遍历并输出结果,中间没有空格,末尾不换行。为了完成本关任务,你需要掌握:1.队列基本操作,2.二叉树层次遍历。本关任务:给定一棵二叉树,借助队列实现层次遍历二叉树。
2024-12-01 01:44:26
339
原创 【头歌实训:由前序和中序遍历序列构造二叉树】
本关任务是实现ConstructTree.cpp里的TNode* InPreToTree(char *pa, char *ia, int p1, int p2, int i1, int i2)。给定一棵二叉树的前序遍历序列和中序遍历序列可以构造出这棵二叉树。例如前序序列是ABDECFG,中序序列是DBEAFCG,那么这颗二叉树的结构如图1所示。InPreToTree(pa,ia,0,n-1,0,n-1),其中n是序列长度。该函数的功能是由前序遍历序列和中序遍历序列构造二叉树。返回所构造的二叉树的根指针。
2024-12-01 01:40:37
786
原创 【头歌实训:由中序序列和后序序列构造二叉树】
给定一棵二叉树的中序遍历序列和后序遍历序列可以构造出这棵二叉树。例如后序序列是DEBFGCA,中序序列是DBEAFCG,那么这颗二叉树的结构如图1所示。本关任务是实现ConstructTree.cpp里的BTNode* InPostToTree(char *post, char *in, int n)。InPostToTree(): 由后序遍历序列和中序遍历序列构造二叉树。InPostToTree(post,in,n),其中n是序列长度。该函数的功能是由后序遍历序列和中序遍历序列构造二叉树。
2024-11-30 14:40:37
838
原创 【头歌实训:二叉树的顺序存储及基本操作】
二叉树或者是一棵空树。或者是一棵由一个根结点和两棵互不相交的分别称做根结点的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。二叉树与度为2的树的区别:度为2的树至少有3个结点,而二叉树的结点数可以为0。度为2的树不区分子树的次序,而二叉树中的每个结点最多有两个孩子结点,且必须要区分左右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。二叉树的5种形态:二叉树的性质性质1 非空二叉树上叶结点数等于双分支结点数加1。即n0=n2+1。
2024-11-30 14:37:39
1072
原创 【头歌实训:递归实现斐波那契数列】
有许多数学公式、数列和概念的定义是递归的,例如求n!和斐波那契( Fibonacci)数列等。对于这些问题的求解过程,可以将其递归定义直接转化为对应的递归算法,例如求n!可以转化为上面的递归算法。
2024-11-29 23:54:12
1129
原创 【头歌实训:最大公约数】
根据提示,在右侧编辑器补充完成函数int gcd(int a, int b)的代码,计算并返回非零正整数a和b的最大公约数。本关任务:求出两个非零正整数的最大公约数,并作为函数值返回。开始你的任务吧,祝你成功!返回两个数的最大公约数。
2024-11-28 11:31:13
269
原创 【头歌实训:进制转换】
根据提示,在右侧编辑器补充完整void ten2other(int n, int base)的代码,将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。本关任务:将十进制非负整数 n 转换成 base(2≤base≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。第一个为n,第二个为base。n转换为base进制的结果。开始你的任务吧,祝你成功!
2024-11-28 11:28:51
339
原创 【头歌实训:级数之和】
根据提示,在右侧编辑器补充函数double Calculate(int n)的代码,计算并输出级数1+1/2+1/3+…+1/n的和并返回。+1/n的和并返回。其中:1≤n≤10000。开始你的任务吧,祝你成功!提示:1≤n≤10000。本关任务:计算级数1+预期输出:1.000。预期输出:1.500。预期输出:1.000。预期输出:1.833。
2024-11-27 20:54:50
331
原创 【头歌实训:翻转字符串】
本关任务:给定一个字符串,翻转该字符串。例如,字符串“abcde”,翻转后为“edcba”。根据提示,在右侧编辑器补充函数void rev(char *s)代码,翻转字符串s。开始你的任务吧,祝你成功!测试输入:abcde。预期输出:edcba。测试输入:12345。预期输出:54321。
2024-11-27 20:50:14
456
原创 【头歌实训:单链表最大值】
根据提示,在右侧编辑器补充完成函数LinkNode *findMaxNode(LinkNode *L)代码,返回单链表L中最大值结点的指针。本关任务:给定一个不带附加头结点的单链表L,返回单链表中最大值结点的指针。开始你的任务吧,祝你成功!
2024-11-26 13:57:34
290
原创 【头歌实训:链表倒数第k个结点】
根据提示,在右侧编辑器补充完成函数LinkNode *findKthNode(LinkNode *L, int k)的代码,该函数的功能是返回不带附加头结点的单链表L中倒数第k个结点的指针。本关任务:编写一个函数,返回不带附加头结点的单链表中倒数第k个结点。题目保证k的值 1≤k≤链表长度。开始你的任务吧,祝你成功!
2024-11-26 13:55:29
378
原创 【头歌实训:求路径和路径条数问题】
实验内容:编写程序求路径和路径条数问题。pathnum(m,n)算法思路是:设f(m,n)为从(m,n)到(1,1)的路径条数,当m>1或者n>1时,可以从(m,n)向下移动一步,对应的路径条数为f(m-1,n),也可以向右移动一步,对应的路径条数为f(m,n-1)。路径1: (2,5) (1,5) (1,4) (1,3) (1,2) (1,1)路径2: (2,5) (2,4) (1,4) (1,3) (1,2) (1,1)路径1: (2,5) (1,5) (1,4) (1,3) (1,2) (1,1)
2024-11-25 21:25:03
2723
原创 【头歌实训:高效求解x的n次幂】
根据提示,在右侧编辑器补充有关函数的代码,高效计算并返回x。实验目的:掌握基本递归算法的设计。1.3的10次方:13.7858。本关任务:编写一个能高效求解x。实验内容:编写程序高效求解x。开始你的任务吧,祝你成功!,要求最多使用O(log。
2024-11-25 21:22:08
473
原创 【头歌实训:实现朴素的字符串匹配】
例如:长字符串是 “string” ,短字符串是 “ring” ,那么短字符串在长字符串中出现的位置是 2 ,即 “ring” 在 “string” 中出现的开始位置是 2。采用朴素的匹配算法,返回子字符串第一次出现的位置,例如t=“string ring”,p=“ring”,则返回2。字符串以数值结尾,例如p=“str”,那么p[0]=‘s’,p[1]=‘t’,p[2]=‘r’,p[3]=0。在一个长字符串中寻找一个短字符串出现的位置,这是字符串匹配问题。从字符串t查找子字符串p。
2024-11-24 17:22:14
327
原创 【头歌实训:实现KMP字符串匹配】
其中:next[i]给出如下信息:从左到右将p的字符与t的字符进行比对时,若在p的i号位置出现不匹配,就将字符串p相对t右移i-next[i]位;为了进行 KMP 匹配,首先需要计算字符串p的next数组,后面实现了计算该数组的函数void KmpGenNext(char* p, int* next)。第 1 关中实现的朴素的字符串匹配算法在实际应用系统中效率低,而 KMP 字符串匹配算法可以实现高效的匹配。// 生成p的next数组, next数组长度大于等于字符串p的长度加1。
2024-11-23 22:17:15
795
原创 【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】
实验内容:编写一个程序,利用KMP算法求子串t在主串s中出现的次数,例如:s=“aabbdaabbde”,t=“aabbd”,t在s中出现2次;再例如:s=“aaaaa”,t=“aa”,t在s中出现2次。实验工具:本关提供顺序串SqString的基本运算及其实现(在头文件sqstring.h中);根据提示,在右侧编辑器补充完成代码,计算并输出字符串t在字符串s中不重叠出现的次数。本关任务:编写一个程序,利用kmp算法求子串在主串中不重叠出现的次数。在一行中输出t在s中出现的次数。开始你的任务吧,祝你成功!
2024-11-22 21:44:12
361
原创 【头歌实训:括号是否匹配】
定义一个stack的语法如下,其中typename可以是任意基本数据类型或容器,stack_name为容器对象名称://例如:stack st1;//定义一个名称为st1存放int型数据的栈stack st2;//定义一个名称为st2存放char型数据的栈stack st3;//定义一个名称为st3存放string型数据的栈。
2024-11-22 21:40:14
1018
原创 【头歌实训:利用栈判断字符串是否为回文串】
在Palindrome中,利用栈stack判断字符串是否为回文串, 若是回文串输出YES,否则输出NO,末尾换行。为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作,3.“回文串”概念。平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。本关任务:基于栈stack数据结构判断字符串是否为“回文串”。创建栈、入栈和出栈操作请参考第1关。开始你的任务吧,祝你成功!
2024-11-21 11:28:43
819
原创 【头歌实训:利用栈实现整数的十进制转八进制】
创建栈:创建一个最多可存储max个数据元素的顺序存储的栈,初始状态设置为top=-1。该操作函数具体定义如下,其返回值为Stack指针: Stack* Stack_Create(int max)在Decimal_Conversion_Octal中,利用栈stack的基本操作实现整数的十进制转八进制,并输出八进制结果,末尾换行。本例已基于数组存储结构实现了栈的创建,通过调用Stack* Stack_Create(int max)创建一个栈实例。栈是基础的数据结构,元素操作遵循后进先出的原理。
2024-11-21 11:26:13
794
原创 【头歌实训:循环调度法】
头歌实训:循环调度法本关任务:编写一个模拟CPU处理任务的循环调度法的程序。本关要求您设计一个队列或者使用C++ STL的队列容器(queue)完成给定任务(见后面的编程要求)。为了完成本关任务,你需要掌握:1.如何设计和实现一个队列,2.如何使用C++ STL的队列容器queue。略。queue翻译为队列,在STL中主要用来实现一个先进先出(First In First Out,FIFO)的容器。如果要使用queue, 需要添加queue头文件,#include 。除此之外,还需要在头文件下面加上一
2024-11-18 20:23:51
1471
原创 【头歌实训:移除顺序表中所有值等于x的元素】
本关任务:假设一个线性表采用顺序表表示,设计一个算法,删除其中所有值等于x的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。顺序表L中的元素为: 1 2 2 1 0 2 4 2 3 1。移除 2 后顺序表L中的元素为: 1 1 0 4 3 1。第二行为删除x后顺序表所有元素,每个元素后面一个空格。顺序表L中的元素为: 0 1 2 2 3 0 4 2。移除 2 后顺序表L中的元素为: 0 1 3 0 4。移除 3 后顺序表L中的元素为: 2 2。顺序表L中的元素为: 3 2 2 3。
2024-11-18 20:12:59
377
原创 【头歌实训:逆置顺序表】
根据提示,在右侧编辑器补充函数rev的代码,使用顺序表L的空间就地逆置L。},要求时间复杂度为O(n),空间复杂度为O(1)。第一行为顺序表逆置之前的元素。每个数据后一个空格。第二行为顺序表逆置之后的元素。每个数据后一个空格。本关任务:设计一个算法,将一个顺序表L的元素{a。第一行为顺序表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!
2024-11-17 11:32:24
718
原创 【头歌实训:删除有序顺序表中的重复项】
头歌实训:删除有序顺序表中的重复项本关任务:编写一个效率尽可能高的算法,删除有序顺序表中的重复元素,重复的元素只保留一个。元素的 相对顺序 应该保持 一致 。根据提示,在右侧编辑器补充完成函数void remove_duplicates(SqList* &L)的代码,删除有序顺序表中的重复项。平台会对你编写的代码进行测试:输入包括两行。第一行为顺序表中元素个数n。第二行为空格隔开的n个整数。输出包括两行。第一行为有序顺序表原有的元素。每个数据后一个空格。第二行为删除有序顺序表重复项之后的元素。每个
2024-11-17 11:28:43
528
原创 【头歌实训:拆分单链表】
根据提示,在右侧编辑器补充代码,完成函数void split(LinkNode *&L, LinkNode *&L1, LinkNode *&L2),将单链表L拆分为L1和L2。//将结点s插在原开始结点之前,头结点之后。单链表的特点:当访问过一个结点 p 后,只能接着访问它的后继结点,而无法访问它的前驱结点。//将结点s插入结点r之后。
2024-11-16 21:13:12
1224
原创 【头歌实训:删除单链表中值最大的结点】
根据提示,在右侧编辑器补充代码,完成函数void del_max_node(LinkNode *&L),其中L为带头结点的单链表,函数功能是删除单链表L中值最大的结点。本关任务:设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)。第二行为删除值最大的元素之后的单链表。每个数据后一个空格。第一行为单链表的元素。每个数据后一个空格。第一行为单链表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!
2024-11-16 21:04:49
396
原创 【头歌实训:逆置单链表】
根据提示,在右侧编辑器补充代码,完成函数void rev_list(LinkNode *&L);该函数功能为对带头结点的单链表L进行逆置。输出包括一行,为单链表逆置之后的元素。每个数据后一个空格。要求时间复杂度为O(n),空间复杂度为O(1)。},请编写一个算法逆置该单链表,逆置后L={a。本关任务:有一个带附加头结点的单链表L={a。第一行为单链表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!
2024-11-15 21:01:15
645
原创 【头歌实训:单链表插入排序】
根据提示,在右侧编辑器补充代码,完成函数void sort_list(LinkNode *&L),该函数功能是对带头结点的单链表L进行插入排序,使其递增有序。本关任务:有一个带头结点的单链表L(至少有一个数据结点),设计一个算法使其元素递增有序排列。} LinkNode;//声明单链表结点类型。第二行为递增排序之后的单链表。每个数据后一个空格。第一行为排序之前的单链表。每个数据后一个空格。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!第一行为一个整数n。
2024-11-15 20:53:34
237
原创 【头歌实训:移除链表元素】
根据提示,在右侧编辑器补充代码,完成函数void remove_elements(LinkNode *&L, ElemType val),该函数功能为:删除L中所有值为val的结点。本关任务:给你一个带附加头结点L的单链表和一个整数 val ,请你删除链表中所有值为 val 的结点。第一行有两个空格分隔的整数。第一个整数为单链表结点数量n,第二个数为需要删除的元素val。例如,下图所示的单链表L,val=6,删除所有值为6的结点。为删除val后的单链表,每个数据后一个空格。第二行为空格隔开的n个整数。
2024-11-13 21:38:23
605
原创 【头歌实训:链表的中间结点】
根据提示,在右侧编辑器补充代码,完成函数LinkNode* middleNode(LinkNode *L),该函数的功能是返回链表的中间结点。其中L为不带附加头结点的单链表的头指针。由于该链表有两个中间结点,值分别为 3 和 4,我们返回第二个结点 4。本关任务:给定一个头结点为 L 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。输出:返回的结点值为 3。输入:1 2 3 4 5 6。输出:返回的结点值为 4。开始你的任务吧,祝你成功!输入:1 2 3 4 5。
2024-11-13 21:32:30
475
原创 【头歌实训:回文链表】
根据提示,在右侧编辑器补充代码,完成函数bool isPalindrome(LinkNode *L),该函数功能是判断链表是否为回文链表。如果是,返回 true;否则,返回 false。其中 L为不带附加头结点的单链表的头指针。本关任务:给你一个单链表的头结点 L ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。链表中节点数目在范围[1,10。开始你的任务吧,祝你成功!
2024-11-12 20:21:43
635
原创 【头歌实训:中位数】
根据提示,在右侧编辑器补充代码,完成函数ElemType find_median(SqList *A, SqList *B),该函数功能为求两个等长的有序顺序表的中位数并返回。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现有两个等长的升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。例如:若序列S1=(11,13,15,17,19),则S1的中位数是15。开始你的任务吧,祝你成功!
2024-11-12 20:18:54
289
原创 【头歌实训:求前n为数的和】
根据提示,在右侧编辑器补充完成函数add的代码,计算并输出1+2+3+…本关任务:给定整数n,计算sum(n)=1+2+3+…开始你的任务吧,祝你成功!
2024-11-11 23:20:29
176
原创 【头歌实训:求素数个数】
实验内容:编写一个程序,求[1,n]的素数个数。要求采用两种解法实现函数is_prime(int n)。根据提示,在右侧编辑器补充代码,要求分别用两种方法实现函数is_prime(int n)。实验目的:通过对比同一问题不同解法的绝对执行时间,体会如何设计“好”的算法。本关任务:编写一个程序,求[1,n]之间的素数个数。开始你的任务吧,祝你成功!测试输入:100010。测试输入:10000。测试输入:20001。
2024-11-11 23:17:06
462
原创 【头歌实训:删除链表倒数第 N 个结点】
根据提示,在右侧编辑器补充代码,删除不带附加头节点的单链表head中倒数第k个结点。本关任务:给你一个链表,删除链表的倒数第 k 个结点,并且返回链表的头结点。0
2024-11-09 22:25:32
452
原创 【头歌实训:顺序表插入删除运算】
代码窗口中sqlist.h给出了顺序表类型定义和基本运算的声明。请在sqlist.cpp文件中实现顺序表插入第i个元素和删除第i个元素的功能。(5)输出顺序表L:a b c f d e。根据提示,在右侧编辑器补充完成函数代码。(3)输出顺序表L:a b c d e。(7)输出顺序表L:a b f d e。(2)依次插入a,b,c,d,e元素。本关任务:顺序表的插入和删除运算。(4)在第4个元素位置上插入f元素。开始你的任务吧,祝你成功!(6)删除L的第3个元素。(1)初始化顺序表L。
2024-11-08 23:36:25
369
原创 【头歌实训:利用KMP算法求子串在主串中重叠出现的次数】
实验内容:编写一个程序,利用KMP算法求子串t在主串s中重叠出现的次数,例如:s=“aabbdaabbde”,t=“aabbd”,t在s中出现2次;再例如:s=“aaaaa”,t=“aa”,t在s中出现4次。实验工具:本关提供顺序串SqString的基本运算及其实现(在头文件sqstring.h中);根据提示,在右侧编辑器补充完成代码,计算并输出字符串t在字符串s中重叠出现的次数。本关任务:编写一个程序,利用kmp算法求子串在主串中不重叠出现的次数。在一行中输出t在s中出现的次数。
2024-11-08 23:32:11
1109
原创 【头歌实训:约瑟夫环】
本关任务:n个人围成一圈,按顺序从1到n进行编号,初始时从编号为1的人开始按1、2、3…顺序报数,报数到m(1≤m≤n)时该人退出到圈外,接着从出圈时的下一个位置开始从1开始重新进行报数,报数到m时的人再退出到圈外,以此类推。根据提示,在右侧编辑器补充代码,补充完成代码,完成循环队列有关操作和循环报数,其中n为圈中人的个数,m为报数的值。输出包含一行,为退出到圈外的人的编号,编号之间以一个空格分隔。输入只有一行,为n和m。请按退出顺序输出每个退出人的原编号。
2024-11-07 21:24:07
779
原创 【头歌实训:循环队列】
push x:将x加入到循环队列尾端。若循环队列已满,输出full,否则不输出任何内容。保证x为int型整数。请你实现一个循环队列,该循环队列可利用的空间大小等于n个int型变量的大小。接下来的q行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。front:输出队首元素,队首不出队。若队列为空,输出empty。pop:输出队首元素,且队首出队。若队列为空,输出empty。),表示循环队列可利用的空间大小和操作次数。第一行输入两个整数n,q(1≤n,q≤10。按对应操作要求输出。
2024-11-07 21:18:37
625
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人