数据结构实验4顺序串和链串的实现.docx

上传人:b****8 文档编号:9687547 上传时间:2023-02-05 格式:DOCX 页数:20 大小:61.76KB
下载 相关 举报
数据结构实验4顺序串和链串的实现.docx_第1页
第1页 / 共20页
数据结构实验4顺序串和链串的实现.docx_第2页
第2页 / 共20页
数据结构实验4顺序串和链串的实现.docx_第3页
第3页 / 共20页
数据结构实验4顺序串和链串的实现.docx_第4页
第4页 / 共20页
数据结构实验4顺序串和链串的实现.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构实验4顺序串和链串的实现.docx

《数据结构实验4顺序串和链串的实现.docx》由会员分享,可在线阅读,更多相关《数据结构实验4顺序串和链串的实现.docx(20页珍藏版)》请在冰豆网上搜索。

数据结构实验4顺序串和链串的实现.docx

数据结构实验4顺序串和链串的实现

《数据结构》课程实验报告

实验名称

顺序串和链串的实现

实验序号

4

实验日期

2012-5-2

姓名

曹志华

院系

计算机科学与信息工程学院

班级

10104115

学号

1010411501

专业

计算机科学与技术

指导教师

武伟

成绩

教师评语

一、实验目的和要求

1.理解串和一般线性表之间的差异;

2.重点理解在顺序串上和链串上实现串的基本运算算法;

3.掌握串的简单匹配算法和KMP算法;

4.灵活运算串这种数据结构解决一些基本问题。

二、实验项目摘要

实验1:

编写一个程序,实现顺序串的各种基本算法,并在此基础上设计一个主程序完成如下功能:

1.建立串s=“abcdefghefghijklmn”和串s1=“xyz”

2输出串s

3输出串s的长度

4在串s的第9个字符位置插入串s1而产生c串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

实验2:

编写一个程序,实现链串的各种基本算法,并在此基础上设计一个主程序完成如下功能:

1.建立串s=“abcdefghefghijklmn”和串s1=“xyz”

2输出串s

3输出串s的长度

4在串s的第9个字符位置插入串s1而产生c串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

三、实验预习内容

1.首先掌握串的基本概念:

串是由零个或多个字符组成的有限序列;

2.灵活掌握串的存储结构

3.掌握串的顺序存储结构和链式存储结构

●串赋值运算算法

●串复制运算算法

●求串长运算算法

●判断串相等运算算法

●串连接运算算法

●求子串运算算法

●查找子串位置运算算法

●子串插入运算算法

●子串删除运算算法

●子串替换运算算法

●输出串运算算法

4.理解串的模式匹配

三、实验结果与分析

实验结果:

实验1:

 

实验2:

实验分析:

通过本次试验,我了解并掌握了串的基础知识,并利用串的顺序存储结构和链式存储结构,编写了两个程序,串是一种线性结构,是由零个或多个字符组成的优先序列,串的处理在计算机非数值处理中占有重要的地位,如信息检索系统、文字编辑等都以串作为处理对象。

所以串很重要。

在今后的学习中我会多加练习,更熟练的掌握串的应用。

源代码:

实验1:

#include

#include

#defineMaxSize1024

typedefcharElemType;

typedefstruct

{

chardata[MaxSize];

intlength;

}SqString;

//建立串s

voidStrAssign(SqString&s,charcstr[])//串的赋值(s为引用型参数)

{

inti;

for(i=0;cstr[i]!

='\0';i++)

s.data[i]=cstr[i];

s.length=i;

}

//串长运算

intStrLength(SqStrings)

{

return(s.length);

}

//子串插入

SqStringInsStr(SqStrings1,inti,SqStrings2)

