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集合 順序遍歷集合,如果當前元素是數字,壓入棧中 如果當前元素是操作符,彈出棧中的兩個元素進行計算,並...