自己寫**的能力比較差,這段**寫了好長時間。
#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....