算法与数据结构实验报告.docx
- 文档编号:3339389
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:17
- 大小:78.68KB
算法与数据结构实验报告.docx
《算法与数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《算法与数据结构实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
算法与数据结构实验报告
<<算法与数据结构>>
实验报告
班级:
09050142
姓名:
陈飞
学号:
22
实验报告1:
线性表的运用
班级:
09050142姓名:
陈飞学号:
22成绩:
一、实验内容
基本内容:
对于给定稀疏矩阵的压缩存储。
1、稀疏矩阵
2、编写程序实现对稀疏矩阵的压缩存储。
二、设计程序
#include
usingnamespacestd;
#include"stdio.h"
#include"malloc.h"
#defineMAXLEN56
#defineDATATYPE1int
typedefstruct
{
inti,j;
DATATYPE1v;
}NODE;
typedefstruct
{
intm,n,t;
NODEdata[MAXLEN];
}SPMATRIX;
voidprintmatrix(SPMATRIXc)
{
intn,i;
n=c.t;
for(i=1;i<=n;i++)
cout<<"行号="< } main() { SPMATRIXa; inti,j,r,c,t,n; n=1; cout<<"输入矩阵行号数: "; cin>>r; cout<<"输入矩阵列号数: "; cin>>c; a.m=r;a.n=c; cout< for(i=0;i for(j=0;j { cout<<"输入元素"<<"["< "; cin>>t; if(t! =0) { a.data[n].i=i+1; a.data[n].j=j+1; a.data[n].v=t; n=n+1; } } n=n-1; a.t=n; cout<<"稀疏矩阵三元组表示: "< printmatrix(a); return0; } 三、调试结果 四、个人体会 稀疏矩阵中只有很少的几个元素不为零,当一个稀疏矩阵较为庞大时,用一般的方法存储会使得空间资源比较浪费,因此,我们需要把稀疏矩阵压缩,将不为零的元素的行和列以及元素的值记录下来,这样就可以省下很大的空间,编程时出现了些许小的错误,但经过几次调试后修改了过来,实现了稀疏矩阵的压缩。 实验报告2: 栈和队列的运用 班级: 09050142姓名: 陈飞学号: 22成绩: 一、实验内容 基本内容: 给定表达式,利用栈的记忆性计算表达式的值。 编写程序计算表达式5*(3+8/4)-9*6的值 编写实验报告,要求给出实验结果,并附程序。 二、设计程序 #include #include #include #include #include #include #defineerror0 #defineok1 typedefstruct{ int*base; int*top; intstacksize; }sqstack; classCExpression {public: CExpression(); ~CExpression(); public: voidinitstack(sqstack&s); intgettop(sqstack&s); voidpush(sqstack&s,inte); intpop(sqstack&s,int&e); intsetfind(chara,charb[]); charprecede(charop1,charop2,int&flag); intnumlink(intopd,intops,int&flag); intoperate(intn1,charo,intn2,int&flag); public: sqstackopnd; sqstackoptr; private: sqstacks; }; CExpression: : CExpression() {s.top=s.base;} CExpression: : ~CExpression() { }; voidCExpression: : initstack(sqstack&s) { s.base=(int*)malloc(10*sizeof(int)); if(! s.base)exit (1); s.top=s.base; s.stacksize=100; } intCExpression: : gettop(sqstack&s) { inte; e=*(s.top-1); returne; } voidCExpression: : push(sqstack&s,inte) { if(s.top-s.base>=s.stacksize) { s.base=(int*)realloc(s.base,(s.stacksize+10*sizeof(int))); if(! s.base) exit (2); s.top=s.base+s.stacksize; s.stacksize+=10; } *s.top++=e; } intCExpression: : pop(sqstack&s,int&e) { if(s.top==s.base)returnerror; e=*--s.top; returnok; } intCExpression: : setfind(chara,charb[]) { inti,j; i=-1,j=0; while(b[j]! ='\0') if(a==b[j++]){i=j-1;break;} returni; } charCExpression: : precede(charop1,charop2,int&flag) { inti,j; charst1[8]={"+-*/()#"}; charst2[7][8]={">><<<>>",">><<<>>",">>>><>>", ">>>><>>","<<<<<=",">>>>>>","<<<<<="}; i=setfind(op1,st1);j=setfind(op2,st1); if(i>-1&&j>-1) {returnst2[i][j];flag=ok;} elseflag=error; returnerror; } intCExpression: : numlink(intopd,intops,int&flag){ intaa=ops; ops=ops*10+opd-48; if(ops<0&&aa>0||aa>214748364) flag=error;elseflag=ok;//flag=0, returnops; } intCExpression: : operate(intn1,charo,intn2,int&flag) { intresult=0; switch(o){ case'+': flag=0;result=n1+n2; if(n1>=0&&n2>=0&&result<0||n1<=0&&n2<=0&&result>0) {flag=2;returnerror;} else {flag=0;returnresult;} break; case'-': //减法运算 flag=0;result=n1-n2; if(n1>=0&&n2<0&&result<0||n1<=0&&n2>0&&result>0) {flag=2;returnerror;} else {flag=0;returnresult;} break; case'*': //乘法运算 flag=0;result=n1*n2; if(n1>=0&&n2>=0&&result<0||n1<=0&&n2<=0&&result>0) {flag=2;returnerror;} else {flag=0;returnresult;} break; case'/': //除法运算 if(n2! =0) {flag=0;returnn1/n2;break;} else {flag=1;returnerror;break;} } flag=3;returnerror; } voidmain() { CExpressionexpression; //sqstackopnd;//用于存放运算数 //sqstackoptr;//用于存放运算符 inttheta;//用于存放一个运算符 inta,b;//用于存放用于操作的两个数 inttemp;//一个临时的变量 intflag2=0; intflag1; intcn=0; intops=0; charst1[255];//表达式中最多有255个字符 charc;//用于表示当前的字符 for(a=0;a<255;a++)st1[a]='#';//对数组初始化 expression.initstack(expression.opnd); expression.initstack(expression.optr); expression.push(expression.optr,'#'); cin>>st1; temp=strlen(st1); if(st1[temp-1]! ='#')st1[temp]='#'; c=st1[0]; while(c! ='#'||expression.gettop(expression.optr)! ='#'){//cout< c=st1[cn]; if(isdigit(c)){ ops=expression.numlink(c,ops,temp); if(temp==ok) { if(flag2)expression.pop(expression.opnd,temp); flag2=1; expression.push(expression.opnd,ops); cn++; continue; } else {cout<<"表达式的值过大,无法计算! "< } else{ ops=0; flag2=0; temp=expression.precede(expression.gettop(expression.optr),c,temp); if(temp==error){cout<<"表达式有误! 无法求解! "< case'<': expression.push(expression.optr,c);cn++;break;//如果为<,操作符入栈 case'=': expression.pop(expression.optr,temp);cn++;break;//如果为=,操作符出栈 case'>': //如果为>,执行运算操作 expression.pop(expression.optr,theta); expression.pop(expression.opnd,b); expression.pop(expression.opnd,a); expression.operate(a,theta,b,flag1); if(flag1==1){cout<<"表达式有误! 除数不能为0! "< elseif(flag1==2){cout<<"表达式的值过大或过小,无法计算! "< elseif(flag1==3){cout<<"未知道类型的错误!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 实验 报告