亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python用list實現堆棧和隊列

系統 2050 0

詳細版本見個人博客:Python用list實現堆棧和隊列


Python中可以用list來模擬棧和隊列:

  • 棧(stack) :只能在一端進行數據操作,遵循后進先出(LIFO)原則
  • 隊列(queue) :可以在兩端進行數據操作,遵循先進先出(FIFO)原則,出隊列的一端稱為隊首,入隊列的一端稱為隊尾

一、棧

1、棧要記錄的數據

  • 棧頂位置top:注意這個top有兩種理解方式,一種是表示棧的最后一個數據的位置,另一種是表示棧的最后一個數據的下一個位置,這兩種理解對棧的操作代碼有一定的影響
  • 棧最大大小size

2、棧的操作

  • isEmpty() :判斷棧是否為空
  • isFull() :判斷棧是否已滿
  • push(element) :向棧中添加一個值, 注意棧是否為滿的
  • pop() :從棧中彈出一個值, 注意棧是否為空

3、Python列表實現棧

            
              
                class
              
              
                StackException
              
              
                (
              
              Exception
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               data
              
                )
              
              
                :
              
              
        self
              
                .
              
              data 
              
                =
              
               data
    
              
                def
              
              
                __str__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              data


              
                class
              
              
                Stack
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              size 
              
                =
              
              
                10
              
              
                )
              
              
                :
              
              
        self
              
                .
              
              S 
              
                =
              
              
                [
              
              
                ]
              
              
        self
              
                .
              
              size 
              
                =
              
               size  
              
                # 棧大小
              
              
        self
              
                .
              
              top 
              
                =
              
              
                -
              
              
                1
              
              
                # 棧頂位置
              
              
                def
              
              
                setSize
              
              
                (
              
              self
              
                ,
              
               size
              
                )
              
              
                :
              
              
                # 設置棧的大小
              
              
        self
              
                .
              
              size 
              
                =
              
               size    

    
              
                def
              
              
                isEmpty
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 判斷棧是否為空
              
              
                if
              
               self
              
                .
              
              top 
              
                ==
              
              
                -
              
              
                1
              
              
                :
              
              
                return
              
              
                True
              
              
                else
              
              
                :
              
              
                return
              
              
                False
              
              
                def
              
              
                isFull
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 判斷棧是否滿
              
              
                if
              
               self
              
                .
              
              top 
              
                ==
              
               self
              
                .
              
              size 
              
                -
              
              
                1
              
              
                :
              
              
                return
              
              
                True
              
              
                else
              
              
                :
              
              
                return
              
              
                False
              
              
                def
              
              
                peek
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 查看棧頂的對象,但不移除
              
              
                if
              
               self
              
                .
              
              isEmpty
              
                (
              
              
                )
              
              
                :
              
              
                raise
              
               StackException
              
                (
              
              
                'StackUnderflow'
              
              
                )
              
              
                else
              
              
                :
              
              
            element 
              
                =
              
               self
              
                .
              
              S
              
                [
              
              
                -
              
              
                1
              
              
                ]
              
              
                return
              
               element

    
              
                def
              
              
                pop
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 移除棧頂對象,并返回該對象的值
              
              
                if
              
               self
              
                .
              
              isEmpty
              
                (
              
              
                )
              
              
                :
              
              
                raise
              
               StackException
              
                (
              
              
                'StackUnderflow'
              
              
                )
              
              
                else
              
              
                :
              
              
            element 
              
                =
              
               self
              
                .
              
              S
              
                [
              
              
                -
              
              
                1
              
              
                ]
              
              
            self
              
                .
              
              top 
              
                =
              
               self
              
                .
              
              top 
              
                -
              
              
                1
              
              
                del
              
               self
              
                .
              
              S
              
                [
              
              
                -
              
              
                1
              
              
                ]
              
              
                return
              
               element

    
              
                def
              
              
                push
              
              
                (
              
              self
              
                ,
              
               element
              
                )
              
              
                :
              
              
                # 把對象壓入棧頂
              
              
                if
              
               self
              
                .
              
              isFull
              
                (
              
              
                )
              
              
                :
              
              
                raise
              
               StackException
              
                (
              
              
                'StackOverflow'
              
              
                )
              
              
                else
              
              
                :
              
              
            self
              
                .
              
              S
              
                .
              
              append
              
                (
              
              element
              
                )
              
              
            self
              
                .
              
              top 
              
                =
              
               self
              
                .
              
              top 
              
                +
              
              
                1
              
            
          
            
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    s 
              
                =
              
               Stack
              
                (
              
              
                )
              
              
                # 壓棧測試
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
        s
              
                .
              
              push
              
                (
              
              i
              
                )
              
              
                # 棧滿測試
              
              
                try
              
              
                :
              
              
        s
              
                .
              
              push
              
                (
              
              
                1
              
              
                )
              
              
                except
              
               Exception 
              
                as
              
               e
              
                :
              
              
                print
              
              
                (
              
              e
              
                )
              
              
                # 出棧測試
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              s
              
                .
              
              pop
              
                (
              
              
                )
              
              
                )
              
              
                # 棧空測試
              
              
                try
              
              
                :
              
              
        s
              
                .
              
              pop
              
                (
              
              
                )
              
              
                except
              
               Exception 
              
                as
              
               e
              
                :
              
              
                print
              
              
                (
              
              e
              
                )
              
            
          

二、隊列

1、隊列要記錄的數據

  • 隊頭位置end
  • 隊列的大小size

2、標準做法

