堆栈应用括号匹配实验Word格式.docx

上传人:b****4 文档编号:6498671 上传时间:2023-05-06 格式:DOCX 页数:11 大小:64.92KB
下载 相关 举报
堆栈应用括号匹配实验Word格式.docx_第1页
第1页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第2页
第2页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第3页
第3页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第4页
第4页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第5页
第5页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第6页
第6页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第7页
第7页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第8页
第8页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第9页
第9页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第10页
第10页 / 共11页
堆栈应用括号匹配实验Word格式.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

堆栈应用括号匹配实验Word格式.docx

《堆栈应用括号匹配实验Word格式.docx》由会员分享,可在线阅读,更多相关《堆栈应用括号匹配实验Word格式.docx(11页珍藏版)》请在冰点文库上搜索。

堆栈应用括号匹配实验Word格式.docx

共有n行,每一行是一个测试结果,有四种结果:

0:

左右括号匹配正确{[(1+2)*3]-1}

-1:

左右括号配对次序不正确{[(1+2]*3)-1}

-2:

右括号多于左括号(1+2)*3)-1}

-3:

左括号多于右括号{[(1+2)*3-1]

6、输出样本

-1

-2

-3

(二)数制转换

1、问题描述

对于任意十进制数转换为k进制,包括整数部分和小数部分转换。

整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换

整数部分19,小数部分0.125

19/2=9…10.125*2=0.25…0

9/2=4…10.25*2=0.5…0

4/2=2…00.5*2=1…1

2/2=1…0

1/2=0…1

所以整数部分转为10011,小数部分转为0.001,合起来为10011.001

提示整数部分可用堆栈,小数部分可用队列实现

注意:

必须按照上述方法来实现数制转换,其他方法0分

2、输入

第一行输入一个t,表示下面将有t组测试数据。

接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;

k表示要转换的数制,1<

k<

=16

3、输出

对于每一组测试数据,每行输出转换后的结果,结果精度到小数点后3位

2

19.1252

15.12516

5、输出样本

10011.001

F.200

 

四、程序清单

#include<

iostream>

usingnamespacestd;

string>

#defineMax_Size100

typedefstructStack{//定义栈

charbase[Max_Size];

inttop;

}Stack;

voidInitStack(Stack&

S){//构造空栈

S.top=0;

}

intPush(Stack&

S,charch){//元素进栈

S.top++;

S.base[S.top]=ch;

return1;

intPop(Stack&

S,charch){//元素出栈

S.top--;

ch=S.base[S.top];

intEmpty(Stack&

s,intn){

if(s.top==0){

else{

return0;

}}

intPipei(Stack&

S,stringS1){//匹配

inti,m=0,n=0,num=0,num1=0;

charc,ch,ch1,ch2[100];

InitStack(S);

for(i=0;

i<

S1.length();

i++){

c=S1[i];

if(c=='

('

||c=='

)'

{'

}'

['

]'

ch2[m++]=c;

}

//把字符组S1的括号复制到ch2中

=m-1;

ch=ch2[i];

if(ch=='

||ch=='

Push(S,ch);

//左括号,进栈

){

num1++;

if((ch=='

&

S.base[S.top]=='

)||(ch=='

))

Pop(S,ch1);

//右括号匹配栈顶左括号,左括号出栈

else{

i=m-1;

return-1;

}//左右括号不匹配

if(Empty(S,n)&

m-1)

return-2;

//右括号多于左括号

}

if(!

Empty(S,n))//左括号多于右括号

return-3;

if(Empty(S,n))//左右括号匹配

return0;

intmain(){

StackS;

stringP;

intt,x;

//freopen("

cin.txt"

"

r"

stdin);

cin>

>

t;

while(t--)

{

cin>

P;

x=Pipei(S,P);

cout<

<

x<

endl;

*******************************************************************************

#defineMax_Value100

typedefstructNum{

intbase[Max_Value];

}Num;

voidInitNum(Num&

S){

intPush(Num&

S,inta){

if(S.top>

=Max_Value)

return-1;

S.base[S.top]=a;

intPop(Num&

S,int&

a){

if(S.top<

=0)

a=S.base[S.top];

intEmpty(Num&

if(S.top==0)

return1;

else

return0;

voidNum_1(Num&

S,inta,intk){

InitNum(S);

inte;

while(a){

Push(S,a%k);

a=a/k;

while(!

Empty(S)){

Pop(S,e);

if(e>

=10)

cout<

char(e%10+65);

else

e;

voidNum_2(Num&

S,doublea,intk){

intb,i,e,j=0;

3;

Push(S,a*k);

b=a*k;

a=a*k-b;

for(j=1;

j<

=3;

j++){

if(S.base[j]>

char(S.base[j]%10+65);

S.base[j];

intt,k,m;

doublea,n;

NumS;

cin1.txt"

while(t--){

a>

k;

m=a;

n=a-m;

Num_1(S,m,k);

"

."

;

Num_2(S,n,k);

五、程序运行时截图

六、实验心得与体会(实验中遇到的问题及解决方案,或写点感想)

对于第一题,感觉还好,就是有时候感觉有点混,第二题较麻烦,问题大大小小不断,慢慢调试,查看,XX

指导教师批阅意见:

成绩评定:

指导教师签字:

年月日

备注:

注:

1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2