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

合集下载

数据结构教程李春葆第4版知识点习题答案

数据结构教程李春葆第4版知识点习题答案

第1章绪论知识点归纳一、数据结构概述1.数据结构的定义(1)基本概念数据是描述客观事物的数和字符的集合,是计算机能操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式。

(2)相关术语① 数据元素数据元素又称元素、节点、顶点、记录等。

数据元素是数据的基本单位。

有时候,一个数据元素可以由若干个数据项组成。

② 数据项数据项又称字段或域,它是具有独立含义的最小数据单位。

③ 数据对象数据对象是性质相同的数据元素的集合,它是数据的子集。

(3)数据结构的内容① 数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。

② 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,又称数据的物理结构。

③ 施加在数据上的操作,即数据的运算。

(4)逻辑结构数据的逻辑结构是从逻辑关系(主要是指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

(5)存储结构数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(又称映像),也就是逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。

一般只在高级语言(例如C/C++语言)的层次上讨论存储结构。

数据的运算最终需在对应的存储结构上用算法实现。

总之,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。

(6)数据结构的表示对于一种数据结构,其逻辑结构总是惟一的,但它可能对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。

描述数据结构通常采用二元组表示:B=(D,R)其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R组成,即:D={d i | 1≤i≤n,n≥0}R={r j | 1≤j≤m,m≥0}其中d i表示集合D中的第i个数据元素(或节点),n为D中数据元素的个数,特别地,若n=0,则D 是一个空集。

数据结构1-4章习题答案

数据结构1-4章习题答案

第1章概论习题参考解答一、填空题1、数据的逻辑结构是数据元素之间的逻辑关系,通常有下列4类:()、()、()、()。

【答】集合、线性结构、树型结构和图状结构。

2、数据的存储结构是数据在计算机存储器里的表示,主要有4种基本存储方法:()、()、()、()。

【答】顺序存储方法、链接存储方法、索引存储方法和散列存储方法。

二、选择题1、一个算法必须在执行有穷步之后结束,这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】B。

2、算法的每一步,必须有确切的定义。

也就是说,对于每步需要执行的动作必须严格、清楚地给出规定。

这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】C。

3、算法原则上都是能够由机器或人完成的。

整个算法好像是一个解决问题的“工作序列”,其中的每一步都是我们力所能及的一个动作。

这是算法的()。

(A)正确性(B)有穷性(C)确定性(D)可行性【答】D。

三、简答题1、算法与程序有何异同?【答】尽管算法的含义与程序非常相似,但两者还是有区别的。

首先,一个程序不一定满足有穷性,因此它不一定是算法。

例如,系统程序中的操作系统,只要整个系统不遭受破坏,它就永远不会停止,即使没有作业要处理,它仍处于等待循环中,以待一个新作业的进入。

因此操作系统就不是一个算法。

其次,程序中的指令必须是计算机可以执行的,而算法中的指令却无此限止。

如果一个算法采用机器可执行的语言来书写,那么它就是一个程序。

2、什么是数据结构?试举一个简单的例子说明。

【答】数据结构是指数据对象以及该数据对象集合中的数据元素之间的相互关系(即数据元素的组织形式)。

例如,队列的逻辑结构是线性表(先进先出);队列在计算机中既可以采用顺序存储也可以采用链式存储;对队列可进行删除、插入数据元素以及判断是否为空队列、将队列置空等操作。

3、什么是数据的逻辑结构?什么是数据的存储结构?【答】数据元素之间的逻辑关系,也称为数据的逻辑结构。

部分习题参考答案(数据结构 李春葆)

部分习题参考答案(数据结构 李春葆)
void Insert(DLinkList *&ha, DLinkList *&hb,int i) { DLinkList *p=ha->next,*q;
int lena=1,j=0; while (p->next!=ha)//求出ha的长度lena { lena++;
p=p->next; }
if (i==0) //将hb的所有数据结点插入到ha的头结点和第1个数据结点之间
{ p=hb->prior;
//p指向hb的最后一个结点/
p->next=ha->next;
//将*p链到ha的第1个数据结点前面
ha->next->prior=p;
ha->next=hb->next;
hb->next->prior=ha;
//将ha头结点与hb的第1个数据结点链起

}
else if (i<lena)
q->next->prior=q;
p->next=q;q->prior=p;
q=p->prior;
//q重指向*p的前趋节点
}
return true;
}
}
2.5 设ha=(a1,a2,…,an)和hb=(b1,b2, …,bm) 是两个带头结点的循环单链表,编写将 这两个表合并为带头结点的循环单链表hc的算法。
else
//找到的情况
{ p->freq++;
//频度增1
q=p->prior;
//*q为p前驱节点
while (q!=h && q->freq<p->freq)

数据结构教程李春葆课后答案第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++语言描述)配套题库【课后习题】(串)

