数据结构(C语言版)习题及答案第四章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;