李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(串)

合集下载

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(线性表)

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(线性表)
(10)以下关于链表的叙述中,不正确的是______。 A.结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构 B.逻辑上相邻的元素物理上不必相邻 C.可以通过计算直接确定第 i 个结点的存储地址 D.插入、删除运算操作方便,不必移动结点 【答案】C 【解析】链表每个元素的存储地址是随机分配的,通过指针相连接,因此不能通过结算 直接缺点第 i 个结点的位置。
项;插入和删除操作不需要移动元素,则必须采取链表存储结构。
(12)不带头结点的单链表 head 为空的判定条件是______。 A.head=NULL B.head->next=NULL C.head->nex=head D.head!=NULL 【答案】A 【解析】由于单链表不带有头结点,其头指针所指向的元素即为第一个元素,因此只要 判断头指针指向元素为 NULL 即可知链表为空。
3 / 29
圣才电子书 十万种考研考证电子书、题库视频学习平台

杂,也不能实现随机读取元素,同时存储密度较低因而浪费存储空间。
(7)当线性表采用链表存储时,其存放元素的单元地址______。 A.必须是连续的 B.一定是不连续的 C.部分地址必须是连续的 D.连续与否均可以 【答案】D 【解析】线性表的采用链表存储,用指针记录对应元素的位置,对元素的存储位置没有 任何要求。
(13)某线性表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点, 故采用______存储方式最节省运算时间。
2 / 29
圣才电子书

为 Ο(n),D 项错误。
十万种考研考证电子书、题库视频学习平台
(5)将两个各有 n 个元素的递增有序顺序表归并成一个有序顺序表,其最少的比较次 数是______。

数据结构教程李春葆课后答案第4章串

数据结构教程李春葆课后答案第4章串

