数据结构第三次实验报告Word格式.docx
- 文档编号:18154873
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:8
- 大小:83.44KB
数据结构第三次实验报告Word格式.docx
《数据结构第三次实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构第三次实验报告Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
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<
stdio.h>
#defineMAXSTRLEN255
typedefunsignedcharSString[MAXSTRLEN+1];
#defineFALSE-1
#defineTURE0
typedefintstatus;
statusinstring(SString&
T){
printf("
请输入一串字符\n"
);
scanf("
%s"
&
T);
returnTURE;
}
statusoutstring(SString&
inti;
输出的字符串是:
\n"
for(i=1;
i<
=T[0];
i++){
printf("
%c"
T[i]);
}
statusSubString(SString&
sub,SStrings1,intpos,intlen){
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;
=sub[0];
T[i]=sub[i];
}
=s2[0];
T[sub[0]+i]=s2[i];
T[0]=sub[0]+s2[0];
uncut=TURE;
elseif(sub[0]<
MAXSTRLEN){
for(i=1;
=MAXSTRLEN-sub[0];
T[0]=MAXSTRLEN;
uncut=FALSE;
else{
for(i=0;
=MAXSTRLEN;
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];
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;
T[0]){
if(j==0||T[i]==T[j]){
++i;
++j;
if(T[i]!
=T[j])
next[i]=j;
else
next[i]=next[j];
else
voidmain(){
intpos,len;
intnext[15];
SStrings1,s2,sub,T;
请输入pos和len的值\n"
scanf("
%d"
pos);
len);
初始化字符串\n"
instring(s1);
instring(s2);
输出字符串\n"
outstring(s1);
outstring(s2);
求子串\n"
SubString(sub,s1,pos,len);
输出子串\n"
outstring(sub);
连接俩字符串\n"
concat(T,sub,s2);
输出连接后的字符串\n"
outstring(T);
实现KMP算法\n"
IndexKMP(s1,sub,pos);
getnext(sub,next);
功能:
实现定长建立s1.s2俩存储字符串,并求s1串上的子串sub,同时能够连接子串sub和S2并输出连接后的串,利用模式匹配算法KMP匹配s1和sub,获得next函数值。
算法设计思想:
构建具有不同功能的函数,如输入字符串,输出字符串,求子串,连接字符串和模式匹配的算法,再利用主函数包涵这些函数,合理安排顺序即可实现。
程序二:
//shuju6.cpp:
定义控制台应用程序的入口点。
//
#include"
#include<
stdarg.h>
#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;
dim;
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));
A.base)
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第三次 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)