山大网络《数据结构》试卷( C 卷) 下载本文

v1.0 可编辑可修改 1. 设有一个长度为s的字符串,其字符顺序存放在一个一维数组的第1至第s个单元中(每个单元存放一个字符)。现要求从此串的第m个字符以后删除长度为t的子串,m

2. 设s和t是表示成单链表的两个串,试编写一个找出s中第1个不在t中出现的字符(假定每个结点只存放1个字符)的算法。 解:1、算法描述为:

int delete(r,s,t,m) //从串的第m个字符以后删除长度为t的子串 char r[ ]; int s,t,m; { int i,j;

for(i=1;i<=m;i++) r[s+i]=r[i];

for(j=m+t-i;j<=s;j++) r[s-t+j]=r[j]; return (1); } //delete

2、算法思想为:

(1)链表s中取出一个字符;将该字符与单链表t中的字符依次比较;

(2)当t中有与从s中取出的这个字符相等的字符,则从t中取下一个字符重复以上比较; (3)当t中没有与从s中取出的这个字符相等的字符,则算法结束。

设单链表类型为LinkList;注意,此时类型 LinkList中的data成分为字符类型。 LinkString find(s,t) LinkString *s, *t; { LinkString *ps, *pt; 5

v1.0 可编辑可修改 ps=s; while(ps!=NULL) { pt=t;

while((pt!=NULL)&&(ps->data!=pt->data)) pt=pt->next; if(pt= =NULL) ps=NULL; else

{ ps=ps->next; s=ps; } } return s; } //find

6