数据结构实验2.docx
- 文档编号:11558984
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:8
- 大小:23.19KB
数据结构实验2.docx
《数据结构实验2.docx》由会员分享,可在线阅读,更多相关《数据结构实验2.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构实验2
《数据结构》实验报告
年级_2012级__学号_姓名__成绩______
专业_计算机科学与技术实验地点___指导教师_
实验项目实验二栈实验性质基础性实验日期:
一、实验目的:
1、掌握栈及其基本操作的实现。
2、进一步掌握实现数据结构的编程方法。
二、实验内容与要求:
1、实验题目一:
顺序栈的定义及其操作算法的实现
要求:
编程实现顺序栈表的类型定义及顺序表的初始化操作、入栈操作、出栈操作、取栈顶元素操作、输出操作等,并对其进行验证。
2、实验题目二:
利用栈实现进制转换
要求:
利用栈(顺序栈或链式栈)实现进制转换问题
3、实验题目三:
算术表达式求值
要求:
利用题目一所定义的栈(顺序栈或链栈)实现算术表达式求值运算,并进行验证给出结果。
三、实验问题描述
这里限定的算术表达式求值问题是:
用户输入一个包含“+”、“—”、“*”、“/”、正整数和圆括号的合法算术表达式,计算该表达
式的运算结果。
四、实验步骤
1.实验问题分析
数据组织:
在设计相关算法中用到栈,这里采用顺序栈存储结构
设计运算算法:
①将算术表达式转换成后缀表达式
②后缀表达式求值
③设计求解程序
④运行结果
2.功能(函数)设计
voidmain()
{
charexp[]="(56-20)/(4+2)";
charpostexp[MaxSize];
trans(exp,postexp);
printf("中缀表达式:
%s\n",exp);
printf("后缀表达式:
%s\n",postexp);
printf("表达式的值:
%g\n",compvalue(postexp));
}
五、实验结果(程序)及分析
#include
usingnamespacestd;
#defineMaxOp50
#defineMaxSize50
struct
{charch;
intpri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6}},
rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1}};
intleftpri(charop)
{
inti;
for(i=0;i { if(lpri[i].ch==op) returnlpri[i].pri; } } intrightpri(charop) { inti; for(i=0;i { if(rpri[i].ch==op) returnrpri[i].pri; } } intInOp(charch)if(ch=='('||ch==')'||ch=='+'||ch=='-'||ch=='*'||ch=='/') return1; else return0; } intPrecede(charop1,charop2) { if(leftpri(op1)==rightpri(op2)) return0; elseif(leftpri(op1) return-1; else return1; } voidtrans(char*exp,charpostexp[]) { struct { chardata[MaxSize]; inttop; }op; inti=0; op.top=-1; op.top++; op.data[op.top]='='; while(*exp! ='\0') { if(! InOp(*exp)) while(*exp>='0'&&*exp<='9') { postexp[i++]=*exp; exp++; } postexp[i++]='#'; } else switch(Precede(op.data[op.top],*exp)) { case-1: op.top++;op.data[op.top]=*exp; exp++; break; case0: op.top--; exp++; break; case1: postexp[i++]=op.data[op.top]; op.top--; break; } } while(op.data[op.top]! ='=') { postexp[i++]=op.data[op.top]; op.top--; break; } postexp[i]='\0'; } floatcompvalue(char*postexp) { struct { floatdata[MaxSize]; inttop; }st; floatd,a,b,c; st.top=-1; while(*postexp! ='\0') { switch(*postexp) { case'+': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=a+b; st.top++; st.data[st.top]=c; break; case'-': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=b-a; st.top++; st.data[st.top]=c; break; case'*': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=a*b; st.top++; st.data[st.top]=c; break; case'/': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; if(a! =0) { c=b/a; st.top++; st.data[st.top]=c; } else { printf("\n\t除0错误\n"); exit(0); } break; default: d=0; while(*postexp>='0'&&*postexp<='9') { d=10*d+*postexp-'0'; postexp++; } st.top++; st.data[st.top]=d; break; } postexp++; } return(st.data[st.top]); } voidmain() { charexp[]="(56-20)/(4+2)"; charpostexp[MaxSize]; trans(exp,postexp); printf("中缀表达式: %s\n",exp); printf("后缀表达式: %s\n",postexp); printf("表达式的值: %g\n",compvalue(postexp)); } 六、结论与分析 在本次实验中掌握了栈的定义,学会栈的初始化,掌握栈的前缀、中缀以及后缀表达式求值和前缀、中缀和后缀表达式相互之间的转换,感觉在实验中也遇到不少问题,都有相对的解决。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验