- 博客(11)
- 收藏
- 关注
原创 【PV操作】买面包的叫号算法(存疑)
Pv操作解决买面包时的叫号问题本题来自于王道《操作系统考研复习指导》。面包师有很多面包,由n名销售人员推销。每名顾客进店后取一个号,并且等待叫号,当一名销售人员空闲时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。下附代码:int i = 0;int j = 0;semaphore mutex_i = 1;//所有的mutex_i均为1semaphore mutex_j = 1;customer(){ 进入面包店; P(mutex_i);//互斥访问i,避免多个顾客同时取号 取号
2021-11-22 21:27:30
1813
6
原创 递归算法计算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
2774
原创 数组内任一部分在特定条件下的最小值
数组内任一部分的最小值本题来自于苏州大学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
349
2
原创 求两个递增数列的中间值
求两个递增数列的中间值本题来自苏州大学872考研2015年真题:设L1和L2是两个存放整型元素的递增有序顺序表,设计时间性能和空间性能尽量高效的算法,查找出L1和L2中所有元素按大小排列的中间值。算法思想:本题没什么好说的,本质上就是合并两个线性表。两个指针分别指向两个序列的首项,谁小就把谁拿出来,当找到了mid的时候,算法结束。若任一序列遍历完毕,则另一序列向后遍历未遍历完的mid即可。这个算法是正常思路就能想到的算法,也属于比较常规的方法了,我本来还以为有什么高级的方法,结果自己想不出来,看答案也
2021-11-15 20:52:15
756
原创 查找顺序表中第n/4小的元素
查找第n/4小的元素本题源于苏州大学872考研2014年真题:设整型元素组成的顺序线性表长度为n,设计一个尽可能高效的算法找出表中第n/4小的数据。这种题乍一看觉得没有思路,很容易想到一种解题思路:排序后依次向后数n/4个节点即为所找节点,但是这种思路需要考虑到顺序表中出现重复元素的情况,讨论起来非常麻烦(因为我一开始就是这么想的….),以后遇到这种找大小的题,要充分利用当前已有的查找方法的特点和优点,结合题目来做题,毕竟出题也不能出一个你没见过的想都想不出来的算法吧…我觉得应该都是基本算法的改写,举一
2021-11-11 21:45:06
421
2
原创 求树的某一结点的深度
求树的值为x的结点的深度求树中的元素值为elem的节点的深度(假设树中元素各不相同)算法思想:采用递归算法,每调用一次递归函数,使level++,设置判定条件,当(T->data==x),将level值赋给depth。1.二叉链表表示树void Depth_Elem(BiTree T,int level,int *depth,ElemType elem){ if(T!=NULL){ level++; if(T->data==x) depth = level;//判定条件 }
2021-11-05 21:41:24
1451
原创 满足奇数位为奇数或偶数位为偶数算法(二)
苏大真题:给定一顺序线性表,使其满足奇数位为奇数或偶数位为偶数。本题源于苏州大学872考研真题(2010.5)给定一个整型元素组成的顺序线性表,设计一个高效的算法重新排列表中的元素,使得偶数位序的元素为偶数或者奇数位序的元素为奇数;即:使得这两个目标至少有一个能满足。这次提供第二种思路,也是大家经常能想出来的思路。算法思想:设置指针i、j,分别指向原表的奇偶元素,按照奇偶交替向后寻找,建立一个新表,将找到的元素依次赋到新表表尾。最后当循环完毕,即满足条件之后后,再将原表中未赋值的元素依次赋值到新表表
2021-11-02 20:06:12
311
1
原创 满足奇数位为奇数或偶数位为偶数算法
苏大真题:给定一顺序线性表,使其满足奇数位为奇数或偶数位为偶数。本题源于苏州大学872考研真题(2010.5)给定一个整型元素组成的顺序线性表,设计一个高效的算法重新排列表中的元素,使得偶数位序的元素为偶数或者奇数位序的元素为奇数;即:使得这两个目标至少有一个能满足。算法思想:设置两个指针i、j,分别指向该顺序表的奇偶位序的第一位,i指针向后寻找第一个奇数位序上的偶数(该过程也是检查奇数位上是否为奇数),j指针向后寻找第一个偶数位序上的奇数。若均存在,则交换两位元素,若任意指针越界,则返回(此时已满足
2021-10-31 21:44:40
516
原创 求给定的值所得新值的个数
苏大真题:给定一个值,求出所有得到新值的个数本题源于苏州大学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
245
原创 不带头节点的单链表递归删除值为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
605
2
原创 数据结构 递归算法解决单链表成对逆置问题。
单链表成对逆置关于苏州大学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
1559
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人