数据结构课后习题及解析第四章

合集下载

数据结构课后习题答案第四章

数据结构课后习题答案第四章

第四章一、简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。

答:●空串是指不包含任何字符的串,它的长度为零。

空白串是指包含一个或多个空格的串,空格也是字符。

●串常量是指在程序中只可引用但不可改变其值的串。

串变量是可以在运行中改变其值的。

●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。

●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。

动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。

●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。

●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。

二、假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。

数据结构肖启宏课后习题答案第四章

数据结构肖启宏课后习题答案第四章

一. 名词解释(1)栈——只允许在一端进行插入或删除操作的线性表称为栈。

其最大的特点是“后进先出”。

(2)顺序栈——采用顺序存储结构的栈称为顺序栈。

(3)链栈——采用链式存储结构的栈称为链栈。

(5)队列——只允许在一端进行插入,另一端进行删除操作的线性表称为队列。

其最大的特点是“先进先出”。

(6)顺序队列——采用顺序存储结构的队列称为顺序队列。

(7)链队列——采用链式存储结构的称队列为链队列。

(8)循环队列——为了解决顺序队列中“假溢出”现象,将队列的存储空间想象为一个首尾相链的环(即把队头元素与对尾元素链结起来),存储在其中的队列称为循环队列。

二.判断题(下列各题,正确的请在前面的括号内打√;错误的打ㄨ)(1)√(2)√(3)ㄨ(4)ㄨ(5)ㄨ(6)ㄨ(7)√(8)√(9)ㄨ(10)√(11)ㄨ(12)ㄨ三. 填空题(1)后进先出(2)栈顶栈底(3)栈空栈满(4)O(1)O(1)(5)必须一致(6)栈(7)栈空(8)p->next=top top=p(9)- - + +(10)LS->next 首(11)先进先出(12)队尾队头(13)队列是否为空队列是否为满(14)可变的(15)-1 NULL(16)O(n) O(1) O(1) O(1)(17)front==rear front==(rear+1)% MAXLEN MAXLEN-front (18)空只含有一个结点(19)front==rear && front <>NULL(20)队尾指针写入四. 选择题(1)C (2)A (3)D (4)B (5)C(6)D (7)B (8)A (9)A (10)D(11)A (12)A (13)C (14)A (15)B (16) A五、简答题答:n个(同类)数据元素的有限序列称为线性表。

线性表的特点是数据元素之间存在“一对一”的关系。

栈和队列都是操作受限制的线性表,它们和线性表一样,数据元素之间都存在“一对一”的关系。

数据结构课后习题第四章

数据结构课后习题第四章

第四章串习题4一、选择题1.串是一种分外的线性表,其分外性体现在()。

A.可以顺序存储B.数据元素是一个字符C.可以连接存储D.数据元素可以是多个字符2.有两个串P和Q,求P在Q中首次出现的位置的运算称为()。

A.模式匹配B.联接C.求子串D.求串长3.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非通俗子串(非空且例外于S本身)的个数为()。

A.n²B.(n²/2)+(n/2)C.(n²/2)+(n/2)-1D.(n²/2)-(n/2)-14.设串s1=“ABCDEFG”,s2=“PQRST”,函数concat(x,y)返回x和y串的连接串,subString(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,Strlength(s)返回串s的长度,则concat(subString(s1,2,Strlength(s2)),subString(s1,Strlength(s2),2)))的结果串是()。

A.BCDEFB.BCDEFGC.BCPQRSTD.BCDEFEF5.顺序串中,根据空间分配方式的例外,可分为()。

A.直接分配和间接分配B.静态分配和动态分配C.顺序分配和链式分配D.随机分配和不变分配6.设串S=“abcdefgh”,则S的所有非通俗子串(除空串和S自身的串)的个数是()。

A.8B.37C.36D.357.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是()。

A.O(m)B.O(n)C.O(m+n)D.O(n*m)8.已知串S=“aaab”,其next数组值为()。

A.0123B.1123C.1231D.1211二丶填空题1.在空串和空格串中,长度不为0的是()。

2.空格串是指(),其长度等于()。

3.按存储结构的例外,串可分为()、()和()。

4.C语言中,以字符()表示串值的终结。

5.在块链串中,为了提高存储密度,应该增大()。

严蔚敏 数据结构课后习题及答案解析

严蔚敏 数据结构课后习题及答案解析

第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。