8. 采用顺序结构存储串,设计一个实现串通配符匹配的算法 pattern_index(),其中的 通配符只有‘?’ ,它可以和任一个字符匹配成功。例如,pattern_index("?re","there are") 返回的结果是 2。 解:采用 BF 算法的穷举法的思路,只需要增加对‘?’字符的处理功能。对应的算法 如下:
void maxsubstr(SqString s,SqString &t) { int maxi=0,maxlen=0,len,i,j,k; i=0; while (i<s.length) //从下标为 i 的字符开始 { j=i+1; //从 i 的下一个位置开始找重复子串 while (j<s.length) { if (s.data[i]==s.data[j]) //找一个子串,其起始下标为 i,长度为 len { len=1; for(k=1;s.data[i+k]==s.data[j+k];k++) len++; if (len>maxlen) //将较大长度者赋给 maxi 与 maxlen { maxi=i; maxlen=len; } j+=len; } else j++; } i++; //继续扫描第 i 字符之后的字符 } t.length=maxlen; //将最长重复子串赋给 t for (i=0;i<maxlen;i++) t.data[i]=s.data[maxi+i]; }
SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0;i<s1.length;i++) { for (j=0;j<s2.length;j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; }

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

李春葆《数据结构教程》(第4版)课后习题-串(圣才出品)

第4章串1.采用顺序结构存储串,编写一个实现串通配符匹配的算法pattern______index(),其中的通配符只有“?”,它可以和任一字符匹配成功,例如,pattern______index(″? re″,″there are″)返回的结果是2。

答:本题的基础是Brute—Force模式匹配算法,只是增加了“?”的处理功能。

对应的算法如下:2.有两个串s1和s2,设计一个算法求这样一个串,该串中的字符是s1和s2中的公共字符。

答:扫描s1,对于当前字符s1.data[i],若在s2中,则将其加入到串s3中。

最后返回s3串。

对应的算法如下:3.设目标为t=’abcaabbabcabaacbacba’,模式p=’abcabaa’。

(1)计算模式P的nextval函数值。

(2)不写算法,只画出利用KMP算法进行模式匹配时的每一趟匹配过程。

答:(1)先计算next数组,在此基础上求nextval数组,如表4-1所示。

表4-1 计算next数组和nextval数组(2)采用KMP算法求子串位置的过程如下(开始时i=0,j=0):第1趟匹配:此时i=4,j=4,匹配失败,而nextval[4]=0,则i=4,j=nextval[4]=0,即:第2趟匹配:此时i=6,j=2,匹配失败,而nextval[2]=0,则i=6,j=nextval[2]=0,即:第3趟匹配:此时i=6,j=0,匹配失败,而nextval[0]=-1,则i=6,j=nextval[0]=-1。

因j=-1,执行i=i+1=7,j=j+1=0,即:第4趟匹配:此时i=14,j=7,匹配成功,返回v=i-t.1ength=14-7=7。

上机实验题4实验题1编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp完成如下功能:(1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″;(2)输出串s;(3)输出串s的长度;(4)在串s的第9个字符位置插入串s1而产生串s2;(5)输出串s2;(6)删除串s第2个字符开始的5个字符而产生串s2;(7)输出串s2;(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;(9)输出串s2;(10)提取串s的第2个字符开始的10个字符而产生串s3;(11)输出串s3;(12)将串s1和串s2连接起来而产生串s4;(13)输出串s4。

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(外排序)

李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(外排序)

第10章外排序一、单项选择题(1)以下关于外排序的叙述正确的是______。

A.外排序把外存文件调入内存,再利用内排序方法进行排序,所以外排序所花的时间完全由采用的内排序确定B.外排序所花的时间=内排序时间+外存信息读/写时间+内部归并所花的时间C.外排序并不涉及文件的读/写操作D.外排序完全可以由内排序来替代【答案】B【解析】外排序所花的时间由内排序时间、外存读写时间、内部归并时间三部分时间构成,因此AC两项错误,B项正确;外排序要将文件读取到内存中进行排序,但是由于文件大小可能会大于内存的最大容量,因此外排序不能完全由内排序替代。

(2)如果将一个由置换-选择排序得到的输出文件F1(含所有初始归并段)作为输入文件再次进行置换-选择排序,得到输出文件F2(含所有初始归并段),则F1和F2的差异是______。

A.F2中归并段的个数减少B.F2中归并段的最大长度增大C.F2和F1无差异D .归并段个数及各归并段长度均不变,但F 2中可能存在与F 1不同的归并段【答案】C 【解析】当进行一次置换-选择排序后,文件的归并段即达到理想状态,无论再进行多少次排序,均不会发生变化,因此答案为C 项。

(3)采用败者树进行k 路平衡归并的外排序算法,其总的归并效率与k______。

A .有关B .无关【答案】A【解析】利用败者树进行k 路平衡归并不会影响总共需要的关键字比较次数,但是随着k 的增大,归并树的高度会减小,磁盘读/写的次数也就相应减少,从而提高总的归并效率,因此答案为A 项。

(4)对m 个初始归并段实施k 路平衡归并排序,所需的归并趟数是______。

A .1B .m/kC ./m k ⎡⎤⎢⎥D .log k m ⎡⎤⎢⎥【答案】D【解析】采用k 路归并,相应的归并树就有log k m ⎡⎤⎢⎥+1层,则需要归并的趟数为log k m ⎡⎤⎢⎥,答案为D 项。

(5)设有100个初始归并段,如果采用k 路平衡归并3趟完成排序,则k 值最小是______。

数据结构教程李春葆课后答案第10章内排序

数据结构教程李春葆课后答案第10章内排序

2 else d=d/3; } }
数据结构教程学习指导
(1)指出fun(a,n)算法的功能。 (2)当a[]={5,1,3,6,2,7,4,8}时,问fun(a,8)共执行几趟排序,各趟的排序 结果是什么? 答:(1)fun(a,n)算法的功能是采用增量递减为1/3的希尔排序方法对a数组中元素进 行递增排序。 (2)当a[]={5,1,3,6,2,7,4,8}时,执行fun(a,8)的过程如下: d=2:2 1 3 6 4 7 5 8 d=1:1 2 3 4 5 6 7 8 共有两趟排序。 4. 在实现快速排序的非递归算法时,可根据基准元素,将待排序序列划分为两个子 序列。若下一趟首先对较短的子序列进行排序,试证明在此做法下,快速排序所需要的栈 的深度为 O(log2n)。 答:由快速排序的算法可知,所需递归工作栈的深度取决于所需划分的最大次数。在 排序过程中每次划分都把整个待排序序列根据基准元素划分为左、右两个子序列,然后对 这两个子序列进行类似的处理。 设S(n)为对n个记录进行快速排序时平均所需栈的深度, 则: S(n)=
KeyType QuickSelect(RecType R[],int s,int t,int k) //在 R[s..t]序列中找第 k 小的元素 { int i=s,j=t; RecType tmp; if (s<t) //区间内至少存在 2 个元素的情况 { tmp=R[s]; //用区间的第 1 个记录作为基准 while (i!=j) //从区间两端交替向中间扫描,直至 i=j 为止 { while (j>i && R[j].key>=tmp.key) j--; //从右向左扫描,找第 1 个关键字小于 tmp 的 R[j] R[i]=R[j]; //将 R[j]前移到 R[i]的位置 while (i<j && R[i].key<=tmp.key) i++; //从左向右扫描,找第 1 个关键字大于 tmp 的 R[i] R[j]=R[i]; //将 R[i]后移到 R[j]的位置 } R[i]=tmp; if (k-1==i) return R[i].key; else if (k-1<i) return QuickSelect(R,s,i-1,k); //在左区间中递归查找 else return QuickSelect(R,i+1,t,k); //在右区间中递&& s==k-1) return R[k-1].key; else return -1; }

数据结构教程李春葆课后答案第6章数组和广义表

数据结构教程李春葆课后答案第6章数组和广义表
答:对于上三角部分或者主对角中的元素 A[i][j(] i≤j),按列为主序存储时,前面有 0~ j-1 共 j 列,第 0 列有 1 个元素,第 1 列有 2 个元素,…,第 j-1 列有 j 个元素,所以这 j 列的元素个数=1+2+…+j=j(j+1)/2;在第 j 列中,A[i][j]元素前有 A[0..i-1,j]共 i 个元素。所 以 A[i][j]元素前有 j(j+1)/2+i 个元素,而 B 的下标从 0 开始,所以 A[i][j]在 B 中的位置 k=j(j+1)/2+i。
int length; }
//元素值 //重复元素的个数
如数组 A[]={1,1,1,5,5,5,5,3,3,3,3,4,4,4,4,4,4},共有 17 个元 素,对应的压缩存储 B 为:{1,3},{5,4},{3,4},{4,6}}。从中看出,如果重复元素 越多,采用这种压缩存储方式越节省存储空间。
6. 利用三元组存储任意稀疏数组 A 时,假设其中一个元素和一个整数占用的存储空间 相同,问在什么条件下才能节省存储空间。
答:设稀疏矩阵 A 有 t 个非零元素,加上行数 rows、列数 cols 和非零元素个数 nums (也算一个三元组),那么三元组顺序表的存储空间总数为 3(t+1),若用二维数组存储时占 用存储空间总数为 m×n,只有当 3(t+1)<m×n 即 t<m×n/3-1 时,采用三元组存储才能节省存 储空间。
解:对于稀疏矩阵三元组表 a,从 a.data[0]开始查看,若其行号等于列号,表示是一
个对角线上的元素,则进行累加,最后返回累加值。算法如下:
bool diagonal(TSMatrix a,ElemType &sum)

