利用栈实现多项式的计算,

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)];//返回运算符比较的结果}

相关文档
最新文档