資料結構6 使用棧計算逆波蘭表示式

2021-06-21 10:51:30 字數 1238 閱讀 1059

1、對於乙個逆波蘭表示式,需要判斷出哪些是數字(整型、浮點型),同時判斷出操作運算子,如何入棧呀?

====>搜的方法,沒有說什麼來區分數字還是操作符(所以我想問題就是個渣渣!),將所有的輸入都作為字元輸入!通過兩個迴圈判斷,外迴圈來判斷整個字串的結束;內迴圈利用空格來判斷結束;

2、比較有意義的一點就是:比如,我原本是想輸入整型12,計算機內儲存是 49 50,通過乙個字元陣列a[0] = 49;a[1] = 50,然後再利用函式atof,將字串轉換成乙個浮點型資料,再來處理!

3、但是如果是 3 -4 *,有負數該怎麼處理呢?

#include #include #include #include #define maxsize 100

#define ok 1

#define error 0

#define increacement 10

typedef float elemtype;

typedef int status;

typedef structsqstack;

void initstack(sqstack *s)

s->top = s->base;

s->length = maxsize;//該引數應該是整個陣列的長度,而不是資料元素的長度,因為長度可以s->top-s->base得出!

}void push(sqstack *s,elemtype e)

s->top = s->base +s->length;

s->length += increacement;

} *(s->top) = e;

s->top++;

}status pop(sqstack *s,elemtype *e)

*e = *--(s->top);

return ok;

}int main()

; sqstack s;

int i = 0;

initstack(&s);//忘了初始化了,尼妹!

printf("輸入逆波蘭表示式,數字與表示式中使用空格隔開:");

scanf("%c",&e);

while(e != '\n')

}switch(e)

//將字串轉換為浮點型資料,並壓入棧中

scanf("%c",&e);

} printf("%f",*(--s.top));

system("pause");

}

資料結構之用棧實現逆波蘭表示式

逆波蘭表示式也稱為字尾表示式,它將乙個算數表示式不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,如下圖所示 在這裡我們可以運用棧的特點來實現字尾表示式,思路如下 1.首先當遇到運算運算元時將其進行push操作 2.當遇到操作符是將此時的棧pop兩次,先取出的...

資料結構 逆波蘭式

很久沒有關注演算法和資料結構,大部分知識都已經忘記了 是時間好好回爐一下了,說實話幹讀資料機構這本書還是挺枯燥而且這本書原理性比較多,有一定的難度。這不剛看到逆波蘭式廢了好大勁才搞懂,老了。逆波蘭式 reverse polish notation,rpn,或逆波蘭記法 也叫字尾表示式 將運算子寫在運...

資料結構之逆波蘭計算器

逆波蘭計算器也稱為字尾計算器,逆波蘭表示式形如 30 4 5 6 其對應的中綴表示式為 30 4 5 6 這次我利用棧結構實現乙個逆波蘭表示式的簡單版計算器。先說說實現思路 先將表示式轉化成list集合 順序遍歷集合,如果當前元素是數字,壓入棧中 如果當前元素是操作符,彈出棧中的兩個元素進行計算,並...