李春葆《数据结构教程》(C++语言描述)课后习题(第9~11章)【圣才出品】

李春葆《数据结构教程》(C++语言描述)课后习题(第9~11章)【圣才出品】
(6)有一组数据{15,9,7,8,20,-1,7,4},用堆排序的筛选方法建立的初始堆 为______。
A.{-1,4,8,9,20,7,15,7} B.{-1,7,15,7,4,8,20,9} C.{-1,4,7,8,20,15,7,9} D.以上都不对 【答案】C 【解析】按照堆排序的筛选方法建立的初始堆必然满足堆的特点,且第一个元素为最大 (堆为大根堆时)或最小(堆为小根堆时)的元素,由这一特点可知,AB 项错误,而 C 项 满足条件,因此答案为 C 项。
不正确,因此至少需要进行的趟数是 5,答案为 C 项。
(8)对 8 个元素的顺序表进行快速排序,在最好情况下,元素之间的比较次数为______ 次。
A.7 B.8 C.12 D.13 【答案】D 【解析】当元素随机排序时,且每次选取参考元素均为其中值时,快速排序呈现最好的 状况。在 8 个元素的情况下,设这 8 个元素为 0-7,则比较 7 次的元素为 4,比较 3 次的元 素为 2,比较 2 次的元素为 6,比较 1 次的元素为 1,其余各元素在以其他元素为基准进行 比较时位置已经确定,因此需要进行比较的次数为:7+3+2+1=13,答案为 D 项。
(10)数据序列{3,2,4,1,5,6,8,7}是第一趟递增排序后的结果,则采用的排 序方法可能是______。
A.快速排序 B.冒泡排序 C.堆排序 D.简单选择排序 【答案】A 【解析】从得到的序列可以看出,元素 5 被正确归位,且其之前的元素均比其小,之 后的元素均比其大,满足快速排序的特点,因此 A 项是有可能的。BCD 三项均会产生全局 有序区,与已知序列不符,因此答案为 A 项。
(11)以下关于快速排序的叙述正确的是______。 A.快速排序在所有排序方法中最快,而且所需辅助空间最少 B.在快速排序中,不可以用队列替代栈

