苏大真题
Leemars1
我是小白
展开
-
数组内任一部分在特定条件下的最小值
数组内任一部分的最小值本题来自于苏州大学872考研2016年真题。数组A中有n个整数,其中可能存在负数。设计算法找出数组 A中连续n(n>1)个元素之和的最小值。如果A中全部都是正数,则此最小值为0。分析算法的时间复杂度。例:设A中元素依次为{10,20, -10, 8, -30, 20}, 则连续n个数的片段有很多不同的组合,其中元素之和有最小值的片段为n=3时,{-10,8, -30}这个片段,其和为-10+8+(-30)=-32。算法思想:从头开始便利相加,设置一个int类型元素min储原创 2021-11-16 20:43:52 · 398 阅读 · 2 评论 -
不带头节点的单链表递归删除值为x的元素
递归算法删除值为x的节点本题为苏州大学872考研真题(2010.3),现与大家讨论。方法一void Delete_x(LinkList &L,ElemType x){ if(L==NULL) return; else if(L->data==x){ p = L; L = L->next; free(p); Delete_x(L,x); } else Delete_x(L->next,x);}该方法存疑,当有且仅有第二个节点值为x,在第二层原创 2021-10-28 19:33:08 · 616 阅读 · 2 评论 -
满足奇数位为奇数或偶数位为偶数算法(二)
苏大真题:给定一顺序线性表,使其满足奇数位为奇数或偶数位为偶数。本题源于苏州大学872考研真题(2010.5)给定一个整型元素组成的顺序线性表,设计一个高效的算法重新排列表中的元素,使得偶数位序的元素为偶数或者奇数位序的元素为奇数;即:使得这两个目标至少有一个能满足。这次提供第二种思路,也是大家经常能想出来的思路。算法思想:设置指针i、j,分别指向原表的奇偶元素,按照奇偶交替向后寻找,建立一个新表,将找到的元素依次赋到新表表尾。最后当循环完毕,即满足条件之后后,再将原表中未赋值的元素依次赋值到新表表原创 2021-11-02 20:06:12 · 322 阅读 · 1 评论 -
查找顺序表中第n/4小的元素
查找第n/4小的元素本题源于苏州大学872考研2014年真题:设整型元素组成的顺序线性表长度为n,设计一个尽可能高效的算法找出表中第n/4小的数据。这种题乍一看觉得没有思路,很容易想到一种解题思路:排序后依次向后数n/4个节点即为所找节点,但是这种思路需要考虑到顺序表中出现重复元素的情况,讨论起来非常麻烦(因为我一开始就是这么想的….),以后遇到这种找大小的题,要充分利用当前已有的查找方法的特点和优点,结合题目来做题,毕竟出题也不能出一个你没见过的想都想不出来的算法吧…我觉得应该都是基本算法的改写,举一原创 2021-11-11 21:45:06 · 427 阅读 · 2 评论 -
满足奇数位为奇数或偶数位为偶数算法
苏大真题:给定一顺序线性表,使其满足奇数位为奇数或偶数位为偶数。本题源于苏州大学872考研真题(2010.5)给定一个整型元素组成的顺序线性表,设计一个高效的算法重新排列表中的元素,使得偶数位序的元素为偶数或者奇数位序的元素为奇数;即:使得这两个目标至少有一个能满足。算法思想:设置两个指针i、j,分别指向该顺序表的奇偶位序的第一位,i指针向后寻找第一个奇数位序上的偶数(该过程也是检查奇数位上是否为奇数),j指针向后寻找第一个偶数位序上的奇数。若均存在,则交换两位元素,若任意指针越界,则返回(此时已满足原创 2021-10-31 21:44:40 · 531 阅读 · 0 评论 -
递归算法计算n个结点的二叉树的形态数
递归算法计算n个结点的二叉树的形态数本题来自苏州大学872考研2016年真题。设计递归算法,求出包涵n个结点的不同形态的二叉树的数目k。如:3个结点的二叉树共有五种不同形态,即n=3时,k=5。算法思想:本题与求二叉树结点所在层数类似,通过递归算法求出以左右孩子结点为根结点的树的形态树,然后相乘即为该结点的形态数。递归公式为:sum+=count_node(i)*count_node(n-i-1);其中count_node()为递归函数,我们设立一个参数i来考虑左右孩子分别可能拥有的结点数。下附代原创 2021-11-16 21:40:10 · 2814 阅读 · 0 评论 -
求给定的值所得新值的个数
苏大真题:给定一个值,求出所有得到新值的个数本题源于苏州大学872考研真题(2013.5)给定一个值,求出所有得到的新值的个数。例如给出值为345,将其各个位数字相加得到新值12,对12各个位数字相加得到新值为3,则对345得到的新值的个数为3个(包括其本身)。代码如下:递归算法int plus_item(int n,int i){//i =0 if(n/10==0) return i+1; int sum = 0; else{ while(n/10!=0){ sum +=n%10原创 2021-10-29 21:39:17 · 257 阅读 · 0 评论 -
求两个递增数列的中间值
求两个递增数列的中间值本题来自苏州大学872考研2015年真题:设L1和L2是两个存放整型元素的递增有序顺序表,设计时间性能和空间性能尽量高效的算法,查找出L1和L2中所有元素按大小排列的中间值。算法思想:本题没什么好说的,本质上就是合并两个线性表。两个指针分别指向两个序列的首项,谁小就把谁拿出来,当找到了mid的时候,算法结束。若任一序列遍历完毕,则另一序列向后遍历未遍历完的mid即可。这个算法是正常思路就能想到的算法,也属于比较常规的方法了,我本来还以为有什么高级的方法,结果自己想不出来,看答案也原创 2021-11-15 20:52:15 · 769 阅读 · 0 评论 -
数据结构 递归算法解决单链表成对逆置问题。
单链表成对逆置关于苏州大学872考研中出现的单链表成对逆置问题。LinkList D_Reverse(LinkList &L){ if(L==NULL||L->next==NULL) return L; LNode *p = L->next,*q = p->next; p->next = L; L->next = D_Reverse(q); return p;}...原创 2021-10-27 21:35:04 · 1594 阅读 · 4 评论