自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 统计字符出现的频率

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

2024-05-02 08:00:00 338

原创 查找数组中缺失的数字(头歌)

在大小为n的数组中,仅存在大小为[1,n]的数字,数组中的元素有些出现了两次,有些出现了一次,有的数字没有出现。假设储存结果的数组不算在额外空间之内。这道题目的思路就是先建立一个额外的b数组,利用for循环依次将a[i]作为b数组的下标的同时再将a[i]赋值给b[a[i]],利用下标与值相等的关系方便后续查找缺失的数,若是b[i]依旧为0,则说明此处有缺失值,缺失值正好为i。多组数据,每组数据有两行,第一行为数组的长度n,第二行为数组的n个元素(元素之间用空格分隔),当n=0时输入结束。

2024-05-01 08:15:00 514

原创 查找子串第一次出现的位置(头歌)

这道题目我使用的是非常朴素的BF算法,i代表主串的位置,j代表子串的位置,然后从头开始一个一个的比较,如果相同,则i和j都后移一个位置继续比较下一个元素;如果不同时,i返回到原来位置的下一个位置,j返回到第一个位置,又开始重新一轮的比较。它的作用是:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。下面,请你设计算法简单实现函数strstr(),若存在返回子串首次出现的下标(从0开始),若不存在返回-1。

2024-04-30 08:30:00 186

原创 字符串的插入

函数void insert(char * s,char * t,int pos)将字符串t插入到字符串s中,插入位置为pos(插在第pos个字符前)。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)这道题目先将被插入字符串s中插入位置以后的数依次后移LenT(待插入字符串t的长度),然后再将待插入字符串t中每一个元素依次插入s中。多组数据,每组数据有三行,第一行为插入的位置pos,第二行为要被插入的字符串s,第三行为待插入的字符串t。对于每组数据输出一行,为t插入s后的字符串。

2024-04-29 09:00:00 444

原创 数组正负数分割(头歌)

这道题目我想到的是先建立一个额外的数组b,然后先利用一个for循环将A数组中的数历遍,将大于0的数先在b数组中依次排上;再利用一个for循环将A数组中的数历遍,将小于0的数依次接在b数组中剩下的位置。设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求:正(负)数序列中数的相对顺序不变,算法时间复杂度为O(n))。多组数据,每组数据有两行,第一行为数组中存放的数的个数n,第二行为n个整数。当n=0时输入结束。对于每组数据分别输出一行,为分割排序后的数组。

2024-04-28 08:30:00 660

原创 数组循环左移(头歌)

试设计一个在时间和空间两方面都尽可能高效的算法,将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(x0, x1…, xn-1)变换为(xp,xp+1,…,xn-1,x0,x1,…第三行为一个整数p,代表将R中的序列循环左移p个位置。当n等于0时,输入结束。如果直接输出可以直接输出b数组中的数据那么后面for循环中的赋值操作可以省略,因为头歌上后面有一个打印R数组的函数(这里我省略了代码没有贴出来了),所以需要多一步赋值操作。每组数据输出一行,为移动后的数组R中所存放的序列。

2024-04-27 08:00:00 552

原创 二维数组中元素的查重(头歌)

这里用一个足够大的数组,并且将每个数组元素初始化为0。在for循环中历遍时,将二维数组中的值都作为辅助数组下标,辅助数组中每个先出现的新数下标的元素又再次赋值为1,等到下次出现下标一样的数组元素时就不再等于0了,代表之前已经出现过了,于是进入else语句中将标志flag赋值为1后,结束循环。多组数据,每组数据有m+1行,第一行为二维数组的行数m和列数n,之后m行为输入的二维数组。其实这到题目的思维和我之前发布“删除链表中绝对值相等的节点”的头歌题目思路差不多,都是使用了辅助数组。

2024-04-26 18:00:00 398 2

原创 基于栈的后缀算数表达式求值(头歌)

因为输入的的字符,我们需要把这些数字字符转换为对应数字运算的结果才会正确(这里小菜最开始没有想到,卡了好久,晚上睡前突然醒悟,呜呜呜.....),所以我先用for循环把所有数字字符都转换为对应的数字,后续操作就不用管了。本关任务:从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“=”作为输入结束,操作数之间用空格分隔,操作符只可能有+、?多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。对于每组数据输出一行,为表达式的运算结果。

2024-04-25 18:00:00 879 1

原创 基于循环链表的队列的基本操作(头歌)

第一行为两个整数n和m,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),m表示出队序列B的元素数量(m个数依次连续出队,中间没有入队的情况)。在进行出队操作时,当删除节点为尾节点时,删除后的队列为空,所以需要进行另外处理,即先将尾指针指向头节点,再将头节点指针指向自己。每行包括m+1个整数,前m个数代表出队序列B的各个整数,最后一个整数表示队列是否为空,队列为空输出0,不为空输出1。本关任务:用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针)。

2024-04-24 08:00:00 492

原创 双栈的基本操作(头歌)

