- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
程序员分类模拟题数据结构与算法(四)
试题一
阅读以下说明和流程图,填补流程图中的空缺。
[说明]
已知数组A[1:n]中各个元素的值都是非零整数,其中有些元素的值是相同的(重复)。为删除其
中重复的值,可先通过以下流程图找出所有的重复值,并对所有重复值赋0标记之。该流程图采用了
双重循环。
处理思路:如果数组A某个元素的值在前面曾出现过,则该元素赋标记值0。例如,假设数组A
的各元素之值依次为2,5,5,1,2,5,3,则经过该流程图处理后,各元素之值依次为2,5,0,
1,0,0,3。
[流程图]
试题二
阅读以下说明和C函数,填补C函数中的空缺。
[说明]
函数SetDiff(LA,LB.的功能是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与LB
不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针。
例如,单链表LA、LB的示例如图中的(a)、(b)所示,删除与LB共有的元素后的LA如图中的(c)
所示。
链表的结点类型定义如下:
typedefstructNode{
intdata;
structNode*next;
}Node,*LinkList;
函数SetDiff(LinkListLA,LinkListLB.的处理思路如下:
6从LA的第一个元素结点开始,令LA的第一个元素为当前元素;
7在LB中进行顺序查找,查找与LA的当前元素相同者,方法是:令LA的当前元素先与LB的第一
个元素进行比较,若相等,则结束在LB中的查找过程,否则继续与LB的下一个元素比较,重复以上
过程,直到LB中的某一个元素与LA的当前元素相等(表明查找成功),或者到达LB的表尾(表明查找
失败)为止;
8结束在LB表的一次查找后,若在LB中发现了与LA的当前元素相同者,则删除LA的当前元素,
否则,保留LA的当前元素;
9取LA的下一个元素为当前元素,重复7、8,直到LA的表尾。
[C函数]
voidSetDiff(LinkListLA,LinkListLB.
{
LinkListpre,pa,pb;
/*pa用于指向单链表LA的当前元素结点,pre指向pa所指元素的前驱*/
/*pb用于指向单链表LB的元素结点*/
______;/*开始时令pa指向LA的第一个元素*/
pre=LA;
while(pa){
pb=LB->next;
/*在LB中查找与LA的当前元素相同者,直到找到或者到达表尾*/
while(______){
if(pa->data==pb->data)
break;
______;
}
if(!pb){
/*若在LB中没有找到与LA中当前元素相同者,则继续考察LA的后续元素*/
pre=pa;
pa=pa->next;
}
else{
/*若在LB中找到与LA的当前元素相同者,则删除LA的当前元素*/
pre->next=______;
free(pa);
pa=______;
}
}
}
试题三
阅读以下说明和流程图,填补流程图中的空缺。
[说明]
本流程图用于计算菲波那契数列{a1=1,a2=1,an=an-1+an-2,|n=3,4,...}的前n项(n≥2)
之和S。例如,菲波那契数列前6项之和为20。计算过程中,当前项之前的两项分别动态地保存在变
量A和B中。
[流程图]
试题四
阅读以下说明和C函数,填充函数中的空缺。
[说明]
函数Insert_key(*root,key)的功能是将键值key插入到*root指向根结点的二叉查找树
中(二叉查找树为空时*root为空指针)。若给定的二叉查找树中已经包含键值为key的结点,则不进
行插入操作并返回0;
文档评论(0)