全部题库 / 计算机 / 试题详情
简答题 计算机
2013-09-28

(13 分)假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,
例如,“loading”和“being”的存储映像如下图所示。


设 str1 和 str2 分别指向两个单词所在单链表的头结点,链表结点结构为
,请设计一个时间上尽 可能高效的算法,找出由 str1 和 str2 所指向两个链表共同后缀的起始位置(如图中字符 i 所在结点的位置 p)。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++或 JAVA 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度。

参考答案

暂无

答案解析

(1)算法思想:顺序遍历两个链表到尾结点时,并不能保证两个链表同时到达尾结点。这是因为两个链表的长度不同。假设一个链表比另一个链表长 k 个结点,我们先在长链表上遍历 k 个结点,之后同步遍历两个链表。这样我们就能够保证它们同时到达最后一个结点了。由于两个链表从第一个公共结点到链表的尾结点都是重合的。所以它们肯定同时到达第一个公共结点。于是得到算法思路:
① 遍历两个链表求的它们的长度 L1,L2;
② 比较 L1,L2,找出较长的链表,并求 L=|L1-L2|;
③ 先遍历长链表的 L 各结点;
④ 同步遍历两个链表,直至找到相同结点或链表结束。
(2)算法的 C 语言代码描述
LinkList Search_First_Common(LinkList L1,LinkList L2){
//本算法实现线性时间内找到两个单链表的第一个公共结点
int len1=Length(L1);,len2=Length(L2);
LinkList longList,shortlist;//分别指向较长和较短的链表
if(len1>len2){
longList=L1->next;
shortlist=L2->next;
L=len1-len2;//表长之差
}
else{
longList=L2->next;
shortlist=L1->next;
L=len2-len1;//表长之差
}
While(L--)
longList=longList->next;
while(longList!=NULL){
if(longList==shortList)//同步寻找共同结点
return longList;
else{
longList=longList->next;
shortlist=shortlist->next;
}
}//while
return NULL;
}
(3)算法的时间复杂度为 O(len1+len2),空间复杂度为 O(1)。

你可能感兴趣的试题

2 (12 分)某 16 位计算机中,带符号整数用补码表示,数据 Cache 和指令 Cache 分离。题 44 表给出了指令系统 中部分指令格式,其中 Rs 和 Rd 表示寄存器,mem 表示存储单元地址,(x)表示寄存器 x 或存储单元 x 的内容。
题 44 表指令系统中部分指令格式

名称

指令的汇编格式

指令功能

加法指令

ADD Rs,Rd

(Rs)+(Rd)->Rd

算术/逻辑左移

SHL Rd

2*(Rd)->Rd

算术右移

SHR Rd

(Rd)/2->Rd

取数指令

LOAD Rd,mem

(mem)->Rd

存数指令

STORE Rs,mem

Rs->(mem)


该计算机采用 5 段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地 址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用“按序发射,按序完成”方式,没有采用转发
技术处理数据相关,并且同一寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。
(1)若 int 型变量 x 的值为-513,存放在寄存器 R1 中,则执行“SHL R1”后,R1 中的内容是多少?(用十六进制表 示)
(2)若在某个时间段中,有连续的 4 条指令进入流水线,在其执行过程中没有发生任何阻塞,则执行这 4 条指令 所需的时钟周期数为多少?
(3)若高级语言程序中某赋值语句为 x=a+b,x、a 和 b 均为 int 型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流中的执行过程如题 44 图所示。
 
则这 4 条指令执行过程中 I3 的 ID 段和 I4 的 IF 段被阻塞的原因各是什么?
(4)若高级语言程序中某赋值语句为 x=x*2+a,x 和 a 均为 unsigned int 类型变量,它们的存储单元地址分别表示 为[x]、[a],则执行这条语句至少需要多少个时钟周期?要求模仿题 44 图画出这条语句对应的指令序列及其在流水 线中的执行过程示意图。