第三行包括d1+1个整数,其中前d1个整数代表出栈序列D1,最后一个整数代表出栈操作完成时1号栈是否为空,栈空输出0,不空输出1。第一行为一个整数m,表示数组V的大小,第二行为四个整数e0、e1、d0、d1,e0和e1分别代表压入0号栈和1号栈的整数序列E0和E1的长度(依次连续入栈,中间没有出栈的情况),d0和d1分别代表从0号栈和1号栈弹出的序列的长度(依次连续出栈,中间没有入栈的情况)。当m=0时,输入结束。本关任务:将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。

2024-04-23 16:23:18 516

原创 中缀表达式转化为后缀表达式 头歌--12关

在这里,主要要注意栈顶元素和所遇见的符号是否相等,因为当与栈顶符号一样时,按计算机的识别来说,先出现的符号优先级高一点,并且所给出的符号判断函数中并未考虑这一点,所以则不能直接压入栈,而是需要我们自己另外处理一下(这里小菜卡了好久,呜呜呜....),还有就是当遇见符号为'('时,不需要考虑与栈顶的优先级比较,直接压入。(如果关于中缀表达式转化为后缀表达式规则不懂的地方,因为我的语言表达可能不太好就不在这说了,所以我建议参考b站up主--乔东Q 所制作的一个相关的动画演示,非常简明易懂)

2024-04-21 19:24:15 1162 1

原创 递归求解单链表中的最大值

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。本关任务:利用单链表表示一个整数序列,利用递归的方法求出单链表中整数的最大值。对于每组数据分别输出一行,输出每个链表的最大值。

2024-04-20 21:47:14 377

原创 递归求解单链表中的平均值(头歌)

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

2024-04-18 22:47:30 381

原创 删除链表中绝对值相等的节点(头歌)

在while循环中历遍时,将指针所指数值的绝对值都作为数组下标,数组中每个先出现的新数下标的元素又再次赋值为1,等到下次出现下标绝对值一样的数组元素时就不再等于0了,代表之前已经出现过了,于是进入else语句中进行删除操作。本关任务:利用单链表表示一个整数序列,实现一个时间复杂度为O(n)的算法,对于链表中绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。

2024-04-16 18:38:37 414 1

原创 基于栈的可操作判断(头歌)

入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。因为任务描述中写了栈的始态和终态都为空(加粗部分),所以在循环结束后还需判断一下栈是否为空,如果不为空则返回0。多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。

2024-04-15 08:00:00 308 1

原创 入栈和出栈的基本操作(头歌)

本关任务:输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。

2024-04-14 18:13:26 487 1

原创 基于栈的回文字符序列判断(头歌)

本关任务:回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。如果一个字符串是回文序列,那么它正反读均相同,所以我们可以直接从它正读的第一个字符和反读的第一个字符开始相比较,这样依次比较直至每一个字符都比较完。多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。

2024-04-14 17:35:33 443 1

原创 基于链表的两个非递减有序序列的合并

这里我使用的是头插法,先是比较pa和pb指针所指的值,确定要摘取的元素,然后再用指针m指向待摘取元素的下一个值,再将pc指针的next域赋值给待摘取元素的指针的next域,再将pc指针所指节点与待摘取元素所在节点相连,最后将已经摘取节点的指针指向m指针所指节点。最后时再将还有剩余元素的链表用同样的方法插入。多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。对于每组数据输出一行,为合并后的序列,每个数据之间用空格分隔。

2024-04-13 16:14:34 235 1

原创 链表逆转(头歌)

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。本关任务:利用单链表表示一个整数序列,通过一趟遍历,将单链表中所有结点的链接方向逆转。要求空间复杂度为O(1)。大概的图示就是这样, 最后不要忘记将头节点L接到反转后新链表的表头。对于每组数据分别输出一行,逆序输出链表中的元素,元素之间用空格分隔。

2024-04-13 13:49:52 355 1

原创 奇偶链表的分割(头歌)

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

2024-04-09 15:44:01 224

原创 基于链表的两个集合的交集

多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。本关任务:给定两个递增的整数集合A和B,分别用链表表示集合A和B,求出A和B的交集,并存放在A中。要求空间复杂度为O(1)。对于每组数据输出一行,为A和B的交集,每个数据之间用空格分隔。

2024-04-08 23:30:50 197

原创 基于链表的两个集合的差集(头歌)

本关任务:给定两个递增的整数集合,分别用链表A和B表示,求出A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。要求空间复杂度为O(1)。多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。对于每组数据输出两行,第一行是A和B的差集,第二行为差集中的元素个数,每个数据之间用空格分隔。

2024-04-08 23:06:23 173

原创 头歌-求解两个升序序列的中位数

例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。因为每次输入的两组数据数量都是n个,所以每次两组数据排序后的中位数实际上就是排序后的第n个数,所以我们没有必要将两组数据排序后合并成一组数据再取中位数,而是只要排出前n个数,然后返回第n个数即可。多组数据,每组数据有三行,第一行为序列的长度n,第二行为序列A的n个元素,第三行为序列B的n个元素(元素之间用空格分隔)。对于每组数据分别输出两个序列的中位数,占一行。

2024-04-08 00:19:23 340 2

空空如也

空空如也

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

TA关注的人

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