<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Leemars1的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Leemars1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Leemars1]]></copyright><item><title><![CDATA[【PV操作】买面包的叫号算法（存疑）]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121480921</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121480921</guid><author>Leemars1</author><pubDate>Mon, 22 Nov 2021 21:27:30 +0800</pubDate><description><![CDATA[Pv操作解决买面包时的叫号问题
本题来自于王道《操作系统考研复习指导》。
面包师有很多面包，由n名销售人员推销。每名顾客进店后取一个号，并且等待叫号，当一名销售人员空闲时，就叫下一个号。试设计一个使销售人员和顾客同步的算法。
下附代码：
int i = 0;
int j = 0;
semaphore mutex_i = 1;//所有的mutex_i均为1
semaphore mutex_j = 1;
customer(){
	进入面包店;
	P(mutex_i);//互斥访问i，避免多个顾客同时取号
	取号]]></description><category></category></item><item><title><![CDATA[递归算法计算n个结点的二叉树的形态数]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121366040</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121366040</guid><author>Leemars1</author><pubDate>Tue, 16 Nov 2021 21:40:10 +0800</pubDate><description><![CDATA[递归算法计算n个结点的二叉树的形态数
本题来自苏州大学872考研2016年真题。
设计递归算法，求出包涵n个结点的不同形态的二叉树的数目k。如：3个结点的二叉树共有五种不同形态，即n=3时，k=5。
算法思想：本题与求二叉树结点所在层数类似，通过递归算法求出以左右孩子结点为根结点的树的形态树，然后相乘即为该结点的形态数。
递归公式为：sum+=count_node(i)*count_node(n-i-1);其中count_node()为递归函数，我们设立一个参数i来考虑左右孩子分别可能拥有的结点数。
下附代]]></description><category></category></item><item><title><![CDATA[数组内任一部分在特定条件下的最小值]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121364743</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121364743</guid><author>Leemars1</author><pubDate>Tue, 16 Nov 2021 20:43:52 +0800</pubDate><description><![CDATA[数组内任一部分的最小值
本题来自于苏州大学872考研2016年真题。
数组A中有n个整数，其中可能存在负数。设计算法找出数组 A中连续n(n&gt;1)个元素之和的最小值。如果A中全部都是正数，则此最小值为0。分析算法的时间复杂度。
例:设A中元素依次为{10,20, -10, 8, -30, 20}, 则连续n个数的片段有很多不同的组合，其中元素之和有最小值的片段为n=3时,{-10,8, -30}这个片段，其和为-10+8+(-30)=-32。
算法思想：从头开始便利相加，设置一个int类型元素min储]]></description><category></category></item><item><title><![CDATA[求两个递增数列的中间值]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121343131</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121343131</guid><author>Leemars1</author><pubDate>Mon, 15 Nov 2021 20:52:15 +0800</pubDate><description><![CDATA[求两个递增数列的中间值
本题来自苏州大学872考研2015年真题：设L1和L2是两个存放整型元素的递增有序顺序表，设计时间性能和空间性能尽量高效的算法，查找出L1和L2中所有元素按大小排列的中间值。
算法思想：本题没什么好说的，本质上就是合并两个线性表。两个指针分别指向两个序列的首项，谁小就把谁拿出来，当找到了mid的时候，算法结束。若任一序列遍历完毕，则另一序列向后遍历未遍历完的mid即可。
这个算法是正常思路就能想到的算法，也属于比较常规的方法了，我本来还以为有什么高级的方法，结果自己想不出来，看答案也]]></description><category></category></item><item><title><![CDATA[查找顺序表中第n/4小的元素]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121276862</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121276862</guid><author>Leemars1</author><pubDate>Thu, 11 Nov 2021 21:45:06 +0800</pubDate><description><![CDATA[查找第n/4小的元素
本题源于苏州大学872考研2014年真题：设整型元素组成的顺序线性表长度为n，设计一个尽可能高效的算法找出表中第n/4小的数据。
这种题乍一看觉得没有思路，很容易想到一种解题思路：排序后依次向后数n/4个节点即为所找节点，但是这种思路需要考虑到顺序表中出现重复元素的情况，讨论起来非常麻烦（因为我一开始就是这么想的….），以后遇到这种找大小的题，要充分利用当前已有的查找方法的特点和优点，结合题目来做题，毕竟出题也不能出一个你没见过的想都想不出来的算法吧…我觉得应该都是基本算法的改写，举一]]></description><category></category></item><item><title><![CDATA[求树的某一结点的深度]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121171225</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121171225</guid><author>Leemars1</author><pubDate>Fri, 05 Nov 2021 21:41:24 +0800</pubDate><description><![CDATA[求树的值为x的结点的深度
求树中的元素值为elem的节点的深度（假设树中元素各不相同）
算法思想：采用递归算法，每调用一次递归函数，使level++，设置判定条件，当(T-&gt;data==x)，将level值赋给depth。
1.二叉链表表示树
void Depth_Elem(BiTree T,int level,int *depth,ElemType elem){
	if(T!=NULL){
		level++;
		if(T-&gt;data==x) depth = level;//判定条件
	}
]]></description><category></category></item><item><title><![CDATA[满足奇数位为奇数或偶数位为偶数算法（二）]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121107789</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121107789</guid><author>Leemars1</author><pubDate>Tue, 02 Nov 2021 20:06:12 +0800</pubDate><description><![CDATA[苏大真题：给定一顺序线性表，使其满足奇数位为奇数或偶数位为偶数。
本题源于苏州大学872考研真题（2010.5）
给定一个整型元素组成的顺序线性表，设计一个高效的算法重新排列表中的元素，使得偶数位序的元素为偶数或者奇数位序的元素为奇数；即：使得这两个目标至少有一个能满足。
这次提供第二种思路，也是大家经常能想出来的思路。
算法思想：设置指针i、j，分别指向原表的奇偶元素，按照奇偶交替向后寻找，建立一个新表，将找到的元素依次赋到新表表尾。最后当循环完毕，即满足条件之后后，再将原表中未赋值的元素依次赋值到新表表]]></description><category></category></item><item><title><![CDATA[满足奇数位为奇数或偶数位为偶数算法]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121070308</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121070308</guid><author>Leemars1</author><pubDate>Sun, 31 Oct 2021 21:44:40 +0800</pubDate><description><![CDATA[苏大真题：给定一顺序线性表，使其满足奇数位为奇数或偶数位为偶数。
本题源于苏州大学872考研真题（2010.5）
给定一个整型元素组成的顺序线性表，设计一个高效的算法重新排列表中的元素，使得偶数位序的元素为偶数或者奇数位序的元素为奇数；即：使得这两个目标至少有一个能满足。
算法思想：设置两个指针i、j，分别指向该顺序表的奇偶位序的第一位，i指针向后寻找第一个奇数位序上的偶数（该过程也是检查奇数位上是否为奇数），j指针向后寻找第一个偶数位序上的奇数。若均存在，则交换两位元素，若任意指针越界，则返回（此时已满足]]></description><category></category></item><item><title><![CDATA[求给定的值所得新值的个数]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121043268</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121043268</guid><author>Leemars1</author><pubDate>Fri, 29 Oct 2021 21:39:17 +0800</pubDate><description><![CDATA[苏大真题：给定一个值，求出所有得到新值的个数
本题源于苏州大学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]]></description><category></category></item><item><title><![CDATA[不带头节点的单链表递归删除值为x的元素]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121021212</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121021212</guid><author>Leemars1</author><pubDate>Thu, 28 Oct 2021 19:33:08 +0800</pubDate><description><![CDATA[递归算法删除值为x的节点
本题为苏州大学872考研真题（2010.3），现与大家讨论。
方法一
void Delete_x(LinkList &amp;L,ElemType x){
	if(L==NULL)
		return;
	else if(L-&gt;data==x){
		p = L;
		L = L-&gt;next;
		free(p);
		Delete_x(L,x);
	}
	else
		Delete_x(L-&gt;next,x);
}

该方法存疑，当有且仅有第二个节点值为x，在第二层]]></description><category></category></item><item><title><![CDATA[数据结构 递归算法解决单链表成对逆置问题。]]></title><link>https://blog.youkuaiyun.com/Leemars1/article/details/121002356</link><guid>https://blog.youkuaiyun.com/Leemars1/article/details/121002356</guid><author>Leemars1</author><pubDate>Wed, 27 Oct 2021 21:35:04 +0800</pubDate><description><![CDATA[单链表成对逆置
关于苏州大学872考研中出现的单链表成对逆置问题。
LinkList D_Reverse(LinkList &amp;L){
	if(L==NULL||L-&gt;next==NULL)
		return L;
	LNode *p = L-&gt;next,*q = p-&gt;next;
	p-&gt;next = L;
	L-&gt;next = D_Reverse(q);
	return p;
}


...]]></description><category></category></item></channel></rss>