国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

2019-11-08 03:17:48
字體:
來源:轉載
供稿:網友
定義棧是一種只能在頂端插入和刪除的列表。頂端是指最后一個操作的元素,數組中指下標最大的元素,鏈表中指末尾的元素。所以棧是一種LIFO(后進先出)的數據結構。實現棧可以使用數組、鏈表兩種方式實現。自己動手coding,可以學習怎么處理異常,還有一些其他細節。上一篇中分析到如果在表的末端插入和刪除都是O(1)的時間復雜度。 棧的基本操作有:1.E push(E item);2.E pop();3.E peek();4.boolean empty();5.int search(Object o);6.int size() ;應用棧的常用在 1 代碼編輯器檢查語法錯誤;2 計算器實現;3 計算機函數遞歸調用。代碼語法檢查寫代碼過程中有”(“必定有”)”,有”[“必定有”]”。這些是平衡符號。實現這個功能的過程中用到棧。思路是這樣的: 做一個空棧,讀入字符一直到文件結尾。 如果字符是一個封閉符號(])}),則當棧空時報錯。否則將棧元素彈出。如果彈出的符號不是對應的開放符號,則報錯。 在文件結尾,如果棧非空則報錯。 時間復雜度:線性的,與輸入的字符串長度有關系。計算器應用例如寫一個計算器實現:4.99*1.06+5.99+6.99*1.06,不同計算器給出的答案可能不同,可能是18.69或者19.37。在正確的計算過程中計算順序是 01 4.99*1.06=A1; 02 A1+5.99=A1; 03 6.99*1.06=A2; 04 A1+A2=答案 這種操作的順序書寫出來:4.99 1.06 * 5.99 + 6.99 1.06 * +。這叫做后綴表達法或者逆波蘭記法。4.99*1.06+5.99+6.99*1.06 這種表示方法叫做中綴表達式。如何從中綴到后綴? 假設輸入的字符串是表達式合法的,可以使用棧,實現中綴到后綴的轉換。例如中綴表達式為:a+b*c+(d*e+f)*g。這里有兩個站,一個是輸出棧,一個是符號棧。 01 讀到一個操作數,push到輸出棧; 02 讀到一個操作符,push到符號棧;如果符號是”)”,則彈出符號棧元素到輸出棧,直到碰到”(“,”(“彈出,不進入輸出棧。如果是其他操作符號(例如:+-*/),從符號棧中彈出元素直到發現優先級更低的元素為止。對于”(“,”)”要特殊對待。 03 讀到輸入的末尾,把符號棧所有元素彈出,放入輸出棧。方法調用在計算機中,當從方法A執行一段,調用方法B,執行B之后,返回A繼續執行。當然可能會嵌套多層方法調用。每一次方法跳出,都需要把當前執行狀態記錄到棧中。保存的信息稱為活動記錄。當方法調用太多的時候就會發生棧溢出的錯誤。這種保存是計算機主動幫我們做的。解決棧溢出,首先檢查代碼邏輯,是否忘記了基本情況判斷;其次,如果真的是因為數據量太大,必須進行多次遞歸調用,則可以顯示的使用棧,將遞歸改為遞推,當然要損失的是代碼的可讀性。代碼任務01 棧的數組實現 02 棧的鏈表實現 03 語法檢查工具 04 計算器,中綴到后綴,后綴計算
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉山县| 桦南县| 江川县| 简阳市| 正蓝旗| 黔西| 安康市| 旅游| 碌曲县| 贵定县| 尤溪县| 色达县| 五大连池市| 夹江县| 西城区| 吉隆县| 浪卡子县| 资兴市| 岑溪市| 铜山县| 吕梁市| 天水市| 黄骅市| 忻城县| 阳曲县| 河南省| 德钦县| 视频| 清河县| 明溪县| 涡阳县| 旺苍县| 唐河县| 韶山市| 凤凰县| 修武县| 洪湖市| 丹寨县| 工布江达县| 平南县| 平南县|