{

intj;

SqStringstr;

str.length=0;

if(i<=0||i>s1.length+1)//参数不正常时返回空串

returnstr;

for(j=0;j

i-2】复制到str

str.data[j]=s1.data[j];

for(j=0;j

s2.length-1】复制到str

str.data[i+j-1]=s2.data[j];

for(j=i-1;j

str.data[s2.length+j]=s1.data[j];

str.length=s1.length+s2.length;

returnstr;

}

//删除串

SqStringDelStr(SqStrings,inti,intj)

{

intk;

SqStringstr;

str.length=0;

if(i<=0||i>s.length||i+j>s.length+1)//参数不正常时返回空串

returnstr;

for(k=0;k

i-2】复制到str

str.data[k]=s.data[k];

for(k=i+j-1;k

str.data[k-j]=s.data[k];

str.length=s.length-j;

returnstr;

}

//子串替换

SqStringRepStr(SqStrings,inti,intj,SqStringt)

{

intk;

SqStringstr;

if(i<=0||i>s.length||i+j>s.length)//参数不正常时返回空串

returnstr;

for(k=0;k

i-2】复制到str

str.data[k]=s.data[k];

for(k=0;k

t.length】复制到str

str.data[i+k-1]=t.data[k];

for(k=i+j-1;k

str.data[k-j]=s.data[k];

str.length=s.length-j+t.length;

returnstr;

}

//提取串--求子串

SqStringSuStr(SqStrings,inti,intj)

{

SqStringstr;

intk;

str.length=0;

if(i<=0||i>s.length||j<0||i+j-1>s.length)

returnstr;//参数不正常时返回空串

for(k=i-1;k

str.data[k-i+1]=s.data[k];

str.length=j;

returnstr;

}

//串连接

SqStringConcat(SqStrings,SqStringt)

{

SqStringstr;

inti;

str.length=s.length+t.length;

for(i=0;i

str.data[i]=s.data[i];

for(i=0;i

str.data[s.length+1]=t.data[i];

returnstr;

}

//输出串

intDisStr(SqStrings)

{

inti;

if(s.length>0)

{

for(i=0;i

printf("%c",s.data[i]);

printf("\n");

}

}

//主函数

voidmain()

{

SqStrings,s1,s2,s3,s4;

printf("1.建立串s=abcdefghefghijklmn和串s1=xyz");

printf("\n");

StrAssign(s,"abcdefghijklmn");

StrAssign(s1,"xyz");

printf("\n");

printf("2.输出串s");DisStr(s);

printf("\n");

printf("3.输出串s的长度:

%d\n",StrLength(s));

printf("\n");

printf("4.在串s的第9个字符位置插入串s1而产生c串s2\n");

s2=InsStr(s,9,s1);

printf("\n");

printf("5.输出s2:

");DisStr(s2);

printf("\n\n");

printf("6.删除串s第2个字符开始的5个字符替换成串s2\n");

s2=DelStr(s,2,5);

printf("\n");

printf("7.输出串s2:

");DisStr(s2);

printf("\n");

printf("8.将串s的第2个字符开始的5个字符替换成串s1而产生串s2\n");

s2=RepStr(s,2,5,s1);

printf("\n");

printf("9.输出串s2:

");DisStr(s2);

printf("\n");

printf("10.提取串s的第2个字符开始的10个字符而产生串s3\n");

s3=SuStr(s,2,10);

printf("\n");

printf("11.输出串s3:

");DisStr(s2);

printf("\n");

printf("12.将串s1和串s2连接起来而产生串s4\n");

s4=Concat(s1,s2);

printf("\n");

printf("13.输出串s4:

");DisStr(s2);

printf("\n");

}

实验2:

#include

#include

#defineMaxSize1024

typedefcharElemType;

typedefstructsnode

{

chardata;

structsnode*next;

}LiString;

//建立串--赋值

voidStrAssign(LiString*&s,charcstr[])

{

inti;

LiString*r,*p;

s=(LiString*)malloc(sizeof(LiString));

r=s;

for(i=0;cstr[i]!

='\0';i++)

{

p=(LiString*)malloc(sizeof(LiString));

p->data=cstr[i];

r->next=p;r=p;

}

r->next=NULL;

}

////串长运算

intStrLength(LiString*s)

{

inti=0;

LiString*p=s->next;

while(p!

=NULL)

{

i++;

p=p->next;

}

returni;

}

//子串插入

LiString*InsStr(LiString*s,inti,LiString*t)

{

intk;

LiString*str,*p=s->next,*p1=t->next,*q,*r;

str=(LiString*)malloc(sizeof(LiString));

str->next=NULL;

r=str;

if(i<=0||i>StrLength(s)+1)

returnstr;

for(k=1;k

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

while(p1!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p1->data;

r->next=q;r=q;

p1=p1->next;

}

while(p!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

r->next=NULL;

returnstr;

}

//删除串

LiString*DelStr(LiString*s,inti,intj)

{

intk=0;

LiString*str,*p=s->next,*q,*r;

str=(LiString*)malloc(sizeof(LiString));

str->next=NULL;

r=str;

if(i<=0||i>StrLength(s)||j<0)

returnstr;

for(k=1;k

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

for(k=0;k

p=p->next;

while(p!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

r->next=NULL;

returnstr;

}

////子串替换

LiString*RepStr(LiString*s,inti,intj,LiString*t)

{

intk;

LiString*str,*p=s->next,*p1=t->next,*q,*r;

str=(LiString*)malloc(sizeof(LiString));

r=str;

if(i<=0||i>StrLength(s)||j<0||i+j-1>StrLength(s))

returnstr;

for(k=0;k

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;q->next=NULL;

r->next=q;r=q;

p=p->next;

}

for(k=0;k

p=p->next;

while(p1!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p1->data;q->next=NULL;

r->next=q;r=q;

p1=p1->next;

}

while(p!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;q->next=NULL;

r->next=q;r=q;

p=p->next;

}

r->next=NULL;

returnstr;

}

//提取串--求子串

LiString*SuStr(LiString*s,inti,intj)

{

intk=0;

LiString*str,*p=s->next,*q,*r;

str=(LiString*)malloc(sizeof(LiString));

str->next=NULL;

r=str;

if(i<=0||i>StrLength(s)||j<0||i+j-1>StrLength(s))

returnstr;

for(k=0;k

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

r->next=NULL;

returnstr;

}

//串连接

LiString*Concat(LiString*s,LiString*t)

{

LiString*str,*p=s->next,*q,*r;

str=(LiString*)malloc(sizeof(LiString));

r=str;

while(p!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

p=t->next;

while(p!

=NULL)

{

q=(LiString*)malloc(sizeof(LiString));

q->data=p->data;

r->next=q;r=q;

p=p->next;

}

r->next=NULL;

returnstr;

}

//输出串

intDisStr(LiString*s)

{

LiString*p=s->next;

while(p!

=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

//主函数

voidmain()

{

LiString*s,*s1,*s2,*s3,*s4;

printf("1.建立串s=abcdefghefghijklmn和串s1=xyz");

printf("\n");

StrAssign(s,"abcdefghijklmn");

StrAssign(s1,"xyz");

printf("\n");

printf("2.输出串s");DisStr(s);

printf("\n");

printf("3.输出串s的长度:

%d\n",StrLength(s));

printf("\n");

printf("4.在串s的第9个字符位置插入串s1而产生c串s2\n");

s2=InsStr(s,9,s1);

printf("\n");

printf("5.输出s2:

");DisStr(s2);

printf("\n\n");

printf("6.删除串s第2个字符开始的5个字符替换成串s2\n");

s2=DelStr(s,2,5);

printf("\n");

printf("7.输出串s2:

");DisStr(s2);

printf("\n");

printf("8.将串s的第2个字符开始的5个字符替换成串s1而产生串s2\n");

s2=RepStr(s,2,5,s1);

printf("\n");

printf("9.输出串s2:

");DisStr(s2);

printf("\n");

printf("10.提取串s的第2个字符开始的10个字符而产生串s3\n");

s3=SuStr(s,2,10);

printf("\n");

printf("11.输出串s3:

");DisStr(s2);

printf("\n");

printf("12.将串s1和串s2连接起来而产生串s4\n");

s4=Concat(s1,s2);

printf("\n");

printf("13.输出串s4:

");DisStr(s2);

printf("\n");

}

注:

空间不够,可以增加页码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1