利用栈实现多项式的计算,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/***************************
//利用栈实现多项式的计算,
//如输入: 3*(7-2)#
//输出:3*(7-2)#=15
//清华大学——数据结构——53页
****************************/
// v4.cpp : Defines the entry point for the console application. //
#include "stdafx.h"
#include
#include
#include
#define STACK_INIT_SIZE 100 //定义初始栈的大小#define Status bool
/***************************
//定义栈元素的结构
****************************/
typedef char ElemType;
typedef struct
{
ElemType * base;
ElemType * top;
int stacksize;
} Stack;
/***************************
//栈的初始化
****************************/
void InitStack( Stack & s)
{
s.base = ( ElemType *) malloc ( STACK_INIT_SIZE );
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
}
/***************************
//取栈顶元素
****************************/
ElemType GetTop(Stack s)
{
return ( *(s.top - 1));
}
/***************************
//压栈
****************************/
void Push(Stack &s, ElemType e)
{
* s.top ++ = e;
}
/***************************
//弹栈
****************************/
void Pop(Stack &s, ElemType & e)
{
e = * -- s.top;
}
#define OPSETSIZE 7
unsigned char prior[7][7] = {
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=',' ',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','='
};
char OPSET1[7] = {'+', '-' , '*' , '/' ,'(' , ')' , '#'};
/******************************************************
//判断是否运算符,若是运算符则返回真,不是则返回假
*******************************************************/ int In1( char c)
{
bool find = false;
for( int i =0; i< 7; i ++)
{
if( OPSET1[i] == c )
{
find = true;
break;
}
}
return find;
}
/****************************************************** //判断是否运算符,若是运算符则返回真,不是则返回位置
*******************************************************/ int GetPos(char c)
{
bool find = false;
int i =0;
for( i =0; i< 7; i ++)
{
if( OPSET1[i] == c )
{
find = true;
break;
}
}
return i;
}
/****************************************************** //判断两个操作符的优先级
*******************************************************/ char precede1( char a, char b)
{
return prior[GetPos(a)][GetPos(b)];//返回运算符比较的结果}