(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

()2.算法就是程序。

()3.数据元素是数据的最小单位。

()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。

()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。

2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。

3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。

数据结构答案第4章

数据结构答案第4章
【解答】设稀疏矩阵为m行n列,如果采用二维数组存储,其空间复杂度为O(m×n);因为要将所有的矩阵元素累加起来,所以,需要用一个两层的嵌套循环,其时间复杂度亦为O(m×n)。如果采用三元组顺序表进行压缩存储,假设矩阵中有t个非零元素,其空间复杂度为O(t),将所有的矩阵元素累加起来只需将三元组顺序表扫描一遍,其时间复杂度亦为O(t)。当t<<m×n时,采用三元组顺序表存储可获得较好的时、空性能。
⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
A 90 B 180 C 240 D 540 E 108 F 114 G 54
⑵二维数组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。
Head(Tail(Tail(Head(ST))))=奖金
⑵工资表ST的头尾表示法如图4-7所示。7.若在矩阵A中存在一个元素ai,j(0≤i≤n-1,0≤j≤m-1),该元素是第i行元素中最小值且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。假设以二维数组存储矩阵A,试设计一个求该矩阵所有马鞍点的算法,并分析最坏情况下的时间复杂度。
⑵因为k和i, j之间是一一对应的关系,k+1是当前非零元素的个数,整除即为其所在行号,取余表示当前行中第几个非零元素,加上前面零元素所在列数就是当前列号,即:

数据结构作业答案第四章作业答案

数据结构作业答案第四章作业答案

第四章习题解答一、基础知识题4.1 简述下列每对术语的区别:略4.2 假设有如下的串说明:char s1[30]="stocktom,CA",s2[30]="March 5,1999",s3[30],*p;(1)在执行如下的每个语句后p的值是什么?略p=strchr(s1,'t')p=strchr(s2,'9')p=strchr(s2,'6')(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1):s3的值为"stocktom CA"strcat(s3,","):s3的值为"stocktom CA,"strcat(s3,s2):s3的值为"stocktom CA,March 5,1999"(3)调用函数strcmp(s1,s2)的返回值是什么?因为s1>s2,所以返回一个正值。

(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?&s1[5]指向“tom,CA”,因为"tom,CA"<"ton",所以返回一个负值。

(5)调用函数strlen(strcat(s1,s2))的返回值是什么?返回值是23。

二、算法设计题:4.3 利用C的库函数strlen,strcpy和strcat写一个算法void StrInsert(char *S,char *T,int i),将串T插入到串S的第i个位置上。

若i大于S的长度,则插入不执行。

void StrInsert(char *S,char *T,int i){char temp[256];if(i>strlen(S))return;strcpy(temp,&S[i]);S[i]='\0';strcat(T,temp);strcat(S,T);}4.4 利用C的库函数strlen和strcpy写一算法void StrDelete(char *S,int i,int m),删去串S中从位置i连续m个字符。

数据结构与算法课程第4章的习题答案

数据结构与算法课程第4章的习题答案
swich(branch){
case0: bonus=i*0.1;break;
case1: bonus=bonus1+(i-100000)*0.075;break;
case2:
case3:bonus=bonus2+(i-200000)*0.05;break;
case4:
case5:bonus=bonus4+(i-400000)*0.03;break;
第4章
4.1程序阅读题。以下程序运行结果是什么?
#includestdio.h
void main() {
int i1;
while (i15)
if (i3!2)continue;
else printf(d,i);
printf(\n);
}
结果为:2 5 8 11 14
4.2程序填空题。输出右边所示图案(共N行,N为奇数,此时N=7)。
}
注意:s、t不能定义为int,long型,因为这两种数据类型的范围都不超过21亿,无法容纳最后求的结果。
(6)求s=a+aa+aaa+…+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘输入控制。
程序流程图:
程序代码:
#include<stdio.h>
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;

数据结构课后习题与解析第四章

数据结构课后习题与解析第四章

第四章习题1. 设s=’I AM A STUDENT’, t=’GOOD’, q=’WORKER’。

给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s,7,1);StrIndex(s,’A’,4); StrReplace(s,’STUDENT’,q);StrCat(StrCat(sub1,t), StrCat(sub2,q));2. 编写算法,实现串的基本操作StrReplace(S,T,V)。

3. 假设以块链结构表示串,块的大小为1,且附设头结点。

试编写算法,实现串的下列基本操作:StrAsign(S,chars);StrCopy(S,T);StrCompare(S,T);StrLength(S);StrCat(S,T);SubString(Sub,S,pos,len)。

4.叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变量的值。

5.已知:S=”(xyz)*”,T=”(x+z)*y”。

试利用联接、求子串和置换等操作,将S转换为T. 6.S和T是用结点大小为1的单链表存储的两个串,设计一个算法将串S中首次与T匹配的子串逆置。

7.S是用结点大小为4的单链表存储的串,分别编写算法在第k个字符后插入串T,及从第k个字符删除len个字符。

以下算法用定长顺序串:8.编写下列算法:(1)将顺序串r中所有值为ch1的字符换成ch2的字符。

(2)将顺序串r中所有字符按照相反的次序仍存放在r中。

(3)从顺序串r中删除其值等于ch的所有字符。

(4)从顺序串r1中第index 个字符起求出首次与串r2相同的子串的起始位置。

(5)从顺序串r中删除所有与串r1相同的子串。

9.写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换。

10.写算法,实现顺序串的基本操作StrCompare(s,t)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

11. 写算法,实现顺序串的基本操作 StrReplace(&s,t,v)r1 中第 index 个字符起求出首次与串 r2 相同的子串的起始位置。

写一个函数将顺序串 s1 中的第 i 个字符到第 j 个字符之间的字符用 s2 串替换。

写算法,实现顺序串的基本操作 StrCompare(s,t) 。

第四章习题1. 设 s=' I AM A STUDENT , t= ' GOO D,q=' WORKER 给出下列操作的结果: StrLength(s); SubString(sub1,s,1,7);SubString(sub2,s,7,1);StrIndex(s, ' A ' ,4); StrReplace(s, ' STUDEN 'T,q); StrCat(StrCat(sub1,t), StrCat(sub2,q));2. 编写算法,实现串的基本操作 StrReplace(S,T,V) 。

3. 假设以块链结构表示串,块的大小为 1,且附设头结点。

试编写算法,实现串的下列基本操作:StrAsign(S,chars) ; StrCopy(S,T) ; StrCompare(S,T) ; StrLength(S) ; StrCat(S,T) ; SubString(Sub,S,pos,len) 。

4. 叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变 量的值。

5. 已知:S=”(xyz)* ” ,T= ”(x+z)*y ”。

试利用联接、求子串和置换等操作,将 S 转换为T. 6. S 和T 是用结点大小为1的单链表存储的两个串,设计一个算法将串 S 中首次与T 匹配的子串逆 置。

7. S 是用结点大小为4的单链表存储的串,分别编写算法在第k 个字符后插入串T ,及从第k 个字符 删除 len 个字符。

以下算法用定长顺序串: 8. 编写下列算法: 1) 将顺序串 r 中所有值为 ch1 的字符换成 ch2 的字符。

