《数据结构与算法设计》实验2Word文档下载推荐.docx

上传人:b****6 文档编号:17942145 上传时间:2022-12-12 格式:DOCX 页数:15 大小:39.74KB
下载 相关 举报
《数据结构与算法设计》实验2Word文档下载推荐.docx_第1页
第1页 / 共15页
《数据结构与算法设计》实验2Word文档下载推荐.docx_第2页
第2页 / 共15页
《数据结构与算法设计》实验2Word文档下载推荐.docx_第3页
第3页 / 共15页
《数据结构与算法设计》实验2Word文档下载推荐.docx_第4页
第4页 / 共15页
《数据结构与算法设计》实验2Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《数据结构与算法设计》实验2Word文档下载推荐.docx

《《数据结构与算法设计》实验2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《数据结构与算法设计》实验2Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

《数据结构与算法设计》实验2Word文档下载推荐.docx

-48

三、程序设计

概要设计

1、宏定义

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

2、基本函数:

(1)voidInitStack_char(SqStack*S)//char型栈初始化

(2)voidInitStack_int(sqStack*S)//int型栈初始化

(3)voidPush_char(SqStack*S,charch)//char型元素进栈

(4)voidPush_int(sqStack*S,intnum)//int型元素进栈

(5)charGetTop_char(SqStack*S)//取char型栈顶元素

(6)intGetTop_int(sqStack*S)//取int型栈顶元素

(7)StatusIn(charc)//判断是否为运算符,若是运算符则返回,否则返回

(8)charPrecede(chara,charb)//判断两运算符的先后次序

(9)StatusPop_char(SqStack*S,char&

x)//char型栈出栈

(10)StatusPop_int(sqStack*S,int&

x)//int型栈出栈

(11)intOperate(inta,chartheta,intb)//计算a和b运算结果

3、流程图

详细设计

数据类型

typedefstructnode//构造char型栈

{

charch;

structnode*next;

}node;

typedefstruct

structnode*base;

structnode*top;

}SqStack;

typedefstructlnode//构造int型栈

intnum;

structlnode*next;

}lnode;

structlnode*base;

structlnode*top;

}sqStack;

操作部分

voidInitStack_char(SqStack*S)

S->

base=(node*)malloc(sizeof(node));

base->

next=NULL;

top=S->

base;

}//char型栈初始化

voidInitStack_int(sqStack*S)

base=(lnode*)malloc(sizeof(lnode));

}//int型栈初始化

voidPush_char(SqStack*S,charch)

node*p;

p=(node*)malloc(sizeof(node));

p->

ch=ch;

next=S->

top;

top=p;

}//char型元素进栈

StatusPush_int(sqStack*S,intnum)

lnode*p;

p=(lnode*)malloc(sizeof(lnode));

num=num;

returnOK;

}//int型元素进栈

charGetTop_char(SqStack*S)

return(S->

top->

ch);

}//取char型栈顶元素

intGetTop_int(sqStack*S)

num);

}//取int型栈顶元素

StatusPop_char(SqStack*S,char&

x)

if(S->

base==S->

top)

returnERROR;

p=S->

x=p->

ch;

top=p->

next;

free(p);

}//char型栈出栈

StatusPop_int(sqStack*S,int&

num;

}//int型栈出栈

计算功能

intOperate(inta,chartheta,intb)

inti,z=1;

switch(theta)

{

case'

+'

:

z=(a+b);

break;

-'

z=(a-b);

*'

z=(a*b);

/'

z=(a/b);

^'

for(i=1;

i<

=b;

i++)

z=z*a;

break;

}

return(z);

}//计算a和b运算结果

StatusIn(charc)

if(c=='

||c=='

('

)'

='

returnOK;

else

}//判断是否为运算符

charPrecede(chara,charb)

if(a=='

||a=='

if(b=='

||b=='

return'

>

'

;

else

<

if(b!

#'

return('

);

}//判断两运算符的先后次序

主函数

intmain()//主函数

charc,x,theta;

inta,b,c1;

//定义变量

SqStackOPTR;

//定义字符栈

sqStackOPNR;

//定义整型栈

InitStack_char(&

OPTR);

//初始化

InitStack_int(&

OPNR);

Push_char(&

OPTR,'

//将字符型栈底设为#

c=getchar();

//从键盘输入得到字符

while(c!

||GetTop_char(&

OPTR)!

)//判定是否执行循环

if(!

In(c))

{

c1=0;

while(!

{

c1=c1*10+c-'

0'

c=getchar();

}

Push_int(&

OPNR,c1);

}//当扫描字符不是运算符时,转化为整型数存入栈中

switch(Precede(GetTop_char(&

OPTR),c))//判定运算符的优先关系

case'

Push_char(&

OPTR,c);

c=getchar();

//当前运算符优先级高,存入char栈

Pop_char(&

//运算符次序相等,存入char栈

//当前运算符优先级低

OPTR,theta);

Pop_int(&

OPNR,b);

OPNR,a);

Push_int(&

OPNR,Operate(a,theta,b));

//计算运算结果,并存入int栈

break;

//继续循环

}

printf("

%d\n"

GetTop_int(&

OPNR));

//计算完成,取出int栈顶元素,并输出

return0;

}四、程序调试分析

编写程序的过程中遇到了很多的问题,最突出的两个问题就是整数和两位数的运算处理,一开始修改了主函数部分之后,原来可以执行一位数运算的程序出现了error,由于没有及时保存,并且之前的代码无法恢复,只得重新编写一次。

第二次编写理清思路之后,在课本和网上资料的辅助下,终于成功的编出了程序并且可以完美执行。

经验告诉了我在编程的时候一定要注意经常进行调试,只有学会调试才能处理好大程序的编写,否则极其容易出错。

五、用户使用说明

1.运行程序,

2.将整个表达式从键盘键入,以“=”结束,回车可得到结果。

六、程序运行结果

(1)输入:

(11+3)*5=输出:

70

(2)输入:

(31-13)/(9-3)=输出:

6

七、程序清单

#include<

stdio.h>

stdlib.h>

typedefintStatus;

}

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

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1