利用數組 Q[1..n] 來實現含有n-1個元素隊列(保留一位元素用來判斷隊列空或滿)。該列有一個屬性 Q.head 指向隊頭元素,屬性 Q.tail 指向下一個新元素將要插入的位置,列中的元素存放在位置 Q.head, Q.head+1, …, Q.tail-1 上。

  • 初始時, Q.head = Q.tail = 1
  • Q.head = Q.tail 時, 隊列為空
  • Q.head = Q.tail + 1 時,隊列為滿

3、隊列的操作

  • isEmpty() :判斷隊列是否為空
  • isFull() :判斷隊列是否已滿
  • inQueue(element) :入隊
  • outQueue() :出隊

4、Python列表實現隊列

            
              
                class
              
              
                QueueException
              
              
                (
              
              Exception
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               data
              
                )
              
              
                :
              
              
        self
              
                .
              
              data 
              
                =
              
               data
    
              
                def
              
              
                __str__
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                return
              
               self
              
                .
              
              data


              
                class
              
              
                Queue
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
               size
              
                =
              
              
                10
              
              
                )
              
              
                :
              
              
        self
              
                .
              
              Q 
              
                =
              
              
                [
              
              
                ]
              
              
        self
              
                .
              
              size 
              
                =
              
               size  
              
                # 隊列大小
              
              
        self
              
                .
              
              end 
              
                =
              
              
                -
              
              
                1
              
              
                # 隊頭位置
              
              
                def
              
              
                setSize
              
              
                (
              
              self
              
                ,
              
               size
              
                )
              
              
                :
              
              
                # 設置隊列的大小
              
              
        self
              
                .
              
              size 
              
                =
              
               size
    
    
              
                def
              
              
                inQueue
              
              
                (
              
              self
              
                ,
              
               element
              
                )
              
              
                :
              
              
                # 對象入隊
              
              
                if
              
               self
              
                .
              
              end 
              
                <
              
               self
              
                .
              
              size 
              
                -
              
              
                1
              
              
                :
              
              
            self
              
                .
              
              Q
              
                .
              
              append
              
                (
              
              element
              
                )
              
              
            self
              
                .
              
              end 
              
                +=
              
              
                1
              
              
                else
              
              
                :
              
              
                raise
              
               QueueException
              
                (
              
              
                'QueueFull'
              
              
                )
              
              
                def
              
              
                outQueue
              
              
                (
              
              self
              
                )
              
              
                :
              
              
                # 對象出隊
              
              
                if
              
               self
              
                .
              
              end 
              
                ==
              
              
                -
              
              
                1
              
              
                :
              
              
                raise
              
               QueueException
              
                (
              
              
                'QueueEmpty'
              
              
                )
              
              
                else
              
              
                :
              
              
            element 
              
                =
              
               self
              
                .
              
              Q
              
                [
              
              
                0
              
              
                ]
              
              
            self
              
                .
              
              Q 
              
                =
              
               self
              
                .
              
              Q
              
                [
              
              
                1
              
              
                :
              
              
                ]
              
              
            self
              
                .
              
              end 
              
                -=
              
              
                1
              
              
                return
              
               element


            
          
            
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    q 
              
                =
              
               Queue
              
                (
              
              
                )
              
              
                # 入隊測試
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
        q
              
                .
              
              inQueue
              
                (
              
              i
              
                )
              
              
                # 隊列滿測試
              
              
                try
              
              
                :
              
              
        q
              
                .
              
              inQueue
              
                (
              
              
                1
              
              
                )
              
              
                except
              
               Exception 
              
                as
              
               e
              
                :
              
              
                print
              
              
                (
              
              e
              
                )
              
              
                # 出隊測試
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                10
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              q
              
                .
              
              outQueue
              
                (
              
              
                )
              
              
                )
              
              
                # 隊列空測試
              
              
                try
              
              
                :
              
              
        q
              
                .
              
              outQueue
              
                (
              
              
                )
              
              
                except
              
               Exception 
              
                as
              
               e
              
                :
              
              
                print
              
              
                (
              
              e
              
                )
              
            
          

詳細版本見個人博客:Python用list實現堆棧和隊列


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美三级一区二区三区 | 亚洲精品一二三四 | 久久久久九九 | 日本不卡高清视频 | 天天操夜夜操美女 | 欧美成人xx免费视频 | 国产高清福利91成人 | 精品久久网站 | 欧美777精品久久久久网 | 九操网| 我要看免费的毛片 | 久草视频免费在线看 | 久久综合久美利坚合众国 | 狠狠操狠狠插 | 免费精品视频 | 中文字幕一区二区精品区 | 亚洲日本va中文字幕在线不卡 | 亚洲精品成人久久久影院 | 国产毛片毛片精品天天看 | 欧美末成年videos在线观看 | 日本一区二区高清 | 一级毛片人与动免费观看 | 亚洲欧美另类在线视频 | 九九视频免费 | 操熟美女又肥又嫩的骚屁股 | 97精品福利视频在线 | 日韩国产中文字幕 | 国产综合欧美日韩视频一区 | 一级毛片q片 | 欧美亚洲欧美日韩中文二区 | 人人做人人爽久久久精品 | 国产成人精品免费视频大全办公室 | 日韩有码在线视频 | 欧美在线视频网 | 老妇毛片 | 国产成人精品视频播放 | 亚洲精品国产一区二区图片欧美 | 青青久久精品 | 日本高清不卡码 | 交换国产精品视频一区 | 天天干天天在线 |