2) 将顺序串 r 中所有字符按照相反的次序仍存放在 r 中。

3) 从顺序串 r 中删除其值等于 ch 的所有字符。

5) 从顺序串 r 中删除所有与串 r1 相同的子串。

从顺序串 9. 10.实习题已知串S 和T ,试以以下两种方式编写算法,求得所有包含在 S 中而不包含在T 中的字符构成 R,以及新串R 中每个字符在串S 中第一次出现的位置。

利用CONCATLEN SUB 和EQUA 四种基本运算来实现。

显示若干行: list [[n1]-[n2]] 行开始, n2 缺省时,到最后一行,插入一行。

ins n :在第 n 行之前插入一行。

字符替换。

replace str1,str2, [[n1]-[n2]]:在 n1 到 n2 行之间用 str2 替换StrCat(StrCat(sub1,t),StrCat(sub2,q))sub1=' I AM A GOOD WORK 'ER 。

编写算法,实现串的基本操作 StrReplace(S,T,V) 。

2.2)以顺序串作为存储结构来实现。

编写一个行编辑程序EDLINE 完成以下功能: 2) 删除若干行。

del [[n1]-[n2]] : n1 、 n2 说明同( 1 )。

3)编辑第 n 行。

edit n :显示第 n 行的内容,另输入一行替换该行。

str1 。

3.设计一个文学研究辅助程序,统计小说中特定单词出现的频率和位置。

