棧結構之後綴表示式

2022-02-23 15:07:37 字數 1965 閱讀 6374

/*

棧採用順序棧儲存,試設計演算法實現將表示式轉換成字尾表示式輸出。

例如,輸入表示式: a+b/c-(d*e+f)*g

輸出其字尾表示式: abc/+de*f+g*-

*/#include #include #define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

#define overflow -2

#define stack_init_size 100

#define stackincrement 10

typedef int status;

typedef char selemtype;

typedef struct

sqstack;

status initstack(sqstack &s);

status push(sqstack &s, selemtype &e);

status pop(sqstack &s, selemtype &e);

status gettop(sqstack s, selemtype &e);

status matching(sqstack &s, char expression);

int stacklength(sqstack s);

int main()

status initstack(sqstack &s)

s.top = s.base;

s.stacksize = stack_init_size;

return ok;

}int stacklength(sqstack s)

status gettop(sqstack s, selemtype &e)

//不可以用s.top - 1,因為這裡只是讀取,並非刪除

e = *(s.top - 1);

return ok;

}status push(sqstack &s, selemtype &e)

//指標的加減量實際上就是在位址上以對應的型別空間的移動

s.top = s.base + s.stacksize;

s.stacksize += stackincrement;

} //e作為棧頂元素,先賦值,再向上移動

*s.top++ = e;

return ok;

}status pop(sqstack &s, selemtype &e)

//棧頂元素被忽略,讀取後棧頂指標下移

e = *--s.top;

return ok;

}status matching(sqstack &s, char expression)

else

}if (flag == 1)

break;

}case '*':

case '/':

flag = 1;

gettop(s, e);

if (stacklength(s) == 0 || e == '(' || e == '+' || e == '-')

else

if (flag == 1)

break;

}case '(':

flag = 1;

push(s, expression[index]);

break;

case ')':

flag = 1;

if (stacklength(s))

}break;

}else

return error;

default:

printf("%c ", expression[index]);

} }if (stacklength(s) != 0)

} return ok;

}

字尾表示式 棧

若干行,每行對應乙個中綴表示式 若干行,每行對應乙個由中綴表示式轉換而來的字尾表示式 x a y b z f a b c d m n s t y a b c d e f gxayb zf abc dm n st y abc def g 解題思路 首先如何實現中綴表示式轉換成字尾表示式,方法如下 1....

棧 字尾表示式

看了老師給的部落格,學習了一下,我學的確實很菜啊,仿照寫了乙個可以實現任意數字個數的加括號運算,目前只支援加乙個括號。收穫真的挺大 def to rpn f4 defcompare x,y v return 1 if y else v x v y rpn,operators for i in f4 ...

棧的應用之後綴表示式求值

字尾表示式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行 不再考慮運算子的優先規則 我們數學上採用的表示式叫中綴表示式,即將運算放在兩個運算物件中間。此外還有字尾表示式,即將運算子放在兩個運算物件的前面。下面是同乙個算術表示式的三種等價表示形式 中綴...