用棧的方法運算字尾表示式的值

2021-06-06 01:25:18 字數 1849 閱讀 2317

自己寫**的能力比較差,這段**寫了好長時間。

#include #include #include #define emptytos (-1)

#define minstacksize (5)

struct stackrecord;

typedef struct stackrecord *stack;

struct stackrecord;/*

* 建立乙個stack

*/stack createstack(int maxelements)

s = (stack)malloc(sizeof(struct stackrecord));

if (s == null)

s->array = (char *)malloc(sizeof(char)*maxelements);

if (s->array == null)

s->topofstack = -1;

s->capacity = maxelements;

// printf("topofstack`s value = %d, s->capacity = %d\n", s->topofstack, s->capacity);

return s;}/*

* 釋放棧

*/void disposestack(stack s)}/*

* 棧是否為空

*/int isempty(stack s)

/* * 清空棧。

*/void makeempty(stack s)

/* * 判斷棧是否滿

*/int isfull(stack s)

else

return 0; }

/* * push data.

*/void push(char x, stack s)}/*

* print stack.

*/ /*

void showstack(stack s)

else

}}*/

/* * print stack.

*/void showstack(stack s)

else

}}/*

* 彈出第乙個數.

*/int top(stack s)

else }

/* * pop data.

*/int pop(stack s)

else }

/* * top and pop

*/int topandpop(stack s)

else }

/*int midtoaf(stack s)

else if(trans < )

else if (pop(s) == '+')

printf(" + ");

case '*':

trans = 3;

if (pop(s) != '(')

case '(':

trans = 4;

case ')':

trans = 0;

default;

trans = 1;

} } }*/

// 運算字尾表示式

int calresult(char post, int n, stack s)

else if (post[i] == '+')

else

} else if (post[i] == '*')

else

} }

}int main(void)

calresult(post1, strlen(post1), stack1);

return 0;

}

計算表示式值(字尾表示式) 棧

處理表示式主要是對優先順序以及括號的判斷 1.運算子棧頂的優先順序小於加入的時,需要將所有的不評級的取出並計算,2.當遇到 時,需要括號內的運算全部處理 2.其他情況全部加入運算子棧和資料棧 include include include using namespace std typedef lo...

棧演算法 字尾表示式的值計算

棧是一種只允許一端操作的線性資料結構,具有lifo last in first out 的特點,具有廣泛的應用。現在打算用棧結構來實現字尾表示式的計算。字尾表示式,指的是不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行 不再考慮運算子的優先規則 例如5 2 3...

字尾表示式 棧

若干行,每行對應乙個中綴表示式 若干行,每行對應乙個由中綴表示式轉換而來的字尾表示式 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....