第四章答案 设 s=' I AM A STUDENT ,t= ' GOO D , q=' WORKER 给出下列操作的结果: 解答】 StrLength(s)=14;SubString(sub1,s,1,7) sub1=' I AM A ' SubString(sub2,s,7,1) sub2='StrIndex(s,4, 'A ')=6; StrReplace(s, 'STUDEN 'T,q);s='I AM A WORKE 'R ; 1.的新串 1)1):显示第 n1 行到第 n2 行, n1 缺省时,从第一 4)5)解答】算法如下:{ /*将S 中子串T 后的所有字符后移个位置*/for(i=S->+;i>=pos+;i--)int strReplace(SString S,SString T, SString V) {/*用串V 替换S 中的所有子串T */ int pos,i;/*求S 中子串T 第一次出现的位置/*用串V 替换S 中的所有子串TS->ch[+]=S->ch[i];for(i=0;i<=;i++)S->ch[pos+i]=[i];S->len=S->+;*/if(pos = =0)return(0);*/ switch/* case 串T 的长度等于串 0: V 的长度*/ for(i=0;i<=;i++)/*用V 替换 T*/ S->ch[pos+i]=[i ];case >0: /*串T 的长度大于串V 的长度*/ for(i=pos+;i<S->len;i --)/*将S 中子串T后的所有字符用V 替换T*/pos=strIndex(S,1,T);while(pos!=0)前移个位置 *//*case<0:/*串T 的长度小于串V 的长度*/if(S->+<= MAXLEN /* 插入后串长小于 MAXLEN*/for(i=0;i<MAXLEN-pos;i++)S->ch[i+pos]=[i]; S->len=MAXLEN;}}/*switch()*/pos=StrIndex(S,pos+,T);位置*/}/*while()*/ return(1); }/*StrReplace()*/附加题:用链式结构实现定位函数。

/* 用 V 替换 T*/else但串 V 可以全部替换 *//* 用 V 替换 T*//* 串 V 的部分字符要舍弃 */S->ch[i]=S->ch[+];for(i=0;i<=;i++)S->ch[pos+i]=[i];S->len=S->+; }if(pos+<=MAXLEN)else/* 替换后串长 >MAXLEN,for(i=MAXLEN-1;i>=pos+; i--)S->ch[i]=s->ch[+]for(i=0;i<=;i++)S->ch[pos+i]=[i]; S->len=MAXLEN;}/*求S 中下一个子串T 的解答】typedef struct Node { char data;struct Node *next; }Node,*Lstring;Node *p, *q, *Ppos; int i=0 , ,j=0;p=S->next; q=T->next;if(j!=pos)return(0);while(p!=NULL&& q!=NULL)/*Ppos 指向当前匹配的起始字符 */ if(p->data = = q->data){p=p->next; q=q->next;}else符起从新匹配 */{p=Ppos->next; q=T->head->next;while(p!=NULL&& j<pos) /*p 指向串S 中第pos 个字符*/{p=p->next;j++;}int strIndex(Lstring S, int pos, Lstring T) /*从串S 的pos 序号起,串T 第一次出现的位置*/if(T->next= =NULL|| S->next = =NULL) return(0);Ppos=p; /*从Ppos 指向字符的下一个字i++;}if(q= =NULL) return(pos+i);else return(0);第4章习题1. 设s=' I AMA STUDEN'T , t= 'GOO'D,q= ' WORKER。

给出下列操作的结果:StrLength(s); SubString(sub1,s,1,7); SubString(sub2,s, 7,1);StrIndex( s, ' A' ,4); StrReplace( s, STUDEN'T,q );StrCat(StrCat(sub1,t),StrCat(sub2,q));[ 参考答案]StrLength(s)= 14; sub1= ' IAMA_' ; sub2= ' StrIndex (s, ' A' ,4)= 6;StrReplace( s,' STUDEN'T,q )= ' I AM A WORKE'R ;StrCat(StrCat(sub1,t), StrCat(sub2,q))= ' I AM A GOOD WORK'ER;2. 编写算法,实现串的基本操作StrReplace(S,T,V) 。

/* 匹配成功*//* 失败*/3. 假设以块链结构表示串,块的大小为1,且附设头结点。

试编写算法,实现串的下列基本操作:StrAsign(S,chars) ;StrCopy(S,T) ;StrCompare(S,T) ;StrLength(S) ;StrCat(S,T) ;SubString(Sub,S,pos,len) 。

[ 说明] :用单链表实现。

4.叙述以下每对术语的区别:空串和空格串;串变量和串常量;主串和子串;串变量的名字和串变量的值。

5.已知:S=”(xyz)* ” , T= ”(x+z)*y ”。

试利用联接、求子串和置换等操作,将S 转换为T.6.S和T是用结点大小为1的单链表存储的两个串,设计一个算法将串S 中首次与T 匹配的子串逆置。

7.S是用结点大小为4的单链表存储的串,分别编写算法在第k个字符后插入串T,及从第k个字符删除len个字符。

以下算法用定长顺序串:8.写下列算法:将顺序串r 中所有值为ch1 的字符换成ch2 的字符。

将顺序串r 中所有字符按照相反的次序仍存放在r中。

从顺序串r 中删除其值等于ch 的所有字符。

相关文档
最新文档