数据结构栈和队列的基本操作.docx

上传人:b****6 文档编号:6672235 上传时间:2023-01-08 格式:DOCX 页数:16 大小:100.08KB
下载 相关 举报
数据结构栈和队列的基本操作.docx_第1页
第1页 / 共16页
数据结构栈和队列的基本操作.docx_第2页
第2页 / 共16页
数据结构栈和队列的基本操作.docx_第3页
第3页 / 共16页
数据结构栈和队列的基本操作.docx_第4页
第4页 / 共16页
数据结构栈和队列的基本操作.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构栈和队列的基本操作.docx

《数据结构栈和队列的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构栈和队列的基本操作.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构栈和队列的基本操作.docx

数据结构栈和队列的基本操作

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

实验名称

实验序号

学号

姓名

班级

实验日期

2014-12-13

指导教师

成绩

一、实验目的和要求

目的:

掌握栈和队列数据结构的描述,学会针对栈和队列的基本操作。

要求:

实验前了解C语言结构化程序设计思想,结构体及指针的应用。

二、实验具体内容及步骤

1.完成课本p76-P78串的定长顺序存储代码输入和调试。

2.利用以上串的定长顺序存储代码,实现串的模式匹配算法(p83)。

3.利用以上代码,编写算法,从串s中删除所有和串t相同的子串,串采用定长顺序存储。

4.完成课本p79-P81串的堆分配存储代码输入和调试。

5.利用题4代码,编写算法,实现串的基本操作Replace(&S,T,V),串采用堆分配存储。

三、实验结果与分析(程序代码按序粘贴在下面,补充的代码用红色加粗显示,并将运行结果截图)

1.

#include"stdio.h"

#definemaxsize100

typedefstruct

{

charstr[maxsize];

intlen;

}seqstring;

//2.求串的长度

intlenstr(seqstring*s)

{

inti=0;

while(s->str[i]!

='\0')

i++;

returni;

}

//1.创建字符串

seqstring*cseatestr(seqstring*s)

{

gets(s->str);

s->len=lenstr(s);

returns;

}

//3.串连接

voidconcatstr(seqstring*r1,seqstring*r2)

