数据结构顺序串和链串实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程实验报告
实验名称顺序串和链串实验序号 4 实验日期
姓名院系班级学号
专业指导教师成绩
教师评语
一、实验目的和要求
(1)理解串和一般线形表之间的差异
(2)重点掌握在顺序串上和链串上实现串的基本运算算法
(3)掌握串的简单匹配算法和KMP算法
(4)灵活运用串这种数据结构解决一些综合应用问题
二、实验项目摘要
编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个主程序并完成如下功能:(1)建立串s=”abcdefghefghijklmn”和串sl=”xyz”;
(2)输出串s;
(3)输出串s的长度;
(4)在串s的第9个字符位置插入串sl而产生串s2;
(5)输出串s2;
(6)删除串s的第2个字符开始的5个字符而产生的串s2;
(7)输出串s2;
(8)将串s的第2个字符开始的5个字符替换成串s1而产生串s2;
(9)输出串s2;
(10)提取串s的第2个字符开始的10个字符而产生串s3;
(11)输出串s3;
(12)将串s1和串s2连接起来而产生串s4;
(13)输出串s4。
编写一个程序algo4-2.cpp,实现链串的各种基本运算,并在此基础上设计一个主程序并完成如下功能:(1)建立串s=”abcdefghefghijklmn”和串sl=”xyz”;
(2)输出串s;
(3)输出串s的长度;
(4)在串s的第9个字符位置插入串sl而产生串s2;
(5)输出串s2;
(6)删除串s的第2个字符开始的5个字符而产生的串s2;
(7)输出串s2;
(8)将串s的第2个字符开始的5个字符替换成串s1而产生串s2;
(9)输出串s2;
(10)提取串s的第2个字符开始的10个字符而产生串s3;
(11)输出串s3;
(12)将串s1和串s2连接起来而产生串s4;
(13)输出串s4。
三、实验预习内容
顺序串的基本运算的算法(StrAssign(s,cstr),StrCopy(s,t),StrEquat(s,t),StrLength(s),Concat(s,t),SubStr (s,i,j),InsStr(s1,i,s2),DelStr(s,i,j),RepStr(s,i,j,t),DispStr(s))
链串的基本运算的算法(StrAssign(s,cstr),StrCopy(s,t),StrEquat(s,t),StrLength(s),Concat(s,t),SubStr (s,i,j),InsStr(s1,i,s2),DelStr(s,i,j),RepStr(s,i,j,t),DispStr(s))
三、实验结果与分析
4-1
#include
#define MaxSize 100
typedef struct
{ char data[MaxSize];
int length;
} SqString;
void StrAssign(SqString &s,char cstr[])
{ int i;
for (i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.length=i;
}
void StrCopy(SqString &s,SqString t)
{ int i;
for (i=0;i s.data[i]=t.data[i]; s.length=t.length; } int StrEqual(SqString s,SqString t) { int same=1,i; if (s.length!=t.length) else for (i=0;i if (s.data[i]!=t.data[i]) { same=0; break; } return same; } int StrLength(SqString s) { return s.length; } SqString Concat(SqString s,SqString t) { SqString str; int i; str.length=s.length+t.length; for (i=0;i str.data[i]=s.data[i]; for (i=0;i str.data[s.length+i]=t.data[i]; return str; } SqString SubStr(SqString s,int i,int j) { SqString str; int k; str.length=0; if (i<=0 || i>s.length || j<0 || i+j-1>s.length) return str; for (k=i-1;k str.data[k-i+1]=s.data[k]; str.length=j; return str; } SqString InsStr(SqString s1,int i,SqString s2) { int j; SqString str; str.length=0; if (i<=0 || i>s1.length+1)