加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数据结构——串

(2013-04-21 21:40:18)
分类: C数据结构

1.空串是由空白字符组成的串( FALSE 

2. 串的定长顺序结构是用一组地址连续的存储单元存储串值的字符序列,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。(TRUE )

3.串的堆分配存储表示是用一组地址连续的存储单元存储串值的字符序列,但它们的存储空间是在程序执行过程中动态分配得到的。(TRUE 

4.串中StrInsert(&S,pos,T)基本操作是最小的操作子集(FALSE)

5.串是由有限个字符构成的连续序列,串长度为串中字符的个数,子串是主串中字符构成的有限序列。(FALSE)

(错:子串是主串中连续的字符构成的有限序列)

(题源:胡元义,C版数据结构课程辅导与习题解析,p80,4.2.1(判断题)_1)

6.如果一个串中的所有字符均在另一串中出现,那么则说明前者是后者的子串。(FALSE)

错:是否连续是关键)

(题源:陈明,C版实用数据结构基础,p109(判断题)_2)

7.串类型的最小操作子集不能利用其他串操作来实现,反之,其他串操作均可在最小操作子集上实现。(TRUE)

(题源:根据教材p72自编)

 

单项选择题:

8.下列那些为空串(   

A)S=“    ”       B)S=“”

C)S=“φ”         D)S=“θ”

答案:B

9.S1=“ABCD”,S2=“CD”则S2在S3中的位置是(  

A)1                B)2

C)3                D)4

答案:C

10.假设S=“abcaabcaaabca”,T=“bca”,Index (S,T,3) 的结果是(  

A)2      B)6      C)11      D)0

答案:B

11.在串中,对于SubString(&Sub,S,pos,len)基本操作,poslen的约束条件是(  

A)01<=len<=StrLength(S)-pos+1

B00<=len<=StrLength(S)-pos-1

C)1<</SPAN>=pos<</SPAN>=StrLength(S) 且0<=len<=StrLength(S)-pos+1

D)1<</SPAN>=pos<</SPAN>=StrLength(S) 1<=len<=StrLength(S)-pos-1

答案:C

12串是一种特殊的线性表,其特殊性体现在   )

(题源:李春葆,C版题解,p1024.2.1(单选)_2)

A.可以顺序存储                B. 数据元素是一个字符

C.可以链接存储                D. 数据元素可以是多个字符

答:B

13. 串是(    )

(题源:陈明,C版实用数据结构基础,p109,习题(单选)_1)

A.少于一个字母的序列          B. 任意个字母的序列

C.不少于一个字符的序列        D. 有限个字符的序列

答:D

14. 串的长度是(  )

(题源:陈明,C版实用数据结构基础,p109,习题(单选)_3)

A.串中不同字母的个数          B. 串中不同字符的个数 

C.串中所含的字符的个数        D. 串中所含字符的个数,且大于0

答:C

15. 设有S1=‘ABCDEFG’,S2=‘PQRST’,函数con(xy)返回xy串的连接串,subs(Ij)返回串S的从序号I的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(S1,2,len(S2))subs(S1len(S2),2))的结果是 )

(题源:李春葆,C版题解,p102,4.2.1(单选)_4)

A.BCDEF        B. BCDEFG        C. BCPQRST        D. BCDEFEF

答:D 

16. 若某串的长度小于一个常数,则采用  )存储方式最为节省空间。

(题源:胡元义,C版数据结构课程辅导与习题解析,p90,4.3.1习题(4.3))

A.链式        B. 堆结构        C. 顺序表

答:C

 

填空题:

17.串是每个结点仅由一个字符组成的(   )。

答:线性表