数据结构教程李春葆课后答案 图

数据结构教程李春葆课后答案 图
(3)对于邻接矩阵表示的无向图,顶点i的度等于第i行中元素为1的个数;对于邻接矩 阵表示的有向图,顶点i的出度等于第i行中元素为1的个数,入度等于第i列中元素为1的个 数,顶点i度等于它们之和。
对于邻接表G表示的无向图,顶点i的度等于G->adjlist[i]为头结点的单链表中边表结点 个数。
对于邻接表G表示的有向图,顶点i的出度等于G->adjlist[i]为头结点的单链表中边表结 点的个数;入度需要遍历所有的边结点,若G->adjlist[j]为头结点的单链表中存在编号为i 的边结点,则顶点i的入度增1,顶点i的度等于入度和出度之和。
4
数据结构教程学习指导
中。因为在采用Kruskal算法构造最小生成树时,选择这3条权最小的边加入时,有可能出 现回路。例如,如图8.5所示的带权无向图,有3条边的权均为1,它们一定不会同时都出现 在其任何最小生成树中。
1 1
1 0
1
3
3 2
图 8.5 一个带权无向图
8. 对于如图8.6所示的带权有向图,采用Dijkstra算法求出从顶点0到其他各顶点的最短 路径及其长度,要求给出求解过程。
0
0
1
2
4
5
1
2
4
5
6
3
6
(a) 一个有向图
3 (b) 3 个强连通分量
图 8.2 一个有向图及其强连通分量
3. 对于稠密图和稀疏图,采用邻接矩阵和邻接表哪个更好些? 答:邻接矩阵适合于稠密图,因为邻接矩阵占用的存储空间与边数无关。邻接表适合 于稀疏图,因为邻接表占用的存储空间与边数有关。
4. 对 n 个顶点的无向图和有向图(均为不带权图),采用邻接矩阵和邻接表表示时, 如何求解以下问题:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{
i=ch-'A'+10;
num[i]++;
}
}
(2)设计一个算法,将一个链串 S 中的所有子串”abc”删除。 答: String deleteabc(String S) {
String t=’abc’; String nstr; int i=0,j=0,k=0;
6 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台
(2)以下______是“abcd32lABCD”串的子串。 A.abcd B.B21AB C.”abcABC” D.“21AB” 【答案】D 【解析】串需要用引号引起来,没有引号的只是字符的罗列而不是串,因此 AB 项错误; 由在一个串中由任意连续的字符组成的子序列称为该串的子串可知,C 项中字符串并不包含
②对于模式串 t(t=t0t1…tm-1),求 next 数组时,next[i]在什么条件下取-1。 答:当 i=0 时,即 next[0]=-1。
(4)设目标串为 s=“abcaabbcaaabababaabca”,模式串为 p=“babab”。 ①计算模式 P 的 答:-1,0,1,2,0。 ②不写算法,只画出利用 KMP 算法进行模式匹配时的每一趟的匹配过程。
二、问答题 (1)若 s1 和 s2 为串,给出使 s1//s2=s2//s1 成立的所有可能的条件(其中,“//” 表示两个串连接的运算符)。 答:①s1 和 s2 之中至少有一个为空串 ②s1 和 s2 的值相等 ③s1 和 s2 之中某一个串可由另一个串经过重复得到。
3 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台
1 / 11
圣才电子书 十万种考研考证电子书、题库视频学习平台

于主串中,因此答案为 D 项。
(3)对于一个链串 s,查找第一个元素值为 x 的算法的时间复杂度为______。 A.O(1) B.O(n) C.O(n2) D.以上都不对 【答案】B 【解析】在链串中按值查找元素时,最坏的情况是每一个元素都需要从头开始逐一查找, 因此其时间复杂度为 O(n),B 项正确。

(2)在 KMP 算法中计算模式串的 next,当 j=0 时,为什么要取 next[0]=-1? 答:若将 next[0]的值设置为 0,由于在 KMP 算法中匹配失败进行回溯时,要回溯到 next[ j]=j 的位置,则每一次回溯都会回溯到 next[0]处,这样使得 KMP 算法失去了其意义, 因此要取 next[0]=-1;
5 / 11
圣才电子书

num[i]=0;
十万种考研考证电子书、题库视频学习平台
while((ch=getchar()))
{
if(('0'<=ch)&&(ch<='9'))
{
i=ch-'0';
num[i]++;
}
else if(('A'<= ch)&&(ch <='Z'))
(5)设有两个串 p 和 q,求 q 在 p 中首次出现的位置的运算称作______。 A.连接
2 / 11
圣才电子书

B.模式匹配
十万种考研
【答案】B
【解析】由模式匹配的定义可知,这种操作叫做模式匹配。
(6)已知 t=“abcaabbcabcaabdab”,该模式串的 next 数组值为______。 A.-1,0,0,0,1,1,2,0,0,1,2,3,4,5,6,0,1 B.0,1,0,0,1,1,2,0,0,1,2,3,4,5,6,0,1 C.-1,0,0,0,1,1,2,0,0,1,2,3,4,5,6,7,1 D.-1,0,0,0,1,1,2,3,0,1,2,3,4,5,6,0,1 【答案】A 【解析】next 数组中存放的值为该模式串每个字符的部分匹配信息,即每一个字符前 有多少个字符与模式串开始的字符相同,由此定义可知,该模式串的 next 数组值应为 A 项。
(3)在串的模式匹配中,KMP 匹配算法是有用的办法,回答以下问题: ①KMP 算法的基本思想是什么? 答:KMP 算法的思想是,设 s 为目标串、t 为模式串,并设 i 指针和 j 指针分别指示目 标串和模式串中待比较的字符,令 i 和 J 的初值均为 0。若有 si=tj,则 i 和 j 分别增 1;否则, i 不变,j 退回到 j=next[ j]的位置(即模式串右滑),比较 si 和 tj,若相等则指针各增 1.否 则 j 再退回到下一个 j=next[ j]的位置(即模式串继续右滑),再比较 si 和 tj。依此类推,直 到出现下列两种情况之一,一种情况是 j 退回到某个 J=next[ j]位置时有 si=tj,则指针各增 1 后继续匹配;另一种情况是 j 退回到 j=-1 时,此时令 i、j 指针各增 l,即下一次比较 Si+1 和 t0。
(4)对于一个链串 s,查找第 i 个元素的算法的时间复杂度为______。 A.O(1) B.O(n) C.O(n2) D.以上都不对 【答案】B 【解析】在链串中查找第 i 个元素时,由于元素的位置不确定,最坏的情况为第 i 个元 素为最后一个元素,需要查找 n 次,因此其时间复杂度为 O(n),B 项正确。
圣才电子书 十万种考研考证电子书、题库视频学习平台

第4章 串
一、单项选择题 (1)串是一种特殊的线性表,其特殊性体现在______。 A.可以顺序存储 B.数据元素是单个字符 C.可以链接存储 D.数据元素可以是多个字符 【答案】B 【解析】串和线性表的唯一区别是串中的每个元素是单个字符,而线性表中的每个元素 可以是自定义的其他类型,因此答案为 B 项
4 / 11
圣才电子书

答:
十万种考研考证电子书、题库视频学习平台
三、算法设计题 (1)设计一个算法,计算一个顺序串 s 中每个字符出现的次数。 答: void CountFre() {
int i,num[36]; char ch; for(i=0;i<36;i++)
相关文档
最新文档