08年9月入學,12年7月畢業,結束了我在軟體學院愉快豐富的大學生活。此系列是對四年專業課程學習的回顧,索引參見:
棧是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底(push),最後的資料在棧頂(top),需要讀資料的時候從棧頂開始彈出資料(top)最後乙個資料被第乙個讀出來。
棧中資料用陣列儲存,通過top(),push(),pop()基本的函式用以實現其功能,此外我還增加了clear()函式用以清除棧中現有的所有元素
我選擇的題目:書中calculator的編寫與改進
1.分析棧要實現的功能從而確定棧類的幾種基本成員函式——pop(),pop(),top(),clear(),確定棧中以陣列實現資料的儲存從而確定棧的成員函式——stack_entry entry,count(記錄棧中資料數量)
2.編寫棧的標頭檔案及實現
3.選擇書中計算器的程式以驗證棧的各種基本運算。分析書中演算法思路及對棧的運用,提出可以改進的地方——將計算器功能封裝到類中,並增加清空棧的功能。
4.編寫計算器類的標頭檔案及類的實現
5.主函式中通過簡單的建立myclaculator驗證程式,並試驗各種基本功能。
1.實驗中我以課本中計算器的實驗為例,實現並驗證了順序棧各種基本運算。
2.計算器的實現:當使用者輸入「?」時,程式將將即將輸入的數壓入棧中;當使用者輸入「+」「-」「*」「/」等基本運算子,彈出之前被壓入的數字做相應的運算,並將結果壓入棧中。當使用者輸入「=」時,彈出並顯示上一步運算的結果。
3.依照書中的基本思想,我實現了計算器的運算,並做了一些相應的改變:
(1)將計算器作為乙個類實現,從而將計算器中用以儲存資料的棧作為私有資料成員,用以實現各種操作的函式作為保護成員函式更好的封裝起來,對使用者只留有命令介面。這樣簡化了主函式,也方便以後的使用。
(2)由於計算器中運算資料儲存在有一定限制的棧中,多次元素按之後可能會使棧狀態變為full,所以我增加了名為clear()的函式可以清空棧。
4.實驗中我遇到的問題:
(1)要注意棧「先進後出」的特點,所以容易弄錯運算數的順序(加法、乘法並沒有影響,但減法和除法運算就可能出現問題),即棧中第一次彈出的資料是第二個運算元,第二次彈出的資料是第乙個運算元。
(2)編寫計算器的建構函式時,發現資料成員command(char型別)並不能預設為『』,但可以是空格『 』,之前並沒有注意到這種區別。
(3)驗證時,我發現當輸入「?」之後,如果我輸入的不是預設要輸入的double型別,例如輸入「a」等字母,程式沒有報錯,反而是出現死迴圈,對於這個問題我並沒有解決。
資料結構 棧(Stack)
只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。棧頂 top 線性表允許進行插入和刪除的一端。棧底 bottom 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素。如上圖 a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和...
資料結構 棧stack
棧的概念與資料結構 棧 有時稱為 後進先出棧 是乙個元素的有序集合,其中新增移除新元素總發生在同一端。這一端通常稱為 頂部 與頂部對應的端稱為 底部 棧的底部很重要,因為在棧中靠近底部的元素是儲存時間最長的。最近新增的元素是最先會被移除的。這種排序原則有時被稱為 lifo,後進先出。它基於在集合內的...
資料結構 棧(Stack)
棧 英語 stack 又稱為堆疊或堆疊,棧作為一種資料結構,它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料 最後乙個資料被第乙個讀出來 由於堆疊資料結構只允許在一端進行操作,因而按照後進先出 lifo last in first out 的...