算术表达式求值演示 算术表达式求值演示 算术表达式求值演示-课程设计报告

导读:第四章详细设计,栈的抽象数据类型定义ADTSqStack{数据对象:D={ai|ai∈ElemSet,i=1,2,3??,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=1,2,3,??,n}约定其中ai端为栈底,an端为栈顶。操作集合:(1)voidInitStack1(SqStack1&S1);//声明栈建立函数(2)voi

栈的抽象数据类型定义

ADT SqStack{

数据对象:D={ai| ai ∈ElemSet,i=1,2,3??,n,n≥0}

数据关系:R1={<ai-1,ai>| ai-1,ai ∈D,i=1,2,3,??,n}

约定其中ai端为栈底,an端为栈顶。

操作集合:

(1)void InitStack1(SqStack1 &S1);//声明栈建立函数

(2)void InitStack2(SqStack2 &S2);//声明栈建立函数

(3)void evaluate(SqStack1 &S1,SqStack2 &S2);//确定如何入栈函数

(4)void Push1(SqStack1 &S1,char e);//声明入栈函数

(5)void Push2(SqStack2 &S2,float e);//声明入压栈函数

(6)char GetTop1(SqStack1 &S1);//声明取栈顶元素函数

(7)float GetTop2(SqStack2 &S2);//声明取栈顶元素函数

(8)char Pop1(SqStack1 &S1);//声明出栈函数

(9)float Pop2(SqStack2 &S2);//声明出栈函数

(10)char Compare(char m,char n);//声明比较函数

(11)float Operate(float a,char rheta,float b);//声明运算函数

(12)void DispStack1(SqStack1 &S1);//从栈底到栈顶依次输出各元素

(13)void DispStack2(SqStack2 &S2);//从栈底到栈顶依次输出各元素 }ADT SqStack

第四章 详细设计

源程序

#include<iostream>

using namespace std;

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct //运算符栈

{

char *base;

char *top;

int stacksize;

}SqStack1;

typedef struct //运算数栈

{

float *base;

float *top;

int stacksize;

}SqStack2;

void InitStack1(SqStack1 &S1);//声明栈建立函数

void InitStack2(SqStack2 &S2);//声明栈建立函数

void evaluate(SqStack1 &S1,SqStack2 &S2);//确定如何入栈函数 void Push1(SqStack1 &S1,char e);//声明入栈函数

void Push2(SqStack2 &S2,float e);//声明入压栈函数

char GetTop1(SqStack1 &S1);//声明取栈顶元素函数

float GetTop2(SqStack2 &S2);//声明取栈顶元素函数

char Pop1(SqStack1 &S1);//声明出栈函数

float Pop2(SqStack2 &S2);//声明出栈函数

char Compare(char m,char n);//声明比较函数

float Operate(float a,char rheta,float b);//声明运算函数 void DispStack1(SqStack1 &S1);//从栈底到栈顶依次输出各元素 void DispStack2(SqStack2 &S2);//从栈底到栈顶依次输出各元素

/*主函数*/

算术表达式求值演示 算术表达式求值演示 算术表达式求值演示-课程设计报告

void main()

SqStack1 S1;//定义运算符栈

SqStack2 S2;//定义运算数栈

//freopen("data1.in","r",stdin);

//freopen("data1.out","w",stdout);

InitStack1(S1);//调用栈建立函数

InitStack2(S2);//调用栈建立函数

evaluate(S1,S2);//调用确定如何入栈函数

cout<<"按任意键结束!"<<endl;

}

/*运算符栈函数*/

void InitStack1(SqStack1 &S1)//构造一个空栈S1

{

S1.base=(char *)malloc(STACK_INIT_SIZE *sizeof(char)); if(!S1.base)cout<<"存储分配失败!";//存储分配失败 S1.top=S1.base;

S1.stacksize=STACK_INIT_SIZE;

}

void Push1(SqStack1 &S1,char e)//入栈

{

if(S1.top-S1.base>=S1.stacksize)//如果栈满,追加存储空间 {

S1.base=(char

*)realloc(S1.base,(S1.stacksize+STACKINCREMENT)*sizeof(char)); if(!S1.base) cout<<"存储分配失败!";

else

{

S1.top=S1.base+S1.stacksize;

S1.stacksize=S1.stacksize+STACKINCREMENT;

}

}

*S1.top=e;S1.top=S1.top+1;//将元素压入栈中,指针上移 }

char GetTop1(SqStack1 &S1)//取栈顶元素

char e;

if(S1.top==S1.base)cout<<"nttt运算符栈已空!n"; else e=*(S1.top-1);

return e;

}

void DispStack1(SqStack1 &S1)//从栈底到栈顶依次输出各元素 {

char e,*p;

if(S1.top==S1.base)cout<<" ";

else

{

p=S1.base;

while(p<S1.top)

{

e=*p;

p++;

cout<<e;

}

}

}

char Pop1(SqStack1 &S1)//出栈

{

char e;

if(S1.top==S1.base)cout<<"nttt运算符栈已空!n"; e=*(--S1.top);

return e;

}

/*运算数栈函数*/

void InitStack2(SqStack2 &S2)//构造一个空栈S2

{

S2.base=(float *)malloc(STACK_INIT_SIZE *sizeof(float)); if(!S2.base)cout<<"存储分配失败!";//存储分配失败 S2.top=S2.base;

S2.stacksize=STACK_INIT_SIZE;

}

void Push2(SqStack2 &S2,float e)//入栈

{

爱华网www.aIhUaU.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。  

爱华网本文地址 » http://www.aihuau.com/a/311851/498152441080.html

更多阅读

年 金 终 值 系 数 表 年金现值系数表

表 格 名 称: 年 金 终 值 系 数 表计算公式:f= (1+i) n -1i期数 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30%1 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1

复 利 现 值 系 数 表 年金复利终值系数表

表 格 名 称: 复 利 现 值 系 数 表计算公式:f=(1+i) -n期数 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30%1 0.9901 0.9804 0.9709 0.9615 0.9524 0.9434 0.934

声明:《算术表达式求值演示 算术表达式求值演示 算术表达式求值演示-课程设计报告》为网友光之耀子边伯贤分享!如侵犯到您的合法权益请联系我们删除