• 大小: 30KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签:

资源简介

代码可靠完整,个人手写实现,包括小数计算,下面是测试用例: //10*8^2+16.3+5*(5.2*5+3.01)/4-(-10)+0.1000060+4.00416-40 = 666.666666 //100+(-100)-(-10^2) = 100 //(((2016-2017+(((2015-2014)))))) = 0 //-1+(((((((((1^0))))))))+100^2 = 0

资源截图

代码片段和文件信息

//10*8^2+16.3+5*(5.2*5+3.01)/4-(-10)+0.1000060+4.00416-40 = 666.666666
//100+(-100)-(-10^2) = 100
//(((2016-2017+(((2015-2014)))))) = 0
//-1+(((((((((1^0))))))))+100%10^2 = 0
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int MAX = 105;

typedef double Type;
typedef struct
{
Type TypeStack[MAX];
char charStack[MAX];
int TypeTop charTop;
}Stack;

//初始化栈
void InitStack(Stack *S)
{
S->charTop = S->TypeTop = 0;
}

//判断charStack是否为空
bool IsEmpty_Char(Stack S)
{
return S.charTop == 0;
}

//判断TypeStack是否为空
bool IsEmpty_Type(Stack S)
{
return S.TypeTop == 0;
}

//判断charStack是否为满
bool IsFull_Char(Stack S)
{
return S.charTop == MAX;
}

//判断TypeStack是否为满
bool IsFull_Type(Stack S)
{
return S.TypeTop == MAX;
}

void Push_Char(Stack *S char ch)
{
//charStack不为满则入栈,否则输出提示
if(!IsFull_Char(*S))
S->charStack[S->charTop++] = ch;
else
cout << “ The CharStack Is Full! “ << endl;
}

void Push_Type(Stack *S Type a)
{
//TypeStack不为满则入栈,否则输出提示
if(!IsFull_Type(*S))
S->TypeStack[S->TypeTop++] = a;
else
cout << “ The TypeStack Is Full! “ << endl;
}

char Pop_Char(Stack *S)
{
if(!IsEmpty_Char(*S))
{
S->charTop--;
return S->charStack[S->charTop];
}
else
cout << “ The CharStack Is Empty! “ << endl;
return -1;
}

Type Pop_Type(Stack *S)
{
if(!IsEmpty_Type(*S))
{
S->TypeTop--;
return S->TypeStack[S->TypeTop];
}
else
cout << “ The TypeStack Is Empty! “ << endl;
return -1;
}

char Top_Char(Stack S)
{
if(!IsEmpty_Char(S))
return S.charStack[--S.charTop];
else
cout << “ The CharStack Is Empty! “ << endl;
return -1;
}

Type Top_Type(Stack S)
{
if(!IsEmpty_Type(S))
return S.TypeStack[--S.TypeTop];
else
cout << “ The TypeStack Is Empty! “ << endl;
return -1;
}

Type Calculate(Type left Type right char op)
{
Type value = 0;
switch(op)
{
case ‘+‘: value = left + right; break;
case ‘-‘: value = left - right; break;
case ‘*‘: value = left * right; break;
case ‘/‘: if(right != 0)
value = left / right;
else
cout << “被除数不能为零!“ << endl;
break;
case ‘%‘: if(right != 0)
value = (int)left % (int)right;
else
cout << “被余数不能为零!“ << endl;
break;
case ‘^‘: value = pow(leftright);
/*value = 1;
if(right >= 0)
while(right--)
value *= left;
else
{
right = -right;
while(right--)
value /= left;
}*/
}
return value;
}


void Computer(char *mid_equotion Type len)
{
Type right left  result;
char *p_mid_equotion = mid_equotion;
char after_equotion = ‘ ‘;

map Oper;
Oper[‘#‘] = 1; Oper[‘(‘] = 2; Oper[‘+‘] = 3;
Oper[‘-‘] = 3; Oper[‘*‘] = 4; Oper[‘/‘] = 4;
Oper[‘%‘] = 4; Oper[‘^‘] = 5; Oper[‘)‘] = 6;

Stack MyStack;
InitStack(&MyStack);
Push_Char(&MyStack‘#‘);

char top_oper c

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       72704  2018-03-18 13:09  栈的实现及应用.doc
     文件        5046  2017-04-08 12:18  算术表达式求值.cpp

评论

共有 条评论