数据结构(C语言版)习题及答案第四章

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

习题

4.1选择题

1、空串与空格串是(B)。

A、相同

B、不相同C、不能确定

2、串是一种特殊的线性表,其特殊性体现在(B)。

A、可以顺序存储

B、数据元素是一个字符

C、可以链式存储

D、数据元素可以是多个字符

3、设有两个串p和q,求q在p中首次出现的位置的操作是(B)。

A、连接

B、模式匹配

C、求子串

D、求串长

4、设串s1=“ABCDEFG”,s2=“PQRST”函数strconcat(s,t)返回s和t串的连接串,strsub(s,i,j)返回串s中从第i个字符开始的、由连续j个字符组成的子串。strlength(s)返回串s的长度。则strconcat(strsub(s1,2,strlength(s2)),strsub(s1,strlength(s2),2))的结果串是(D)。

A、BCDEF

B、BCDEFG

C、BCPQRST

D、BCDEFEF

5、若串s=“software”,其子串个数是(B)。

A、8

B、37

C、36

D、9

4.2简答题

1、简述空串与空格串、主串与子串、串名与串值每对术语的区别?

答:空串是指长度为0的串,即没有任何字符的串。

空格串是指由一个或多个空格组成的串,长度不为0。

子串是指由串中任意个连续字符组成的子序列,包含子串的串称为主串。

串名是串的一个名称,不指组成串的字符序列。

串值是指组成串的若干个字符序列,即双引号中的内容。

2、两个字符串相等的充要条件是什么?

答:条件一是两个串的长度必须相等

条件二是串中各个对应位置上的字符都相等。

3、串有哪几种存储结构?

答:有三种存储结构,分别为:顺序存储、链式存储和索引存储。

4、已知两个串:s1=”fg cdb cabcadr”, s2=”abc”, 试求两个串的长度,判断串s2是否是串s1的子串,并指出串s2在串s1中的位置。

答:(1)串s1的长度为14,串s2的长度为3。

(2)串s2是串s1的子串,在串s2中的位置为9。

5、已知:s1=〃I’m a student〃,s2=〃student〃,s3=〃teacher〃,试求下列各操作的结果:

strlength(s1);答:13

strconcat(s2,s3);答:”studentteachar”

strdelsub(s1,4,10);答:I’m

6、设s1=”AB”,s2=”ABCD”,s3=”EFGHIJK,试画出它们在各种存储结构下的结构图。答:

顺序存储方式下:

S3

链式存储方式:

S1

S2

S3 …

4.3 算法题

1、试写出将字符串s2中的全部字符拷贝到字符串s1中的算法,不允许用库函数strcpy( )。(可作为上机实践题目)

#include

#define maxlen 100

struct string

{

char ch[ maxlen ] ; //maxlen为数组中存储空间的最大数量

int len ;

};

void strcopy(string &s,string t)

{

int i;

for(i=0;i

s.ch[i]=t.ch[i];

s.len=t.len;

s.ch[s.len]='\0'; // '\0'表示串的结束,不包含作为串的字符

}

void printstring(string s)

for(int i=0;s.ch[i]!='\0';i++)

printf("%c",s.ch[i]);

printf("\n");

}

void main()

{

string s,t;

s.len=0;

int i=0;

char x;

printf("输入需要拷贝的串(以输入‘#’为结束标志):\n");

scanf("%c",&x);

while(x!='#')

{

t.ch[i++]=x;

scanf("%c",&x);

}

t.len=i;

t.ch[t.len]='\0';

strcopy(s,t);

printf("原串为:\n");

printstring(t);

printf("拷贝后的串为:\n");

printstring(s);

}

2、设s1和s2是用结点大小为1的单链表表示的串,试写出找s2中第一个不在s1中出现的字符的算法。

# include < malloc.h >

# include < stdio.h >

typedef char Elemtype ;

struct Lnode

{

Elemtype data ;

struct Lnode * next ;

} * L ;

//单链表的后插入创建算法

void Rcreate( Lnode *L , Elemtype A[ ] )

{

int i ;

Lnode *p,*s;

p=L;

相关文档
最新文档