18.在串中,SubString (“student”,5,0) 的结果是(   

答:“”

19.假设S=“abcaabcaaabca”,T=“bca”,V=“x”,Replace (S,T,V)结果是(   

答:“axaxaax

20.在串中,对于StrCompare(S,T)基本操作,若S<</SPAN>T,返回值(    

答:<</SPAN>0

21.在串顺序存储结构中,实现串操作的原操作为(    

答:字符序列的复制

22. 串与线性表在逻辑结构上极为相似,区别仅在于                          ;在基本操作上差别很大,线性表的基本操作大多数以          作为操作对象,而串的基本操作通常以           作为操作对象。

(题源:根据教材p71页自编)

答:串的数据对象约束为字符集  “单个元素”  “串的整体”

23.两个串相等的充分必要条件是                                      

(题源:根据教材p70页自编)

答:两个串的串长相等   各个对应位置的字符都相等

24.空串是指____________________,空格串是指_______________________。

(题源::宁正元C版题解p40(4.1(填空)_))

答:不含任何字符的串             仅含空格字符的串 

 

简答题:

25.已知串s=‘(xyz)*’,t=(x+z)*y’,试利用串的基本运算将s串转化为t串,t串转化为s串。

(题源:宁正元,C版题解,p40,4.2_3)

答:concat replace (substring (sub,s,1,5),y,+), replace (substring (sub,s,6,1),‘*’,‘*y))

concat(replace(substring(sub,t,1,5),+,y),replace(substring(sub,t,6,2),*y,*))

26.串是字符组成的,长度为1的串和字符是否概念相同?为什么?

(题源:朱战立,C版题解,p86,4.2.1(典型题解)_2)

答:由于字符的长度固定为1,长度概念可以隐含,所以存储时只需存储该字符即可;而长度为1的串其长度概念不能隐含,必须显示地表示出来,所以存储时要同时存储该字符和值为1的长度值。

 

算法设计题:

27.设串s和串t采用顺序存储结构,编写函数实现串s和串t的比较操作,要求比较结果包括大于、小于和等于三种情况。

解:int  StrCompare(SStrType s,SStrType t)

{

  int  n=s.length, m=t.length, i,j,tag;

  i=0; j=0;

  while(i &&j

    {

        if(s.str[i]==t.str[j])   

          {

            i++;j++;

}

else if(s.str[i]>t.str[j])

      {

        tag=1;          

        return tag;

}

    else

      {

        tag=-1     

        return tag;

}

           if(n==m)  tag=0;              

else if(n>m)  tag=1; 

else if(ntag=-1;

           return tag;

}

28.输入一个由若干单词组成的文本行,每个单词之间用若干个空格隔开,统计此文本中单词的个数。

 

 

解:int  count(r)

 

    char  r[80];

{

  char  prec,nowc;

  int  num,j;

  prec=‘  num=0;

  for(j=0;j<80;j++)

    {

      nowc=r[j];

      if((nowc!=‘ )&&(prec== ))

        num++;

      prec=nowc;

}

         return  num;

}

29.编写算法,求串s所含不同字符的总数和每种字符的个数。

(题源:严蔚敏,C版习题集,p29,4.18)

解:typedef struct{

char  ch;

int  num;

}mytype;

 

void  StrAnalyze(Stringtype S)   //统计串S中字符的种类和个数

   {

     mytype  T[MAXSIZE]         //用结构数组T存储统计结果

     for(i=1;i<=S[0];i++)

      {

        c=S[i];j=0;

        while(T[j].ch && T[j].ch!=c) j++; 

        //在结构数组T中逐元素查找当前字符c是否已记录过.

//当循环停止时,再看是什么原因造成的停止。

if(T[j].ch)  T[j].num++; 

//循环停止时T[j].ch不等于NULL,说明是由于T[j].ch=c所致

//若是 T[j].ch =c所致则说明字符c在串s中已经出现过

//故将其个数加1.

        else  T[j]={c,1}; //否则为首次出现,将其出现次数记为1.

}//for

           

for(j=0;T[j].ch;j++) //打印每个字符在串s中的出现次数。

          printf(“%c: %d\n”,T[j].num);

}//StrAnalyze

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有