欢迎来到天天文库
浏览记录
ID:52835406
大小:102.00 KB
页数:5页
时间:2020-03-30
《数据结构—数制转换.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一栈的应用数制转换1.程序设计简介该程序以顺序栈为工具,实现十进制数到其他一至十六进制数的转换。设计中采用了一个循环,使得用户可重复进行数制转换。需转换的十进制数和要转换的数制均通过交互方式输入。因采用了顺序栈,程序中包含SqStack.h。2.源程序#include//cout,cin#include"process.h"//exit()#include"stdio.h"//EOF,NULL#include"SqStack.h"templatevoidconvert(Tn,Tm){//把十进制数n转换为m进制
2、数Te;charc;SqStacks(10);cout<<"需转换的十进制数是:"<3、ndl;}voidmain(){intn,m;//分别存放被转换的数及转换数制charans;//工作变量,存放是否继续的应答intflag=1;//工作变量,是否继续的标志while(flag){cout<<"输入需转换的十进制数:";cin>>n;cout<<"输入需转换的数制:";cin>>m;convert(n,m);cout<<"继续吗(Y/N)?"<>ans;if(ans=='Y'4、5、ans=='y')flag=1;else{flag=0;cout<<"程序运行结束,BYe-Bye!"<6、main3.程序运行结果实验二表达式括号匹配配对判断问题1.问题描述假设一个算法表达式中包括圆括号、方括号两种,设计判别表达式中括号是否正确匹配的算法。2.基本要求(1)表达式用字符串表示,以初始化方式创建或以交互方式创建;(2)借助栈进行算法设计;(3)输出:显示表达式,并给出匹配处理结果:匹配、不匹配(右括号多、左括号多等)。3.思想step1:创建一个栈;step2:从左到右扫描表达式,直至表达式结束;2.1:如果是左括号,入栈;取下一个字符;2.2:如果是右括号:2.2.1:与栈顶括号匹配,则出栈,消去一个左括号,取下一个字符;2.2.2:与栈顶7、括号不匹配,得到“不匹配”,结束;2.2.3:栈空,得到“不匹配”,结束;step3:若栈空,则表达式中括号匹配,否则不匹配。4.源程序#include//cout,cin#include"process.h"//exit()#include"stdio.h"//EOF,NULLstructNode{inttop;chardata[stacksize];};Nodenode;voidInitStack()//初始化栈{node.top=-1;}sqstack(intn){base=newT[m];if(base=NULL){cou8、t<<"创栈失败";exit(1);}stacksize=m;top=-1;}}voidPush(charx){if(node.top==stacksize-1);node.top++;node.data[node.top]=x;}voidPop(char&x){if(node.top==-1);x=node.data[node.top--];}for(i=0;*(p+i)!=' '&&count!=0;i++){switch(*(p+i)){case'(':Push(*(p+i));break;case'[':Push(*(p+i));break;c9、ase')':{Pop(e);if(e!='(')count=0;};break;case']':{Pop(e);if(e!='[')count=0;};break;default:break;}}if(!StackEmpty()10、11、count==0){cout<<"不匹配"<>s;if(s=='y'12、13、s=='Y')gotoinput;elseif(s=='n'14、15、s=='N')cout<<"谢谢,再见!"<16、ut<<"继续吗?(y/n)"<>s;if(s=='y'17、18、
3、ndl;}voidmain(){intn,m;//分别存放被转换的数及转换数制charans;//工作变量,存放是否继续的应答intflag=1;//工作变量,是否继续的标志while(flag){cout<<"输入需转换的十进制数:";cin>>n;cout<<"输入需转换的数制:";cin>>m;convert(n,m);cout<<"继续吗(Y/N)?"<>ans;if(ans=='Y'
4、
5、ans=='y')flag=1;else{flag=0;cout<<"程序运行结束,BYe-Bye!"<6、main3.程序运行结果实验二表达式括号匹配配对判断问题1.问题描述假设一个算法表达式中包括圆括号、方括号两种,设计判别表达式中括号是否正确匹配的算法。2.基本要求(1)表达式用字符串表示,以初始化方式创建或以交互方式创建;(2)借助栈进行算法设计;(3)输出:显示表达式,并给出匹配处理结果:匹配、不匹配(右括号多、左括号多等)。3.思想step1:创建一个栈;step2:从左到右扫描表达式,直至表达式结束;2.1:如果是左括号,入栈;取下一个字符;2.2:如果是右括号:2.2.1:与栈顶括号匹配,则出栈,消去一个左括号,取下一个字符;2.2.2:与栈顶7、括号不匹配,得到“不匹配”,结束;2.2.3:栈空,得到“不匹配”,结束;step3:若栈空,则表达式中括号匹配,否则不匹配。4.源程序#include//cout,cin#include"process.h"//exit()#include"stdio.h"//EOF,NULLstructNode{inttop;chardata[stacksize];};Nodenode;voidInitStack()//初始化栈{node.top=-1;}sqstack(intn){base=newT[m];if(base=NULL){cou8、t<<"创栈失败";exit(1);}stacksize=m;top=-1;}}voidPush(charx){if(node.top==stacksize-1);node.top++;node.data[node.top]=x;}voidPop(char&x){if(node.top==-1);x=node.data[node.top--];}for(i=0;*(p+i)!=' '&&count!=0;i++){switch(*(p+i)){case'(':Push(*(p+i));break;case'[':Push(*(p+i));break;c9、ase')':{Pop(e);if(e!='(')count=0;};break;case']':{Pop(e);if(e!='[')count=0;};break;default:break;}}if(!StackEmpty()10、11、count==0){cout<<"不匹配"<>s;if(s=='y'12、13、s=='Y')gotoinput;elseif(s=='n'14、15、s=='N')cout<<"谢谢,再见!"<16、ut<<"继续吗?(y/n)"<>s;if(s=='y'17、18、
6、main3.程序运行结果实验二表达式括号匹配配对判断问题1.问题描述假设一个算法表达式中包括圆括号、方括号两种,设计判别表达式中括号是否正确匹配的算法。2.基本要求(1)表达式用字符串表示,以初始化方式创建或以交互方式创建;(2)借助栈进行算法设计;(3)输出:显示表达式,并给出匹配处理结果:匹配、不匹配(右括号多、左括号多等)。3.思想step1:创建一个栈;step2:从左到右扫描表达式,直至表达式结束;2.1:如果是左括号,入栈;取下一个字符;2.2:如果是右括号:2.2.1:与栈顶括号匹配,则出栈,消去一个左括号,取下一个字符;2.2.2:与栈顶
7、括号不匹配,得到“不匹配”,结束;2.2.3:栈空,得到“不匹配”,结束;step3:若栈空,则表达式中括号匹配,否则不匹配。4.源程序#include//cout,cin#include"process.h"//exit()#include"stdio.h"//EOF,NULLstructNode{inttop;chardata[stacksize];};Nodenode;voidInitStack()//初始化栈{node.top=-1;}sqstack(intn){base=newT[m];if(base=NULL){cou
8、t<<"创栈失败";exit(1);}stacksize=m;top=-1;}}voidPush(charx){if(node.top==stacksize-1);node.top++;node.data[node.top]=x;}voidPop(char&x){if(node.top==-1);x=node.data[node.top--];}for(i=0;*(p+i)!=' '&&count!=0;i++){switch(*(p+i)){case'(':Push(*(p+i));break;case'[':Push(*(p+i));break;c
9、ase')':{Pop(e);if(e!='(')count=0;};break;case']':{Pop(e);if(e!='[')count=0;};break;default:break;}}if(!StackEmpty()
10、
11、count==0){cout<<"不匹配"<>s;if(s=='y'
12、
13、s=='Y')gotoinput;elseif(s=='n'
14、
15、s=='N')cout<<"谢谢,再见!"<16、ut<<"继续吗?(y/n)"<>s;if(s=='y'17、18、
16、ut<<"继续吗?(y/n)"<>s;if(s=='y'
17、
18、
此文档下载收益归作者所有