資源簡介 (共29張PPT)基礎教育精品課棧2 棧的基本操作1 棧的概念與特性3 棧的應用實例學習內容大學論語中庸孟子將4本書依次放入收納箱中庸大學孟子論語將4本書依次從收納箱取出彈匣中子彈裝彈過程(入棧)文字處理軟件的“撤銷 ”操作網頁瀏覽器的“ 后退 ”鍵消毒桶中餐盤的取放中庸大學孟子論語棧的概念棧底:棧頂:中庸大學孟子論語ü 先進后出 、 后進先出ü 有限序列性棧的特性棧底:棧頂:相同點有限序列, 線性表結構, 元素個數是有限的, 可以 是空的, 也可以包含多個 元素。棧是“ 先進后出 ”, 僅在 棧頂 一 端進行入棧或出棧操作;隊列是“ 先進先出 ”, 可 以在兩端進行操作, 其中隊尾 一 端入隊, 隊首 一 端出隊。問題與討論:棧與隊列有什么相同點與不同點?不同點A B CD數組 st 0 1 23DCBA棧的存儲top=3 top=2 top= 1 top=0使用數組st來存儲棧棧底:棧頂:DCDCBA棧的存儲top=3 top=2 top= 1 top=0BA^棧的鏈式存儲結構棧底:棧頂:toptop = - 1st = ['']*4棧的基本操作:建棧3210下標空棧top = top + 1 st[top] = 'A' top = top + 1 st[top] = 'B' top = top + 1 st[top] = 'C' top = top + 1 st[top] = 'D'下標3 2 1top→ 0棧的基本操作:入棧DCBACBABAA3top→ 21 0top→ 32 1 032top→ 1 0① ② ③ ④a = ['A','B','C','D'] for i in a:=DCBA棧的基本操作:入棧3210下標思考: 若棧空則不能出棧, 判斷棧空的條件是什么?下標top→ 3210DCBA出棧時棧頂元素取出, 同時top值減1棧的基本操作:出棧 出棧和取出棧頂元素有什么區別? 輸出棧頂元素代碼如何實現?print(st[top])top == - 1while top > - 1:print(st[top],end="") top = top - 1下標top→ 3210DCBA棧的基本操作:出棧運行結果:DCBA問題與討論:字母A,B,C按順序入棧, 請問出棧的順序可能有哪幾種?A,B,CA,C,BB,A,CB,C,AC,B,AC,A,BABC問題與討論:字母A,B,C按順序入棧, 請問出棧的順序可能有哪幾種?B,C,AC,B,AC,A,BA,B,CA,C,BB,A,CABC第 一章項目挑戰中的“ 用戶角色特征值 ”, 把該值 (十進制) 轉換成二進制, 采用“ 除 二取余法 ”, 利用棧來存儲每次計算得到的余數 。 (6)10 = (110)2222110………………棧的實例:進制轉換2 top→1 0 入棧過程 top→2 1 02 6 2 3 2 10棧的實例:進制轉換特征值的變化: 6→3→ 1→0… …0……1 ……121 top→ 0010110n= 1 ②n=0 ③n=3 ①2 21 1top→ 0 0top = - 1② ③ ④出棧過程1 0top→210①1棧的實例:進制轉換1001102top→10stack = [- 1]* 100top = - 1n = int(input("請輸入十進制整數:")) while :x = n % 2top = top + 1n = n // 2while top >= 0:print(stack[top],end="")=棧的實例:進制轉換(6×(3+2)-4)÷26×(3+2)-4)÷2 (6×(3+2-4)÷2 )6×)3+2(-4(÷2判斷 一 個數學計算式中的括號(只有小括號) 是否匹配。匹配不匹配不匹配不匹配棧的實例:括號匹配括號的數量括號的位置從左往右遍歷, 遇到左括號, 入棧, 遇到右括號, 出棧。① 棧空, 出現右括號, 不匹配② 遍歷結束, 棧中還有左括號(棧不空), 不匹配 ③ 遍歷結束, 棧空, 匹配1.計算式中只關注括號, 忽略其他字符 ( ( ) ) 2.判斷左右括號的數量與位置時, 采用棧結構來設計棧的實例:括號匹配第 一 步: 抽象與建模(6×(3+2)-4)÷2top = - 1① ② ③ ④棧的實例:括號匹配第 二 步: 設計算法( ( ))((((1top→ 01top→ 0top→1010該字符是右括號?從左往右遍歷結束?該字符是左括號?棧的實例:括號匹配棧空?棧空?N Y不匹配不匹配匹配出棧入棧NNNNYYYY第三步: 編寫程序st = [""]* 100; top = - 1 #建棧 flag= True #標記是否有不匹配的情況 s = input("輸入計算式:") for i in range(len(s)): #完善代碼 if top >= 0: #棧中還有左括號 flag = False if flag: print("括號匹配") else: print("括號不匹配")棧的實例:括號匹配stacklist[] #建立 一 個空棧stacklist.append("A") #字母A入棧stacklist.append("B") #字母B入棧print(stacklist[1]) #輸出棧頂元素, 為字母Bprint(len(stacklist)) #輸出棧中元素個數, 為2stacklist.pop() #彈出棧頂元素print(len(stacklist)) #輸出棧中元素個數, 為1, 是字母A拓展:用列表自帶函數和方法實現棧小結與練習1. 編號為1 、 2 、 3 、 4的4列火車, 按順序開進 一 個棧式 結構的站點 。 開出火車站的順序有多少種? 請寫出所有可能的出棧序列。2. 元素a,b,c,d,e按序入棧, 在所有的出棧序列中, 以d 開 頭的出棧序列有哪些?3. 參照十進制轉二進制的方法, 編寫 一 個將十進制數N 轉換為r進制數的程序。4. 如果括號匹配問題中, 既有小括號 、 又有中括號和大 括號, 請你設計算法并編寫程序判斷括號是否匹配。小結與練習 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