数据结构实验报告3链串文档格式.docx

上传人:b****5 文档编号:21450619 上传时间:2023-01-30 格式:DOCX 页数:11 大小:64.63KB
下载 相关 举报
数据结构实验报告3链串文档格式.docx_第1页
第1页 / 共11页
数据结构实验报告3链串文档格式.docx_第2页
第2页 / 共11页
数据结构实验报告3链串文档格式.docx_第3页
第3页 / 共11页
数据结构实验报告3链串文档格式.docx_第4页
第4页 / 共11页
数据结构实验报告3链串文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构实验报告3链串文档格式.docx

《数据结构实验报告3链串文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告3链串文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构实验报告3链串文档格式.docx

(4)判断串相等StrEqual(s,t)

⏹若两个串s与t相等则返回1;

否则返回0。

(5)串连接Concat(s,t)

⏹返回由两个串s和t连接在一起形成的新串。

(6)求子串SubStr(s,i,j)

⏹返回串s中从第i(1≤i≤StrLength(s))个字符开始的、由连续j个字符组成的子串。

(7)插入InsStr(s,i,t)

⏹将串t插入到串s的第i(1≤i≤StrLength(s)+1)个字符中,即将t的第一个字符作为s的第i个字符,并返回产生的新串

(8)串删除DelStr(s,i,j)

⏹从串s中删去从第i(1≤i≤StrLength(s))个字符开始的长度为j的子串,并返回产生的新串。

(9)串替换RepStr(s,s1,s2)

⏹在串s中,将所有出现的子串s1均替换成s2。

(10)输出串DispStr(s)

⏹输出串s的所有元素值

(11)判断串是否为空IsEmpty(s)

编写主函数

调用上述函数实现下列操作:

(1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk”

(2)复制串t到t1,并输出t1的长度

(3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2

(4)删除s第2个字符开始的5个字符而产生串s3,并输出s3

(5)将串s第2个字符开始的3个字符替换成串s1而产生串s4,并输出s4

(6)提取串s的第8个字符开始的4个字符而产生串s5,并输出s5

(7)将串s1和串t连接起来而产生串s6,并输出s6

(8)比较串s1和s5是否相等,输出结果

程序清单:

#include<

stdio.h>

stdlib.h>

//字符串赋值

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;

}

//字符串复制

voidstrcopy(listring*&

s,listring*t){

listring*p=t->

next,*q,*r;

while(p!

=NULL){

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

q->

data=p->

data;

next=q;

r=q;

p=p->

next;

//字符串长度

intstrlength(listring*s){

inti=0;

listring*p=s->

i++;

returni;

//判断字符串是否相等

intstrequal(listring*s,listring*t){

next,*q=t->

=NULL&

&

q!

p->

data==q->

data){

q=q->

if(p==NULL&

q==NULL)

return1;

else

return0;

//字符串连接

listring*concat(listring*s,listring*t){

listring*str,*p=s->

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

r=str;

p=p->

p=t->

q->

returnstr;

//字符串的子串

listring*substr(listring*s,inti,intj){

intk;

str->

if(i<

=0||i>

strlength(s)||j<

0||i+j-1>

strlength(s))

returnstr;

for(k=0;

k<

i-1;

k++)

for(k=1;

=j;

k++){

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

//字符串插入

listring*insstr(listring*s,inti,listring*t){

next,*p1=t->

strlength(s)+1)

i;

while(p1!

data=p1->

p1=p1->

//字符串删除

listring*delstr(listring*s,inti,intj){

j;

//字符串替换

listring*repstr(listring*s,inti,intj,listring*t){

//字符串输出

voiddispstr(listring*s){

printf("

%c"

p->

data);

printf("

\n"

);

//判断字符串是否为空

voidempstr(listring*s){

if(s->

next==NULL)

字符串是空的!

"

字符串不为空!

voidinitstr(listring*&

s){

s->

//主函数

intmain(void){

listring*s,*s1,*t,*t1,*s2,*s3,*s4,*s5,*s6;

intl;

strassign(s,"

abcdefghijklmn"

strassign(s1,"

xyz"

strassign(t,"

hijk"

strcopy(t1,t);

输出t1的长度:

%d\n"

strlength(t1));

s2=insstr(s,9,s1);

输出s2:

dispstr(s2);

s3=delstr(s,2,5);

输出s3:

dispstr(s3);

s4=repstr(s,2,3,s1);

输出s4:

dispstr(s4);

s5=substr(s,8,4);

输出s5:

dispstr(s5);

s6=concat(s1,t);

输出s6:

dispstr(s6);

l=strequal(s1,s5);

if(l==1)

s1与s5相等!

s1与s5不相等!

return0;

运行结果:

四、实验心得与小结

这次上机的内容是实现链串的基本算法,跟前面学的链表的基本算法是差不多的,所以这次实验还是比较简单的,但也曾出现过一点点小问题,直接把字符串赋值给指针s="

s1="

t="

结果出现如下错误:

通过调用函数voidstrassign(listring*&

s,charcstr[])将其订正为strassign(s,"

后没有错误;

编译、组建都没有错误的情况下,s2是在串s的第9个字符位置插入串s1而产生的,本应出现的结果为

可运行时却出现如下的结果

查找了原因之后才发现在插入s1数据时,都把s的第九个字母的数据赋值给了s2,*p1=s1->

next;

q->

把错误改为q->

后运行正确。

虽然链串的基本算法的操作还是比较简单,但也会犯一些毛病,必须通过上机编译调试才能发现,上机之后才能把自认为对的代码重新纠正过来,从而有所进步。

通过这次的上机实验,我熟悉了串的定义和串的基本操作,掌握了链串的基本运算,加深对串数据结构的理解并逐步培养解决实际问题的编程能力。

五、指导教师评议

成绩评定:

指导教师签名:

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

当前位置:首页 > 初中教育 > 英语

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

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