数据结构第三次实验报告.docx
- 文档编号:5183245
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:8
- 大小:83.44KB
数据结构第三次实验报告.docx
《数据结构第三次实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构第三次实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构第三次实验报告
数据结构试验报告
实验名称:
串和数组的操作
学生姓名:
王勇
学号:
E01014367
专业:
10级网络工程一班
完成时间:
2012年5月31日
【实验目的】
1.理解并掌握串的逻辑结构和定长顺序存储方式;
2.理解串的相关基本算法;
3.编程对相关算法进行验证。
【实验内容】
1.构造两个串s1和s2,用定长实现存储方式存储,并输出s1和s2;
2.求串s1中第pos个字符起长度为len的子串,将求得的子串复制到串sub中,并输出串sub;
3.连接串sub和串s2,用串T返回连接而成的新串,并输出串T;
4.以s1为主串,sub为模式串,实现KMP算法,求从s1的第一个字符起,主串s1与模式sub首次匹配的字符位置,并且要求输出模式sub的next函数值。
【要求】
1.串值要从终端输入;
2.具体的输入和输出格式不限;
3.算法要具有较好的健壮性,对错误操作要做适当处理。
(二)数组的操作_矩阵的元素存储和快速转置运算
【实验目的】
1.理解数组的逻辑结构和顺序存储方式;
2.掌握对称矩阵和稀疏矩阵的压缩存储方法;
3.掌握稀疏矩阵的三元组顺序表表示法和快速转置运算。
【实验内容】
1.建立一个n*n的对称矩阵A;用动态分配一维数组对矩阵A进行压缩存储,并输出矩阵A;
2.查找对称矩阵A中第row行,第col列(下标从1开始)的元素,输出该元素的值;
3.建立一个稀疏矩阵B,输入其行数,列数和非零元个数,用三元组顺序表存储该矩阵,并按矩阵形式输出稀疏矩阵B;
4.对稀疏矩阵B做快速转置运算得到矩阵C,并按矩阵形式输出转置后的矩阵C。
【要求】
1.矩阵元素要从终端输入;
2.具体的输入和输出格式不限;
3.算法要具有较好的健壮性,对错误操作要做适当处理。
【要求】
1.矩阵元素相关信息要从终端输入;
2.在三元组顺序表中按行优先顺序存放非零元素;
3.具体的输入和输出格式不限;
4.算法要具有较好的健壮性,对错误操作要做适当处理。
试验内容:
1程序:
//#include"stdafx.h"
#include
#defineMAXSTRLEN255
typedefunsignedcharSString[MAXSTRLEN+1];
#defineFALSE-1
#defineTURE0
typedefintstatus;
statusinstring(SString&T){
printf("请输入一串字符\n");
scanf("%s",&T);
returnTURE;
}
statusoutstring(SString&T){
inti;
printf("输出的字符串是:
\n");
for(i=1;i<=T[0];i++){
printf("%c",T[i]);
}
returnTURE;
}
statusSubString(SString&sub,SStrings1,intpos,intlen){
inti;
if(pos<1||pos>s1[0]||len<0||len>s1[0]-pos+1)
returnFALSE;
for(i=1;i<=len;i++){
sub[i]=s1[pos+i-1];
}
sub[0]=len;
}
statusconcat(SString&T,SStringsub,SStrings2){
inti,uncut;
if(sub[0]+s2[0]<=MAXSTRLEN){
for(i=1;i<=sub[0];i++){
T[i]=sub[i];
}
for(i=1;i<=s2[0];i++){
T[sub[0]+i]=s2[i];
}
T[0]=sub[0]+s2[0];
uncut=TURE;
}
elseif(sub[0] for(i=1;i<=sub[0];i++){ T[i]=sub[i]; } for(i=1;i<=MAXSTRLEN-sub[0];i++){ T[sub[0]+i]=s2[i]; } T[0]=MAXSTRLEN; uncut=FALSE; } else{ for(i=0;i<=MAXSTRLEN;i++){ T[i]=s2[i]; uncut=FALSE; } returnuncut; } } statusIndexKMP(SStrings1,SStringsub,intpos){ inti,j,next[15]; i=pos; j=1; while(i<=s1[0]&&j<=sub[0]){ if(j==0||s1[i]==sub[j]){ ++i; ++j; } else j=next[j]; } printf("next函数值是%d\n,j"); if(j>sub[0]) returni-sub[0]; else return0; } voidgetnext(SStringT,intnext[]){ inti,j; i=1; next[1]=0; j=0; while(i if(j==0||T[i]==T[j]){ ++i; ++j; if(T[i]! =T[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } voidmain(){ intpos,len; intnext[15]; SStrings1,s2,sub,T; printf("请输入pos和len的值\n"); scanf("%d",&pos); scanf("%d",&len); printf("初始化字符串\n"); instring(s1); instring(s2); printf("\n"); printf("输出字符串\n"); outstring(s1); outstring(s2); printf("\n"); printf("求子串\n"); SubString(sub,s1,pos,len); printf("\n"); printf("输出子串\n"); outstring(sub); printf("\n"); printf("连接俩字符串\n"); concat(T,sub,s2); printf("\n"); printf("输出连接后的字符串\n"); outstring(T); printf("\n"); printf("实现KMP算法\n"); IndexKMP(s1,sub,pos); getnext(sub,next); } 功能: 实现定长建立s1.s2俩存储字符串,并求s1串上的子串sub,同时能够连接子串sub和S2并输出连接后的串,利用模式匹配算法KMP匹配s1和sub,获得next函数值。 算法设计思想: 构建具有不同功能的函数,如输入字符串,输出字符串,求子串,连接字符串和模式匹配的算法,再利用主函数包涵这些函数,合理安排顺序即可实现。 程序二: //shuju6.cpp: 定义控制台应用程序的入口点。 // #include"stdafx.h" #include #include #include #defineMAXARRAYDIM typedefstruct{ Elemtype*base; intdim; int*bounds; int*condstants; }Array; statusInitArray(Array&A,intdim,intbounds,intconstants){ if(dim<1||dim>MAXARRAYDIM) returnERROR; A.dim=dim; A.bounds=(int*)malloc(dim*sizeof(int)); if(! A.bounds) exit(OVERFLOW); elemtotal=1; va_start(ap,dim); for(i=0;i A.bounds[i]=va_arg(ap,int); if(A.bounds[i]<0) returnUNDERFLOW; elemtotal*=A.bounds[i]; } va_end(ap); A.base=(Elemtype*)malloc(elemtotal*sizeof(Elemtype)); if(! A.base) exit(OVERFLOW); A.constans[dim-1]=1; for(i=dim-2;i>=0;--i) A.constants[i]=A.bounds[i+1]*A.constants[i+1]; returnOK; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第三次 实验 报告