{

inti;

if(r1->len+r2->len>maxsize)

printf("两个串太长,溢出!

");

else

{

for(i=0;ilen;i++)

r1->str[r1->len+i]=r2->str[i];

r1->str[r1->len+i]='\0';

r1->len=r1->len+r2->len;

}

}

//4.求子串

voidsubstr(seqstring*r,inti,intj)

{

seqstring*r1;

intk;

if(i+j-1>r->len)

{

printf("子串超界");

return;

}

else

{

for(k=0;k

r1->str[k]=r->str[i+k-1];

r1->len=j;

r1->str[r1->len]='\0';

}

printf("取出字符为:

");

puts(r1->str);

}

//5.串相等的比较

intequalstr(seqstring*r1,seqstring*r2)

{

inti;

for(i=0;ilen&&ilen;i++)

if(r1->str[i]!

=r2->str[i])

return(r1->str[i]-r2->str[i]);

return(r1->len-r1->len);

}

//6.插入子串

seqstring*insstr(seqstring*s,seqstring*s1,inti)

{

intk;

if(i>=s->len||s->len+s1->len>maxsize)

printf("\n不能插入!

\n");

else

{

for(k=s->len-1;k>=i;k--)

s->str[s1->len+k]=s->str[k];

for(k=0;klen;k++)

s->str[i+k]=s1->str[k];

s->len=s->len+s1->len;

s->str[s->len]='\0';

}

returns;

}

//7.删除子串

voiddelstr(seqstring*r,inti,intj)

{

intk;

if(i+j-1>r->len)

printf("所要删除的子串超界!

");

else

{

for(k=i+j;klen;k++,i++)

r->str[i]=r->str[k];

r->len=r->len-j;

r->str[r->len]='\0';

}

}

voidmain(){}

2.

#include"stdio.h"

#include"string.h"

#definemaxsize100

typedefstruct

{

charstr[maxsize];

intlen;

}seqstring;

intindex(seqstrings,seqstringt)

{

inti,j,k,m,n;

m=s.len;

n=t.len;

i=0,k=0;

while((i<=m-n)&&(!

k))

{

j=0,k=1;

while((j<=n-1)&&k)

if(t.str[j]==s.str[i+j])

j++;

else

k=0;++i;

}

if(k)

returni-1;

else

return-1;

}

voidmain()

{

seqstrings,t;

intsum;

printf("请输入主串s:

");

scanf("%s",s.str);

s.len=strlen(s.str);

printf("请输入所需查找的子串t:

");

scanf("%s",t.str);

t.len=strlen(t.str);

sum=index(s,t);

printf("\n");

if(sum==-1)

printf("nofound\n");

else

printf("所需查找子串第一次出现的位置是:

%d",sum+1);

}

3.

#include

#include

#defineMaxsize20

typedefstruct

{

chardata[Maxsize];

intlength;

}SqString;

voidInitString(SqString*&S)

{

S=(SqString*)malloc(sizeof(SqString));

S->length=0;

}

voidCreateString(SqString*&S,charstr[])//初始化字符串

{

inti=0;

printf("创建一个字符串:

\n");

for(i=0;str[i]!

='\0';i++)

{

S->data[i]=str[i];

printf("%c",S->data[i]);

}

S->data[i]='\0';

S->length=i;

printf("\n当前字符串长度:

%d\n",S->length);

}

voidDeleteString(SqString*S)//删除部分字符串

{

SqString*str;

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

str->length=0;

inti=0,j=0;

inttemp;

i=rand()%(S->length);

j=rand()%(S->length);

if(i>j)

{

temp=i;

i=j;

j=temp;

}

str->length=S->length-(j-i+1);

j=j+1;

for(intk=0;k

{

str->data[k]=S->data[k];

}

for(k=0;S->data[j+k]!

='\0';k++)

{

str->data[i+k]=S->data[k+j];

}

str->data[i+k]='\0';

printf("当前所删除部分子字符串后的新字符串为:

%s\n其长度为:

%d\n",str->data,str->length);

}

intmain(void)

{

srand((unsigned)time(NULL));

SqString*S;

charstr[25];

printf("请输入任意一个字符串:

\n");

scanf("%s",str);

InitString(S);

CreateString(S,str);

DeleteString(S);

return0;

}

4.

#include"stdio.h"

#include"stdlib.h"

#definenull0

typedefstruct

{

char*str;

intlen;

}hstring;

//1.串的赋值

intstringassgin(hstring*s,char*r)

{

intlen,i=0;

if(s->str!

=null)

free(s->str);

while(r[i]!

='\0')i++;

len=i;

if(len!

=0)

{

s->str=(char*)malloc(len);

if(s->str==null)return(0);

for(i=0;i

s->str[i]=r[i];

}

elses->str=null;

s->len=len;

return

(1);

}

//2.判断串是否为空

intstringempty(hstring*s)

{

if(s->len==0)return

(1);

elsereturn(0);

}

//3.求串的长度

intlength(hstring*s)

{

returns->len;

}

//4.串连接

hstring*concat(hstring*s1,hstring*s2)

{

intlen,i;

hstring*s;

stringassgin(s,s1->str);

len=s1->len+s2->len;

free(s1->str);

s1->str=(char*)malloc((len+1)*sizeof(char));

if(!

s1)return(0);

for(i=0;i=s->len;i++)

s1->str[i]=s->str[i];

for(i=s->len;ilen+s2->len;i++)

s1->str[i]=s2->str[i-s->len];

s1->len=s->len+s2->len;

free(s);

return(s1);

}

//5.串的插入函数

intstringinsert(hstring*s,intpos,hstring*t)

{

inti;

char*temp;

if(pos<0||pos>s->len||s->len==0)return(0);

temp=(char*)malloc(s->len+t->len);

if(temp==null)return(0);

for(i=0;i

temp[i]=s->str[i];

for(i=0;ilen;i++)

temp[i+pos]=s->str[i];

for(i=pos;ilen;i++)

temp[i+t->len]=s->str[i];

s->len+=t->len;

free(s->str);

s->str=temp;

return

(1);

}

//6.删除子串函数

intstrdelete(hstring*s,intpos,intlen)

{

inti;

char*temp;

if(pos<0||pos>(s->len-len))

return(0);

temp=(char*)malloc(s->len-len);

if(temp==null)

return(0);

for(i=0;i

temp[i]=s->str[i+len];

s->len=s->len-len;

free(s->str);

s->str=temp;

return

(1);

}

//7.串的定位

intindex(hstring*s1,hstring*s2)

{

intlen1,len2;

inti,j;

len1=length(s1);len2=length(s2);

i=0,j=0;

while(i

{

if(s1->str[i]==s2->str[j])

{

i++;

j++;

}

else

i=i-j+1;j=0;

}

if(j==len2)returni-len2+1;

elsereturn0;

}

voidmain(){}

5.

#include"stdio.h"

#include"string.h"

Replace(char*S,intstart,char*T,char*V)

{

inti,j,k,l,n,m,s,count=0,signal=0;

n=strlen(T);/*求字符串长度*/

m=strlen(V);

s=strlen(S);

for(i=start-1;S[i]!

='\0';i++)/*开始查找*/

{k=i;

j=0;

while(S[k]==T[j])/*与子串T对比*/

{

k++;

j++;

}

if(T[j]=='\0')/*判断是否T存在*/

{

if(m-n>0)/*第一种情况,字符串V比T长的情况下*/

{

for(l=s+(m-n)*(count+1)-1;l>=k;l--)

S[l]=S[l-m+n];

for(l=k-n,j=0;j

S[l]=V[j];

count++;

}

elseif(m-n<0)/*第二种情况,字符串V比T短的情况下*/

{

for(l=k-n,j=0;j

S[l]=V[j];

for(;l

S[l]=S[l+n-m];

count++;

}

else/*第三种情况,T和V一样长*/

{

for(l=k-1;l>=k-n;l--,j--)

S[l]=V[j-1];

}

signal=1;

}

}

S[s+(m-n)*count]='\0';

if(signal)return1;/*返回值*/

elsereturn0;

}

voidmain()

{

chara[100],b[100],c[100];

intn;

printf("请输入字符串S:

");

gets(a);

printf("请输入查找的子串T:

");

gets(b);

printf("请输入替换的子串V:

");

gets(c);

printf("请输入开始查找的位置start:

");

scanf("%d",&n);

if(Replace(a,n,b,c))

printf("替换后的结果是:

%s\n",a);

else

printf("S中不存在子串T!

\n");

}

四、指导老师评语

 

指导老师签名:

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

当前位置:首页 > 高中教育 > 小学教育

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

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