56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
#ifndef STACKAPP_H_
|
|
#define STACKAPP_H_
|
|
|
|
#include "Stack.h"
|
|
|
|
#define NOPTR 9
|
|
|
|
static char digits[] = { '0','1','2','3','4','5','6','7','8','9',
|
|
'a','b','c','d','e','f','g','h','i','j',
|
|
'k','l','m','n','o','p','q','r','s','t',
|
|
'u','v','w','x','y','z' };
|
|
/*
|
|
* @brief : convert a decimal digit n to any base(2 <= base <= 36)
|
|
* @args :
|
|
* @return: return the result in the form of char*
|
|
*/
|
|
char* convert(__int64 n, int base);
|
|
|
|
/*
|
|
* @brief : to judge if an expression of parens matches
|
|
* @args : exp
|
|
* @return: return true if matches
|
|
*/
|
|
bool paren(const char exp[]);
|
|
|
|
//pri[stack top optr][curr optr]
|
|
const char pri[NOPTR][NOPTR] = {
|
|
/* + - * / ^ ! ( ) \0 */
|
|
/* + */ '>', '>', '<', '<', '<', '<', '<', '>', '>',
|
|
/* - */ '>', '>', '<', '<', '<', '<', '<', '>', '>',
|
|
/* * */ '>', '>', '>', '>', '<', '<', '<', '>', '>',
|
|
/* / */ '>', '>', '>', '>', '<', '<', '<', '>', '>',
|
|
/* ^ */ '>', '>', '>', '>', '>', '<', '<', '>', '>',
|
|
/* ! */ '>', '>', '>', '>', '>', '>', '<', '>', '>',
|
|
/* ( */ '<', '<', '<', '<', '<', '<', '<', '=', ' ',
|
|
/* ) */ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
|
|
/* \0 */ '<' ,'<', '<', '<', '<', '<', '<', ' ', '=' };
|
|
|
|
/*
|
|
* @brief : to compute the value of an infix expression
|
|
* @args : infixExpr
|
|
* @return: return the value in double
|
|
* @others: only consider valid infix expression
|
|
*/
|
|
double evaluate(char* infixExpr);
|
|
|
|
/*
|
|
* @brief : to convert an infix expression to a postfix one
|
|
* @args : infixExpr
|
|
* @return: return the converted postfix expression
|
|
* @others: only consider valid infix expression
|
|
*/
|
|
char* toPostfix(char* infixExpr);
|
|
|
|
#endif
|