数据结构Word文档格式.docx
《数据结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
顺序串(除主函数外)
StrAssign(SqString&
str,charcstr[]):
由串常量cstr创建串str
StrCopy(SqString&
s,SqStringt):
将串t复制到串S
StrEqual(SqStrings,SqStringt):
判断两个串S和t是否相同
Strlength(SqStrings):
求串S的长度
Concat(SqStrings,SqStringt):
将串t连接到串s之后产生新串
SubStr(SqStrings,inti,intj):
由串s的第i个字符开始的j个字符产生新串
InsStr(SqStrings1,inti,SqStrings2):
由串s2插入到串s1的第i个位置处
DelStr(SqStrings,inti,intj):
删除串s的第i个字符开始的j个字符产生新串
RepStr(SqStrings,inti,intj,SqStringt):
将串s的第i个字符开始的j个字符替换成串t产生新串
DispStr(SqStrings):
输出串s的所有元素
链串(除主函数外)
StrAssign(LiString*&
s,chart[]):
StrCopy(LiString*&
s,LiString*t):
StrEqual(LiString*s,LiString*t):
Strlength(LiString*s):
Concat(LiString*s,LiString*t):
SubStr(LiString*s,inti,intj):
InsStr(LiString*s1,inti,LiString*s2):
DelStr(LiString*s,inti,intj):
删除串s的第i个字符开始的j个字符产生
RepStr(LiString*s,inti,intj,LiString*t):
DispStr(LiString*str):
程序代码清单…
顺序串的源代码:
//文件名:
aglo4-1.cpp
#include<
stdio.h>
#defineMaxSize100//最多的字符个数
typedefstruct
{
chardata[MaxSize];
//定义可容纳MaxSize个字符的空间
intlength;
//标记当前实际串长
}SqString;
voidStrAssign(SqString&
str,charcstr[])//由串常量cstr创建串str
inti;
for(i=0;
cstr[i]!
='
\0'
;
i++)
str.data[i]=cstr[i];
str.length=i;
}
voidStrCopy(SqString&
s,SqStringt)//将串t复制到串S
i<
t.length;
s.data[i]=t.data[i];
s.length=t.length;
intStrEqual(SqStrings,SqStringt)//判断两个串S和t是否相同
intsame=1,i;
if(s.length!
=t.length)//长度不相等时返回0
same=0;
else
{
for(i=0;
s.length;
if(s.data[i]!
=t.data[i])//有一个对应字符不相同时返回0
same;
}
returnsame;
intStrlength(SqStrings)//求串S的长度
returns.length;
SqStringConcat(SqStrings,SqStringt)//将串t连接到串s之后产生新串
SqStringstr;
str.length=s.length+t.length;
i++)//将s.data[0..s.length-1]复制到str
str.data[i]=s.data[i];
i++)////将t.data[0..t.length-1]复制到str
str.data[s.length+i]=t.data[i];
returnstr;
SqStringSubStr(SqStrings,inti,intj)//由串s的第i个字符开始的j个字符产生新串
intk;
str.length=0;
if(i<
=0||i>
s.length||j<
0||i+j-1>
s.length)
printf("
参数不正确\n"
);
//参数不正确时返回空串
returnstr;
for(k=i-1;
k<
i+j-1;
k++)//将s.data[i...i+j]复制到str
str.data[k-i+1]=s.data[k];
str.length=j;
SqStringInsStr(SqStrings1,inti,SqStrings2)//由串s2插入到串s1的第i个位置处
intj;
0||i>
s1.length+1)
returns1;
for(j=0;
j<
i-1;
j++)//将s1.data[0...i+2]复制到str
str.data[j]=s1.data[j];
s2.length;
j++)//将s2.data[0...s2.length-1]复制到str
str.data[i+j-1]=s2.data[j];
for(j=i-1;
s1.length;
j++)//将s1.data[i-1...s1.length-1]复制到str
str.data[s2.length+j]=s1.data[j];
str.length=s1.length+s2.length;
SqStringDelStr(SqStrings,inti,intj)//删除串s的第i个字符开始的j个字符产生新串
s.length||i+j>
s.length+1)
{
//参数不正确时返回空串
for(k=0;
k++)//将s.data[0...i+2]复制到str
str.data[k]=s.data[k];
for(k=i+j-1;
k++)//将s.data[i+j-1...s1.length-1]复制到str
str.data[k-j]=s.data[k];
str.length=s.length-j;
SqStringRepStr(SqStrings,inti,intj,SqStringt)//将串s的第i个字符开始的j个字符替换成串t产生新串
s.length||i+j-1>
s.length)//参数不正确时返回空串
k++)//将s1.data[0...i+2]复制到str
k++)//将t.data[0...t.length-1]复制到str
str.data[i+k-1]=t.data[k];
k++)//将s.data[i+j-1...s1.length-1]复制到str
str.data[t.length+k-j]=s.data[k];
str.length=s.length-j+t.length;
voidDispStr(SqStrings)//输出串s的所有元素
if(s.length>
0)
printf("
%c"
s.data[i]);
\n"
exp4-1.cpp
#defineMaxSize100
externvoidStrAssign(SqString&
str,charcstr[]);
externvoidStrCopy(SqString&
s,SqStringt);
externintStrEqual(SqStrings,SqStringt);
externintStrlength(SqStrings);
externSqStringConcat(SqStrings,SqStringt);
externSqStringSubStr(SqStrings,inti,intj);
externSqStringInsStr(SqStrings1,inti,SqStrings2);
externSqStringDelStr(SqStrings,inti,intj);
externSqStringRepStr(SqStrings,inti,intj,SqStringt);
externvoidDispStr(SqStringstr);
voidmain()
SqStrings,s1,s2,s3,s4;
printf("
(1)建立串s和串s1\n"
StrAssign(s,"
abcdefghefghijklmn"
StrAssign(s1,"
xyz"
(2)输出串s:
"
DispStr(s);
(3)串s的长度:
%d\n"
Strlength(s));
(4)由串s的第9个字符位置插入串s1而产生串s2\n"
s2=InsStr(s,9,s1);
(5)输出串s2:
DispStr(s2);
(6)删除串s的第2个字符开始的5个字符产生新串s2\n"
s2=DelStr(s,2,3);
(7)输出串s2:
(8)将串s的第2个字符开始的5个字符替换成s1产生新串s2\n"
s2=RepStr(s,2,5,s1);
(9)输出串s2:
(10)提取串s的第2个字符开始的10个字符产生新串s3\n"
s3=SubStr(s,2,10);
(11)输出串s3:
DispStr(s3);
(12)将串s1连接到串s2之后产生新串s4\n"
s4=Concat(s1,s2);
(13)输出串s4:
DispStr(s4);
链串的源代码:
aglo4-2.cpp
malloc.h>
typedefstructsnode
chardata;
structsnode*next;
}LiString;
voidStrAssign(LiString*&
s,chart[])
LiString*r,*p;
s=(LiString*)malloc(sizeof(LiString));
s->
next=NULL;
r=s;
t[i]!
p=(LiString*)malloc(sizeof(LiString));
p->
data=t[i];
r->
next=p;
r=p;
voidStrCopy(LiString*&
s,LiString*t)
LiString*r,*p=t->
next,*q;
while(p!
=NULL)//将t的所有结点复制到s
q=(LiString*)malloc(sizeof(LiString));
q->
data=p->
data;
q->
p=p->
next;
intStrEqual(LiString*s,LiString*t)
LiString*p=t->
next,*q=t->
=NULL&
&
q!
p->
data==q->
data)
q=q->
if(p==NULL&
q==NULL)
return1;
return0;
intStrlength(LiString*s)
inti=0;
LiString*p=s->
=NULL)
i++;
p=p->
returni;
LiString*Concat(LiString*s,LiString*t)
LiString*r,*str,*p=s->
str=(LiString*)malloc(sizeof(LiString));
r=str;
=NULL)//将t的所有结点复制到str
p=t->
next=q;
r=q;
LiString*SubStr(LiString*s,inti,intj)
LiString*str,*p=s->
next,*q,*r;
str->
Strlength(s)||j<
Strlength(s))
k++)
for(k=1;
=j;
k++)//将s的第i个结点开始的j个结点复制到str
LiString*InsStr(LiString*s,inti,LiString*t)
next,*p1=t->
Strlength(s)+1)
k++)//将s的前i个结点复制到str
while(p1!
=NULL)//将t的所有结点复制到str
data=p1->
p1=p1->
=NULL)//将*p及其后的结点复制到str
LiString*DelStr(LiString*s,inti,intj)
k++)//将s的前i-1个结点复制到str
k++)//让p沿next跳j个结点
LiString*RepStr(LiString*s,inti,intj,LiString*t)
j;