小白算法积累
aprilzj123
这个作者很懒,什么都没留下…
展开
-
小白算法积累——顺序查找1#“概率重心”前移
题目:线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:概率重心前移(学霸往前坐)即:若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索的结点尽量位于表的前端。试设计在顺序结构和链式结构的线性表上实现上述策略的顺序检索算法。关键字: 线性表顺序查找;概率重心前移;两种存储结构思路:检索时可以从表头开始向后顺序扫描,若找到指定的结点,则将该结点和前驱节点...原创 2020-05-05 17:30:26 · 639 阅读 · 0 评论 -
小白算法积累——折半查找1#折半查找+递归算法
题目:写出折半查找的递归算法。初始调用时,low为1,high为ST.Length关键字: 折半查找,递归算法思路:根据查找的起始位置和终止位置,将查找序列一分为二,判断所查找的关键字在哪一部分,然后用新的序列的起始位置和终止位置递归求解。首先,确定所需变量查找表ST,查找目标key,查找起始位置low 和查找终止位置high(因为本题使用递归算法,说明查找的起始位置和终止位置一直在递...原创 2020-05-05 17:03:29 · 2279 阅读 · 0 评论 -
小白算法积累——图的遍历4#邻接表+简单路径
题目:假设图用邻接表表示,设计一个算法,输出从顶点Vi到Vj的所有简单路径**关键字:**图,邻接表,简单路径**思路:**对于两个结点,他们的位置关系有且仅有两种:在同一层或者不在同一层。当在同一层时,(1)比较两者的父节点,若相同,则找到公共祖先;若不同,则比较两者父节点的父节点。当不在同一层时,对层数较高的那个结点逐渐取其父节点来减少层数,使得其层数和层数较低的那个结点相同。进...原创 2020-05-01 15:21:25 · 3102 阅读 · 4 评论 -
小白算法积累——图的遍历2#DFS,非递归算法,邻接表
题目:写出图的深度优先搜索算法DFS的非递归算法(图采用邻接表形式)**关键字:**图,DFS 非递归,邻接表思路:非递归算法:牺牲空间换取时间,所以新生成一个栈来存贮访问过的结点(也是下一步返回可能还要访问的结点)在深度优先搜索的非递归算法(non-recursion)中使用了一个栈S来记忆下一步可能访问的顶点,同时使用了一个访问标记数组visited[i]来记忆第i个顶点是否在栈内,若...原创 2020-05-01 11:34:00 · 541 阅读 · 1 评论 -
小白算法积累——图的遍历1#判断图是否为树
题目:试设计一个算法,判断一个无向图G是否为一棵树。若是一棵树,则返回true,否则返回false关键字:图 ; 树的判断思路:判断一个图G是否为树的条件有两个:1.G必须是无回路的连通图(无回路的判断有:DFS;拓扑排序;求关键路径失败)2.G是边为n-1的连通图后者代码简单,因此本题选择后者作为思路。首先,对连通的判定:思路:用能否仅一次调用遍历搜索即可完成遍历全部顶点来判定...原创 2020-05-01 09:59:32 · 1719 阅读 · 0 评论 -
小白算法积累——图的遍历3#DFS&BFS,邻接表,判断指定路径的存在
题目:已知一棵二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为 i 和 j 的两个结点最近的公共祖先结点的值。**关键字:**二叉树 顺序结构 查找公共祖先**思路:**对于两个结点,他们的位置关系有且仅有两种:在同一层或者不在同一层。当在同一层时,(1)比较两者的父节点,若相同,则找到公共祖先;若不同,则比较两者父节点的父节点。当不在同一层时,对层数较高的那个结点逐渐取其...原创 2020-04-11 22:26:09 · 845 阅读 · 0 评论 -
小白算法积累——队列4#无限膨胀存储空间
题目:请设计一个队列,要求满足:1、初始时队列为空;2、入队时,允许增加队列占用空间;3、出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;4、入队操作和出队操作的时间复杂度始终保持O(1)。请回答下列问题:1)该队列是应该选择链式存储结构,还是应选择顺序存储结构?2)画出队列的初始状态,并给出判断队空和队满的条件3)画出第一个元素入队后的队列状态。4)给出...原创 2020-03-02 19:56:33 · 692 阅读 · 0 评论 -
小白算法积累——队列和栈3#栈与队列的转化
题目:利用两个栈s1,s2,来模拟一个队列,已知栈的4个运算定义如下:Push(S,x);//元素x入栈Pop(S,x);//S出栈并将出栈的值赋给xStackEmpty(S);//判断栈是否为空StackOverflow(S);//判断栈是否满如何利用栈的运算来实现该队列的3个运算(形参由读者根据要求自己设计)|Enqueue;//将元...原创 2020-03-02 15:37:01 · 196 阅读 · 0 评论 -
小白算法积累——队列和栈2#快速逆置
题目:Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法。关键字:逆置思路 :将队列中的元素输出,然后输入栈,输入完毕之后,再从栈中输出,得到逆置的结果。原理:栈是先进后出,所以输入元素可以实行“逆置输出”1)需要变量:链表L,链表的长度n,遍历工作指针p;字符栈S[n/2], 进栈小助手 i ;2)在处理链表的后一半元素时,当访问到链表的一个元素后,就从栈中弹出一个...原创 2020-03-02 14:23:56 · 1216 阅读 · 0 评论 -
小白算法积累———队列1#循环队列+tag
题目:若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队和出队算法。关键字:循环队列+tag的使用思路 :循环队列:需要变量:队头指针front,队尾指针rear,增减元素的开关:tag1)入队算法尾插法2)出队算法头结点删除注意:当删除之后链...原创 2020-03-02 14:06:05 · 2528 阅读 · 3 评论 -
小白算法积累——栈2#共享栈+栈顶相向+迎面增长
题目:设有两个栈s1,s2都采用顺序栈方式,并共享一个存储区[0,…,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式。试设计s1,s2,有关入栈和出栈的操作算法。关键字:共享栈+栈顶相向+迎面增长思路 :两个栈共享向量空间,将两个栈的栈底设在向量两端,初始时,s1栈顶指针为-1,s2栈顶指针为maxsize。两个栈顶指针相邻时为栈满。两个栈顶...原创 2020-02-24 23:54:54 · 1582 阅读 · 0 评论 -
小白算法积累——单链表26#中心对称判断
题目:设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型。试设计算法判断该链表的全部n个字符是否中心对称。例如xyx,xyyx,都是中心对称。关键字:单链表+中心对称判断思路 :使用栈来判断链表中的数据是否中心对称。原理:栈是先进后出,所以前一半链表中元素可以实行“逆置输出”,此时和后一半元素进行比较,可以判断中心对称性1)让链表的前一半元素一次进栈...原创 2020-02-24 22:13:38 · 2913 阅读 · 0 评论 -
小白算法积累——栈1#判断合法操作序列
题目:I:入栈,O:出栈。写出一个算法,判定所给的操作序列是否合法。合法要求:栈的初态和终态均为空。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)关键字:判断入栈出栈操作序列是否合法思路 :入栈:无论多少次,只要内存足够,就可以进行#限制:内存足够出栈:必须保证栈非空才能进行出栈操作#限制:栈非空,即每时每刻,出栈的总次数都应小于等于入栈的总次数终态...原创 2020-02-24 16:44:47 · 1073 阅读 · 0 评论 -
小白算法积累——单链表25#带头结点单链表+穿插+逆置
题目:设线性表L=(a1,a2,a3,…an-2,an-1,an)采用带头结点的单链表保存,链表中的结点定义如下:typedef struct node{ int data;struct node*next}Node;请设计一个空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的各结点,得到线性表L’=(a1,an,a2,an-1,a3,an-2…)关键字:带头结点单链表+...原创 2020-02-22 14:42:19 · 2920 阅读 · 2 评论 -
小白算法积累——单链表24#单链表+判断循环
题目:设计一个算法完成以下功能:判断一个链表是否有环,如果有,找出环的入口点并返回。否则返回NULL关键字:单链表+判断循环思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要变量:L, 相对头尾结点下...原创 2020-02-22 00:58:31 · 229 阅读 · 0 评论 -
小白算法积累——单链表23#带头结点单链表+删除绝对值相同的结点
题目:用单链表保存m个整数,结点的结构为【data】【link】,且|data|<=n(n为正整数)。现要求设计一个时间复杂度尽可能高效的算法,对于链表中data的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如,若给定的单链表head如下:关键字:带头结点单链表+删除绝对值相同的结点思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部...原创 2020-02-21 19:55:10 · 1773 阅读 · 0 评论 -
小白算法积累——单链表22#2个带头结点单链表+查找共同后缀
题目:假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,可共享相同的后缀存储空间,例如,“loading”,“being”的存储映像如下图所示。设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为datanext请设计一个时间上尽可能高效的算法,找出由str1和str2所指向两个链表共同后缀的起始位置(如图中字符i所在结点的位置p)关键字:2个带...原创 2020-02-21 18:46:57 · 1971 阅读 · 1 评论 -
小白算法积累——单链表21#带头结点单链表+倒数查找
题目:已知一个带有表头结点的单链表,结点结构为data|link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data域的值,并返回1;否则,只返回0。关键字:带头结点单链表+倒数查找思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(...原创 2020-02-21 16:23:35 · 878 阅读 · 0 评论 -
小白算法积累——单链表20#带头结点双链表+统计访问频度+按度&访问先后排序
题目:设头指针为L的带有表头结点的非循环双向循环链表,其每个结点中除有pred(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被启用前,其值均初始化为0。每当在链表中进行一Locate(L,x),运算时,令元素值为x的结点中freq域的值+1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点前面,以便使频繁访问...原创 2020-02-21 13:58:42 · 840 阅读 · 0 评论 -
小白算法积累——单链表19#带头结点循环单链表+循环删除最小值
题目:设有一个带头结点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点删除,直到单链表为空为止,再删除头结点。关键字:带头结点单链表 +循环删除最小值思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,...原创 2020-02-21 00:31:42 · 987 阅读 · 2 评论 -
小白算法积累——单链表18#2个循环单链表+合并
题目:有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2链接到h1之后,要求链接后的链表仍保持循环链表形式。关键字:合并两个循环链表思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要...原创 2020-02-20 23:58:01 · 275 阅读 · 0 评论 -
小白算法积累——双链表17#带头结点的循环双链表+判断对称
题目:设计一个算法用于判断带头结点的循环双链表是否对称关键字:带头结点的循环双链表+判断对称思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要变量:L, 相对头尾结点下标:from, to逆置截止结...原创 2020-02-20 23:23:50 · 941 阅读 · 1 评论 -
小白算法积累——单链表16#2个不带头结点单链表+判断子序列
题目:两个整数序列A=a1,a2,a3…am和b1,b2,b3。。。bn已经存入两个单链表中,设计一个算法,判断序列B是否为序列A的连续子序列。关键字:2个带头结点单链表+判断子序列思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函...原创 2020-02-20 18:59:35 · 768 阅读 · 0 评论 -
小白算法积累——单链表15#2个带头结点单链表+提取公共元素+二表合一
题目:已知两个链表A和B分别表示两个集合,其元素递增排列。编制函数,求A与B的交集,并存放于A链表中。关键字:2个带头结点单链表+提取公共元素+取代原表思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需...原创 2020-02-20 16:17:13 · 394 阅读 · 0 评论 -
小白算法积累——单链表14#带头结点单链表+提取公共节点+建立新表
题目:设A和B是两个单链表(带头结点),其中元素递增有序,设计一个算法从A和B中的公共元素产生单链表C,要求不破坏A,B的结点。关键字:有序带头结点单链表 + 提取公共节点思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循...原创 2020-02-19 16:48:02 · 301 阅读 · 0 评论 -
小白算法积累——单链表13#带头结点单链表+就地归并+改序
题目:假设有两个按元素值递增次序排列的线性表,均以单链表的形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。关键字:带头结点单链表 + 就地归并 + 改序思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有...原创 2020-02-19 16:00:01 · 501 阅读 · 0 评论 -
小白算法积累——单链表12#有序带头结点单链表+删除重复元素
题目:在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素,例如(7,10,10,21,30,42,42,42,51,70)将变为(7,10,21,30,42,51,70)关键字:递增有序+单链表+删除重复元素思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L...原创 2020-02-19 12:58:06 · 1149 阅读 · 0 评论 -
小白算法积累——单链表11#带头结点单链表 +分解+逆序
题目:设C={a1,b1,a2,b2,…an,bn}为线性表,采用带头结点的hc单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A={a1,a2,…an},B={bn,bn-1,…b2,b1}关键字:带头结点单链表 +分解+逆序思路1采用第10题的思路,借助访问序号小助手思路2不使用序号小助手while循环中的代码改为将结点插入到表A中并将下一个结点插入到B中,然后逐步循...原创 2020-02-19 11:02:36 · 651 阅读 · 1 评论 -
小白算法积累——单链表10#带头结点单链表+奇偶位分解
题目:将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。关键字:带头结点单链表+分解思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用...原创 2020-02-18 23:35:00 · 702 阅读 · 0 评论 -
小白算法积累——单链表9#带表头结点单链表+按值的递增顺序操作
题目:给定一个带表头结点的单链表,设head为头指针,结点结构为(data,next),data为整型数据,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。(要求:不允许使用数组作为辅助空间)。关键字:带头结点的单链表+按序输出思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为...原创 2020-02-18 21:46:24 · 1140 阅读 · 0 评论 -
小白算法积累——单链表8#两个单链表的公共节点
题目:给定两个单链表,编写算法找出两个链表的公共结点关键字:两个链表+查找公共节点思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要变量:L, 相对头尾结点下标:from, to逆置截止结点下标:&...原创 2020-02-18 21:03:45 · 905 阅读 · 1 评论 -
小白算法积累——单链表1#不带头结点+按值删除+递归工作栈
题目:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。关键字:递归算法+不带头结点的单链表+按值删除思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要变量:L, 相对头尾结点下标:fro...原创 2020-02-16 20:53:26 · 607 阅读 · 0 评论 -
小白算法积累——单链表4#带头结点+最小值删除
题目:试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点是唯一的)关键字:带头结点的单链表+最小值删除思路关注:递归算法的设计重点在于找到“递归”的部分,即重复调用函数,改变部分相关变量设f(L,x)的功能是:删除以L为首结点指针的单链表中所有值等于x的结点,显然有f(L->next,x)1.通用逆置函数:遍历循环+头尾元素互换需要变量:L, 相对头尾结点下...原创 2020-02-16 20:36:46 · 1028 阅读 · 0 评论 -
小白算法积累——顺序表13#顺序表/数组+查找未出现的最小正整数
题目:给定一个含n(n>=1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4。关键字顺序表 查找未出现的最小正整数思路关注:1.因为要求时间上尽可能高效,所以采用“空间换时间”的办法(开辟新空间来存放有关新数组)2.关注造成最终结果产生变化的影响因素...原创 2020-02-16 19:33:07 · 1012 阅读 · 0 评论 -
小白算法积累——顺序表1 删除最小值+调取表尾元素
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。关键字:顺序表, 删除最小值,调取思路:1.搜索整个顺序表,查找最小值元素并记住其位置需要变量:计数小助手i,存放最终最小值pos,过程中存放较小值value2.搜索结束后用最后一个元素填补空出的原来最小值元素的位置需要变量:数组下标length...原创 2020-02-14 18:57:18 · 494 阅读 · 0 评论 -
小白算法积累——顺序表4#有序顺序表 +删除某范围内元素
题目:从有序顺序表中删除其值在给定值s与t(要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。关键字有序顺序表 删除某范围内的所有元素思路关注:因为是有序表,所有删除的元素必然是相连的整体1.寻找值>=s的第一个元素(第一个将被删除的元素)需要变量:存储第一个被删元素的下标i2.寻找>tt的第一个元素(删除截止的元素/最后一个被删除的元...原创 2020-02-15 00:34:27 · 612 阅读 · 0 评论 -
小白算法积累——顺序表2#逆置
题目:设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)关键字:顺序表,逆置思路:1.两两一对,头尾互换需要变量:data[i] 和data[n-1-i]互为一对互换小助手temp2.互换操作只需要进行到中间位置需要范围:n/2void Reverse(Sqlist &L){ ElemType temp; for (i=0;i<L....原创 2020-02-14 19:23:41 · 269 阅读 · 0 评论