表示式的字尾表示

2022-05-08 01:39:06 字數 1764 閱讀 4092

#include#includeusing namespace std;

const int stackincreament = 20;//溢位時的擴容

templateclass seqstack

void push( const t& x);

bool pop(t& x);

bool top(t& x);

bool isempty()const

bool isfull()const

int getsize()const ;

void makeempty()

friend ostream&operator<<(ostream& os, seqstack&s);

};template seqstack::seqstack(int sz) :top(-1), maxsize(sz)

templatevoid seqstack::overflowprocess()

for (int i = 0; i <= top; i++)newarray[i] = elements[i];

maxsize = maxsize + stackincreament;

deleteelements;

elements = newarray;

}templatevoid seqstack::push(const t&x)

templatebool seqstack::pop(t &x)

template bool seqstack::top(t&x)

bool check_op(char a)

mapisp; mapicp;

void init()

bool pre_check(string expression)//語法檢查

for (int i = 0; i < expression.size()-1; i++)

//連續的操作符

if (check_op(expression[i]) && check_op(expression[i + 1]))

//左右括號是否匹配

if (expression[i] == '(')numl++;

if (expression[i] == ')')numr++;

//首先出現左括號

if (numl < numr)

} if (numl != numr)

return true;

}

void inffix_suffix(string expression)

//運算元直接輸出

else

//新輸入的操作符優先順序高,進棧

else if (isp[ch1] > icp[ch]) //優先順序低,退棧

else

} }cout << endl;

}

//此處沒有再次進行語法檢查,沒有呼叫pre_check(expression))和init();因為在main函式中,非遞迴先呼叫,以及呼叫前面兩個函式

void inffix_suffix(string expression)

//運算元直接輸出

else

//新輸入的操作符優先順序高,進棧

else if (isp[ch1] > icp[ch]) //優先順序低,退棧

else

} }cout << endl;

}

表示式的前中字尾表示和表示式運算

一 將自然表示式轉換為前 中 字尾表示式,首先按照自然表示式中運算元和操作符的優先順序順序構造出表示式對應的二叉樹,然後對二叉樹進行前序 中序 後序遍歷,即得到前 中 字尾表 達式 二 一些其他的遍歷原則 1 深度優先遍歷 2 廣度優先遍歷 首先訪問出發頂點v,然後訪問與頂點v鄰接的全部未被訪問過的...

字尾表示式 中綴到字尾表示式

輸入空格跳出迴圈 while k getchar n 字尾表示式 此 僅限於0 9內的加減乘除 include include include define long 10 using namespace std typedef struct stack qstack void init qstac...

字尾表示式

字尾表示式的計算和中綴表示式轉字尾表示式 此處的運算用的是鍊錶的表示方法 以下為三個會涉及到的標頭檔案 error.h 字尾表示式 created by kyle.yang on 14 12 2.ifndef error h define error h include using namespac...