数据结构栈和队列的基本操作.docx
- 文档编号:6672235
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:16
- 大小:100.08KB
数据结构栈和队列的基本操作.docx
《数据结构栈和队列的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构栈和队列的基本操作.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构栈和队列的基本操作
《数据结构》课程实验实训报告
实验名称
串
实验序号
学号
姓名
班级
实验日期
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;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;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;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;k 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;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;i temp[i+pos]=s->str[i]; for(i=pos;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"); } 四、指导老师评语 指导老师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 基本 操作