{
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
圣才电子书 十万种考研考证电子书、题库视频学习平台

数据结构(李春葆)习题与解析

数据结构(李春葆)习题与解析

李春葆编著:数据结构(C 语言篇)――习题与解析(修订版)语言篇)――习题与解析(修订版)清华大学出版社清华大学出版社一、绪论一、绪论选择题选择题1.数据结构是一门研究非数值计算的程序设计问题数据结构是一门研究非数值计算的程序设计问题 计算机的计算机的 以及它们之间的以及它们之间的 和运算等的学科。

算等的学科。

1 A.数据元素数据元素 B.计算方法计算方法 C.逻辑存储逻辑存储 D.数据映像数据映像2 A.结构结构 B.关系关系 C.运算运算 D.算法算法2.数据结构被形式地定义为数据结构被形式地定义为 (K, R),其中,其中K 是 的有限集,R 是K 上的上的 有限集。

有限集。

1 A.算法算法 B.数据元素数据元素 C.数据操作数据操作 D.逻辑结构逻辑结构2 A.操作操作 B.映像映像 C.存储存储 D.关系关系3.在数据结构中,从逻辑上可以把数据结构分成在数据结构中,从逻辑上可以把数据结构分成 。

A.动态结构和静态结构动态结构和静态结构B.紧凑结构和非紧凑结构紧凑结构和非紧凑结构C.线性结构和非线性结构线性结构和非线性结构D.内部结构和外部结构内部结构和外部结构4.线性结构的顺序存储结构是一种线性结构的顺序存储结构是一种 的存储结构,线性表的链式存储结构是一种线性表的链式存储结构是一种 的存储结构。

储结构。

A.随机存取随机存取B.顺序存取顺序存取C.索引存取索引存取D.散列存取散列存取5.算法分析的目的是算法分析的目的是 ,算法分析的两个主要方面是,算法分析的两个主要方面是 。

1 A.找出数据结构的合理性找出数据结构的合理性 B.研究算法中的输入和输出的关系研究算法中的输入和输出的关系C.分析算法的效率以求改进分析算法的效率以求改进D.分析算法的易懂性和文档性分析算法的易懂性和文档性2 A.空间复杂度和时间复杂度空间复杂度和时间复杂度 B.正确性和简单性正确性和简单性C.可读性和文档性可读性和文档性D.数据复杂性和程序复杂性数据复杂性和程序复杂性6.计算机算法指的是计算机算法指的是 ,它必须具备输入、输出和,它必须具备输入、输出和 等 5个特性。

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。

