91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 0.01M
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2024-04-16
  • 語言: C/C++
  • 標簽: 表達式??算法??

資源簡介

算法表達式求值.cpp

資源截圖

代碼片段和文件信息

#include
#include
#include
#include?
#define?MaxSize?100
//聲明運算符棧類型?
typedef?struct
{
char?data[MaxSize];
int?top;
}SqStack1;
//聲明操作數(shù)棧類型?
typedef?struct
{
double?data[MaxSize];
int?top;
}SqStack2;
//初始化運算符棧?
void?InitStack1(SqStack1?*&s)
{
s=(SqStack1?*)malloc(sizeof(SqStack1));
s->top=-1;
}
//初始化操作數(shù)棧?
void?InitStack2(SqStack2?*&s)
{
s=(SqStack2?*)malloc(sizeof(SqStack2));
s->top=-1;
}
//銷毀運算符棧?
void?DestroyStack1(SqStack1?*&s)
{
free(s);
}
//銷毀操作數(shù)棧?
void?DestroyStack2(SqStack2?*&s)
{
free(s);
}
//運算符進棧?
bool?Push1(SqStack1?*&schar?e)
{
if(s->top==MaxSize-1)
{
return?false;
}
s->top++;
s->data[s->top]=e;
return?true;
}
//操作數(shù)進棧?
bool?Push2(SqStack2?*&sdouble?e)
{
if(s->top==MaxSize-1)
{
return?false;
}
s->top++;
s->data[s->top]=e;
return?true;
}
//運算符出棧?
bool?Pop1(SqStack1?*&schar?&e)
{
if(s->top==-1)
{
return?false;
}
e=s->data[s->top];
s->top--;
return?true;
}
//操作數(shù)出棧?
bool?Pop2(SqStack2?*&sdouble?&e)
{
if(s->top==-1)
{
return?false;
}
e=s->data[s->top];
s->top--;
return?true;
}
//取運算符棧頂元素?
bool?GetTop1(SqStack1?*&schar?&e)
{
if(s->top==-1)
{
return?false;
}
e=s->data[s->top];
return?true;
}
//取操作數(shù)棧頂元素?
bool?GetTop2(SqStack2?*&sdouble?&e)
{
if(s->top==-1)
{
return?false;
}
e=s->data[s->top];
return?true;
}
//判斷運算符棧是否為空?
bool?StackEmpty(SqStack1?*s)
{
return(s->top==-1);
}
//將運算符表達式exp轉換成后輟表達式postexp?
void?trans1(char?*expchar?postexp[])
{
char?e;
SqStack1?*Optr;??????????//定義運算符棧
InitStack1(Optr);????????//初始化運算符棧
int?i=0;?????????????????//i作為postexp的下標
while(*exp!=‘\0‘)????????//循環(huán)至exp掃描完
{
switch(*exp)
{
case?‘(‘:???????????????????????//判定為左括號
Push1(Optr‘(‘);????????????//左括號進棧
????exp++;??????????????????????//繼續(xù)掃描
????break;
case?‘)‘:???????????????????????//判定為右括號
Pop1(Optre);???????????????//出棧元素e
????while(e!=‘(‘)???????????????//不為左括號時循環(huán)
{
postexp[i++]=e;?????????//將e存放到postexp中
Pop1(Optre);???????????//繼續(xù)出棧元素e
????}
????exp++;??????????????????????//繼續(xù)掃描
???? break; ?
case?‘+‘:???????????????????????//判定為加或減
case?‘-‘:
while(!StackEmpty(Optr))????//棧不為空時循環(huán)
{
GetTop1(Optre);????????//取棧頂元素e
if(e!=‘(‘)??????????????//e不是左括號
{
postexp[i++]=e;?????//將e存放到postexp中
Pop1(Optre);???????//出棧元素e
}
else
{
break;
}
}
Push1(Optr*exp);???????????//將加或減進棧
exp++;??????????????????????//繼續(xù)掃描
break;
case?‘*‘:???????????????????????//判定為乘或除
case?‘/‘:
while(!StackEmpty(Optr))????//棧不為空時循環(huán)
{
GetTop1(Optre);????????//取棧頂元素e
if(e==‘*‘||e==‘/‘)??????
{
postexp[i++]=e;?????//將e存放到postexp中
Pop1(Optre);???????//出棧元素e
}
else
{
break;
}
}
Push1(Optr*exp);???????????//將乘或除進棧

評論

共有 條評論