(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。

它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。

不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。

(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(3)答:j =0,第1次循环:j =1,s =10。

第2次循环:j =2,s =30。

第3次循环:j =3,s =60。

第4次循环:j =4,s =100。

while 条件不再满足。

所以,其中循环语句的执行次数为4。

(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。

(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。

(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。

∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。

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

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

第二部分课后习题第1章绪论1.简述数据与数据元素的关系与区别。

答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。

数据元素是数据的基本单位,是数据的个体。

数据与元素之间的关系是元素与集合之间的关系。

2.数据结构和数据类型有什么区别?答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。

3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000g(n)=25n3+5000n2h(n)=n1.5+5000nlog2n求它们对应的时间复杂度。

答:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n=O(n1.5)。

4.用C/C++语言描述下列算法,并给出算法的时间复杂度。

(1)求一个n阶方阵的所有元素之和。

(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。

(3)对于输入的任意n个整数,输出其中的最大和最小元素。

答:(1)算法如下:本算法的时间复杂度为O(n2)。

(2)算法如下:本算法的时间复杂度为O(1)。

(3)算法如下:本算法的时间复杂度为O(n)。

5.设n为正整数,给出下列各种算法关于n的时间复杂度。

(1)(2)(3)答:(1)设while循环语句执行次数为T(n),则:(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:(3)设while循环语句执行次数为T(n),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。

数据结构答案第4章

数据结构答案第4章

数据结构答案第4章本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March第 4 章广义线性表——多维数组和广义表2005-07-14第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。

除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。

⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。

【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。

⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。

【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。

⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。

【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。

【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。

【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。

李春葆数据结构教程第4版习题答案

李春葆数据结构教程第4版习题答案

1章答案1.简述数据与数据元素的关系与区别。

解:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。

数据元素是数据的基本单位,是数据的个体。

数据与元素之间的关系是元素与集合之间的关系。

2.数据结构和数据类型有什么区别?解:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。

而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。

3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000 g(n)=25n3+5000n2 h(n)=n1.5+5000nlog2n求它们对应的时间复杂度。

解:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n= O(n1.5)。

4.用C/C++语言描述下列算法,并给出算法的时间复杂度。

(1)求一个n阶方阵的所有元素之和。

(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。

(3)对于输入的任意n个整数,输出其中的最大和最小元素。

解:(1)算法如下:本算法的时间复杂度为O(n2)。

(2)算法如下:本算法的时间复杂度为O(1)。

(3)算法如下:本算法的时间复杂度为O(n)。

5.设n为正整数,给出下列各种算法关于n的时间复杂度。

(1)(2)(3)解:(1)设while循环语句执行次数为T(n),则:(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:(3)设while循环语句执行次数为T(n),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。

数据结构教程,含习题和答案

数据结构教程,含习题和答案

第一章:概论(包括习题与答案及要点)本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。

需要达到<识记>层次的基本概念和术语有:数据、数据元素、数据项、数据结构。

特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。

数据结构的两大类逻辑结构和四种常用的存储表示方法。

需要达到<领会>层次的内容有算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度。

-------------------------------------------------------------------------------- 对于基本概念,仔细看书就能够理解,这里简单提一下:数据就是指能够被计算机识别、存储和加工处理的信息的载体。

数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。

数据项是具有独立含义的最小标识单位。

如整数这个集合中,10这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。

数据结构的定义虽然没有标准,但是它包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。

这一段比较重要,我用自己的语言来说明一下,大家看看是不是这样。

比如一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多字段(数据项)组成。

那么这张表的逻辑结构是怎么样的呢? 我们分析数据结构都是从结点(其实也就是元素、记录、顶点,虽然在各种情况下所用名字不同,但说的是同一个东东)之间的关系来分析的,对于这个表中的任一个记录(结点),它只有一个直接前趋,只有一个直接后继(前趋后继就是前相邻后相邻的意思),整个表只有一个开始结点和一个终端结点,那我们知道了这些关系就能明白这个表的逻辑结构了。

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(李春葆版)课后习题答案

数据结构简明教程(第2版)配套练习题参考答案———————数据结构简明教程———————1.练习题1参考答案1.单项选择题(1)D (2)C (3)C (4)A (5)C (6)B (7)C (8)A (9)C (10)B 2.填空题(1)①逻辑结构 ②存储结构 ③运算(不限制顺序)(2)①线性结构 ②非线性结构(不限制顺序)(3)①数据元素 ②关系(4)①没有 ②没有(5)①前驱 ②一 ③后继 ④任意多个(6)任意多个(7)①顺序 ②链式 ③索引 ④哈希(不限制顺序)(8)①时间 ②空间(不限制顺序)(9)问题规模(通常用n 表示)。

(10)辅助或临时空间3.简答题(1)答:运算描述是指逻辑结构施加的操作,而运算实现是指一个完成该运算功能的算法。

它们的相同点是,运算描述和运算实现都能完成对数据的“处理”或某种特定的操作。

不同点是,运算描述只是描述处理功能,不包括处理步骤和方法,而运算实现的核心则是处理步骤。

(2)答:T 1(n )=O(n log 2n ),T 2(n )=O( ),T 3(n )=O(n 2),T 4(n )=O(n log 2n )。

(3)答:j =0,第1次循环:j =1,s =10。

第2次循环:j =2,s =30。

第3次循环:j =3,s =60。

第4次循环:j =4,s =100。

while 条件不再满足。

所以,其中循环语句的执行次数为4。

(4)答:语句s ++的执行次数2)2)(3(3)1()1(12121-+=++-+=+-=∑∑∑-=-==n n n n i n n i n i i nj。

(5)答:其中x ++语句为基本运算语句,∑∑∑=+==-=-==n i n i j ni n n i n n T 1112)1()(1)(=O(n 2)。

(6) 答:由于内循环j 的取值范围,所以i ≤n /2,则,该程序段的时间复杂度为O(n 2)。

∑∑∑-===--==2/122/124/))12((n i nij n i n i n m 3log 2n2.练习题2参考答案1.单项选择题(1)A (2)C (3)A (4)B (5)C(6)D (7)C (8)B (9)A (10)C(11)B (12)A (13)C (14)D (15)D(16)D (17)A (18)C (19)A (20)D2.填空题(1)L.length=0(2)O(1)(3)O(n)(4)n-i(5)①物理存储位置②指针域(6)①前驱 ②O(n)(7)q=p->next; p->next=q->next; free(q);(8)s->next= p->next; p->next=s;(9)O(1)(10)L->next==L3.简答题(1)答:顺序存储结构中,逻辑上相邻元素的存储空间也是相邻的,无需额外空间表示逻辑关系,所以存储密度大,同时具有随机存取特性。

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

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

第1章绪论一、单项选择题(1)计算机所处理的数据一般具备某种内在联系,这是指______。

A.数据和数据之间存在某种关系B.元素和元素之间存在某种关系C.元素内部具有某种结构D.数据项和数据项之间存在某种关系【答案】B【解析】数据是计算机操作对象的总称,数据元素是计算机处理数据的基本单位,因此数据之间的内在联系指的应该是数据元素和数据元素之间的关系。

(2)在数据结构中,与所使用计算机无关的是数据的______结构。

A.逻辑B.存储C.逻辑和存储D.物理【答案】A【解析】数据的逻辑结构是从逻辑关系上描述数据的,它与数据的存储无关,是独立于计算机的。

而数据的存储结构是指数据元素及其关系在计算机存储器中的存储方式,也称为数据的物理结构,与计算机有关。

(3)数据结构在计算机中的表示称为数据的______。

A.存储结构B.抽象数据类型C.顺序结构D.逻辑结构【答案】A【解析】数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示。

(4)在计算机中存储数据时,通常不仅要存储各数据元素的值,还要存储______。

A.数据的处理方法B.数据元素的类型C.数据元素之间的关系D.数据的存储方法【答案】C【解析】存储实现的基本目标是建立数据的机内表示,其包括两个部分,即数据元素的存储和数据元素之间关系的存储。

(5)在计算机的存储器中表示数据时,逻辑上相邻的两个元素对应的物理地址也是相邻的,这种存储结构称为______。

A.逻辑结构B.顺序存储结构C.链式存储结构D.以上都正确【答案】B【解析】顺序存储结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。

所以答案B项正确;逻辑结构是独立于计算机的与存储结构相平行的概念,并不是存储结构的一种,A项错误;中链式存储结构不要求逻辑上相邻的结点在物理位置上也相邻,结点同的逻辑关系用附加的指针域来表示,C项错误。

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】

(NEW)李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
A.DIV R0,R1;(R0)/(R1)→R0 B.INT n;产生软中断 C.NOT R0;寄存器R0的内容取非 D.MOV R0,addr;把地址处的内存数据放入寄存器R0中 【答案】C 【解析】A项,除法操作出现除数为零的情况时,会产生内中断, CPU切换为内核态进行中断处理;B项,直接产生中断,会切换到内核 态;D项,addr出现非法地址,会出现中断,进而切换到内核态。
D.1用C语言写的某单位的认识管理程序语言,2操作系统,3编译
程序 【答案】B 【解析】计算机系统的组成如下图所示:
其中,C语言写的某单位的认识管理程序语言属于应用程序,编译 程序属于语言处理程序。
3 假定下列指令已装入指令寄存器。则执行时不可能导致CPU从 用户态变为内核态(系统态)的是( )。[2015年联考真题]
5 下列说法中( )不是创建进程必须的。[上海交通大学考研真 题]
A.建立一个进程的进程表项 B.为进程分配内存 C.为进程分配CPU D.将进程表项放入就绪队列 【答案】C 【解析】进程刚被创建后,实际上是处于就绪状态的,所以不许为 进程分配CPU。
6 若系统S1采用死锁避免方法,S2采用死锁检测方法,下列叙述 中正确的是( )。[2015年联考真题]
4 下列选项中会导致进程从执行态变为就绪态的事件是( )。 [2015年联考真题]
A.执行P(wait)操作 B.申请内存失败 C.启动I/0设备 D.被高优先级进程抢占 【答案】D 【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪 态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。
目录
第一部分 名校考研真题 一、选择题 二、综合应用题
第二部分 课后习题 第1章 绪 论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查 找 第9章 内排序 第10章 外排序 第11章 数据结构和STL
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

失败
i=4 修改 j=4 i=6 修改 j=2 i=6 修改 j=0
i=4 j=nextval[4]=0 i=6 j=nextval[2]=0 i=6 j a a b b a b c a b a a c b a c b a t: abcabaa
失败
s: a b c a a b b a b c a b a a c b a c b a 第 4 趟匹配 成功 i=14 从 i=6, j=-1 开始 j=7 t: abcabaa 图 4.2 改进的 KMP 算法模式匹配的过程
返回 14-7=7
(3)从上述匹配过程看出:第 1 趟到第 4 趟的字符比较次数分别是 5、3、1、7,所 以总共进行了 16 次字符比较。 7. 有两个顺序串 s1 和 s2,设计一个算法求一个顺序串 s3,该串中的字符是 s1 和 s2 中公共字符(即两个串都包含的字符) 。 解:扫描 s1,对于当前字符 s1.data[i],若它在 s2 中出现,则将其加入到串 s3 中。最 后返回 s3 串。对应的算法如下:
第4章 串 break; i++; } i++; //跳过@字符 while (i<s.length &&flag) { e=s.data[i]; if (!Pop(st,x)) flag=false; if (e!=x) flag=false; i++; } if (!StackEmpty(st)) flag=false; DestroyStack(st); return flag; }
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章 串
教材中练习题及参考答案
1. 串是一种特殊的线性表,请从存储和运算两方面分析它的特殊之处。 答:从存储方面看,串中每个元素是单个字符,在设计串存储结构时可以每个存储单 元或者结点只存储一个字符。从运算方面看,串有连接、判串相等、求子串和子串替换等 基本运算,这是线性表的基本运算中所没有的。 2. 为什么模式匹配中,BF 算法是有回溯算法,而 KMP 算法是无回溯算法? 答: 设目标串为 s, 模式串为 t。 在 BF 算法的匹配过程中,当 t[j]=s[i]时, 置 i++,j++; 当 t[j]≠s[i]时,置 i=i-j+1,j=0。从中看到,一旦两字符不等,目标串指针 i 会回退,所以 BF 算法是有回溯算法。在 KMP 算法的匹配过程中,当 t[j]=s[i]时,置 i++,j++;当 t[j]≠ s[i]时,i 不变,置 j=next[j]。从中看到,目标串指针 i 不会回退,只会保持位置不变或者向 前推进,所以 KMP 算法是无回溯算法。 3. 在 KMP 算法中,计算模式串的 next 时,当 j=0 时,为什么要置 next[0]=-1? 答:当模式串中 t0 字符与目标串中某字符 si 比较不相等时,此时置 next[0]=-1 表示模 式串中已没有字符可与目标串的 si 比较,目标串当前指针 i 应后移至下一个字符,再和模 式串的 t0 字符进行比较。 4. KMP 算法是简单模式匹配算法的改进,以目标串 s="aabaaabc"、模式串 t="aaabc" 为例说明的 next 的作用。 答:模式串 t="aaabc"的 next 数组值如表 4.1 所示。
int index(SqString s,SqString t) { int i=0,j=0; while (i<s.length && j<t.length) { if (s.data[i]==t.data[j] || t.data[j]=='?') { i++; j++;
4 } else { i=i-j+1; j=0; } } if (j>=t.length) return(i-t.length); else return(-1); }
2
数据结构教程学习指导
当 j=-1 时 i++、j++,则 i=3,j=0,对应的字符均相等,一直比较到 j 超界,此时表示 匹配成功,返回 3。 从中看到,next[j]保存了部分匹配的信息,用于提高匹配效率。由于是在模式串的 j 位 置匹配失败的,next 也称为失效函数或失配函数。 5. 给出以下模式串的 next 值和 nextval 值: (1)ababaa (2)abaabaab 答: (1)求其 next 和 nextval 值如表 4.2 所示。
int LastPos1(SqString s,SqString t) { int i,j,k; if (s.length-t.length<0) return -1; for (i=s.length-t.length;i>=0;i--) { for (j=i,k=0;j<s.length && k<t.length && s.data[j]==t.data[k];j++,k++); if (k==t.length) return i; } return -1; }
10. 设计一个算法,判断一个字符串 s 是否形如"序列 1@为序列 2"模式的字符序列, 其中序列 1 和序列 2 都不含有'@'字符,且序列 2 是序列 1 的逆序列。例如"a+b@b+a"属于 该模式的字符序列,而"1+3@3-1"则不是。 解:建立一个临时栈 st 并初始化为空,其元素为 char 类型。置匹配标志 flag 为 true。 扫描顺序串 s 的字符,将'@'之前的字符进栈。继续扫描顺序串 s 中'@'之后的字符,每扫描 一个字符 e, 退栈一个字符 x, 若退栈时溢出或 e 不等于 x, 则置 flag 为 false。 循环结束后, 若栈不空,置 flag 为 false。最后销毁栈 st 并返回 flag。对应的算法如下:
6. 设目标为 s="abcaabbabcabaacbacba",模式串 t="abcabaa"。 (1)计算模式串 t 的 nextval 数组。 (2)不写算法,给出利用改进的KMP算法进行模式匹配的过程。 (3)问总共进行了多少次字符比较? 解:(1)先计算next数组,在此基础上求nextval数组,如表4.4所示。
3
第 1 趟匹配 从 i=0,j=0 开始 第 2 趟匹配 从 i=4,j=0 开始 第 3 趟匹配 从 i=6,j=0 开始
s: a b c a a b b a b c a b a a c b a c b a t: a b c a b a a s: a b c a a b b a b c a b a a c b a c b a t: abcabaa
数据结构教程学习指导
9. 设计一个算法,在顺序串 s 中从后向前查找子串 t,即求 t 在 s 中最后一次出现的位 置。 解:采用简单模式匹配算法。如果串 s 的长度小于串 t 的长度,直接返回-1。然后 i 从 s.length-t.length 到 0 循环: 再对于 i 的每次取值循环: 置 j=i, k=0, 若 s.data[j]==t.data[k], 则 j++,k++。循环中当 k==t.length 为真时,表示找到子串,返回物理下标 i。所有循环结 束后都没有返回,表示串 t 不是串 s 的子串则返回-1。对应的算法如下:
表 4.4 计算 next 数组和 nextval 数组 j t[j] next[j] nextval[j] 0 a -1 -1 1 b 0 0 2 c 0 0 3 a 0 -1 4 b 1 0 5 a 2 2 6 a 1 1
(2)改进的 KMP 算法进行模式匹配的过程如图 4.2 所示。
第4章 串
表 4.2 模式串"ababaa"对应的 next 数组 j t[j] next[j] nextval[j] 0 a -1 -1 1 b 0 0 2 a 0 -1 3 b 1 0 4 a 2 -1 5 a 3 3
(2)求其 next 和 nextval 值如表 4.3 所示。
表 4.3 模式串"abaabaab"对应的 next 数组 j t[j] next[j] nextval[j] 0 a -1 -1 1 b 0 0 2 a 0 -1 3 a 1 1 4 b 1 0 5 a 2 -1 6 a 3 1 7 b 4 0
5
11. 采用顺序结构存储串, 设计一个算法求串 s 中出现的第一个最长重复子串的下标和 长度。 解: 采用简单模式匹配算法的思路, 先给最长重复子串的起始下标 maxi 和长度 maxlen 均赋值为 0。用 i 扫描串 s,对于当前字符 si,判定其后是否有相同的字符,若有记为 sj, 再判定 si+1 是否等于 sj+1,si+2 是否等于 sj+2,…,直至找到一个不同的字符为止,即找到一 个重复出现的子串,把其起始下标 i 与长度 len 记下来,将 len 与 maxlen 相比较,保留较长 的子串 maxi 和 maxlen。再从 sj+len 之后查找重复子串。然后对于 si+1 之后的字符采用上述过 程。 循环结束后, maxi 与 maxlen 保存最长重复子串的起始下标与长度, 将其复制到串 t 中。 对应的算法如下:
相关文档
最新文档