最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn)

 更新時間:2015年08月24日 15:54:32   作者:buaa_shang  
這篇文章主要介紹了棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn),先進先出和后進先出的知識也已經(jīng)成為了計算機學習中的老生常談了:D需要的朋友可以參考下

先來回顧一下棧和隊列的基本概念:

相同點:從"數(shù)據(jù)結(jié)構(gòu)"的角度看,它們都是線性結(jié)構(gòu),即數(shù)據(jù)元素之間的關(guān)系相同。

不同點:棧(Stack)是限定只能在表的一端進行插入和刪除操作的線性表。 隊列(Queue)是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。它們是完全不同的數(shù)據(jù)類型。除了它們各自的基本操作集不同外,主要區(qū)別是對插入和刪除操作的"限定"。

棧必須按"后進先出"的規(guī)則進行操作:比如說,小學老師批改學生的作業(yè),如果不打亂作業(yè)本的順序的話,那么老師批改的第一份作業(yè)一定是最后那名同學交的那份作業(yè),如果把所有作業(yè)本看作是一個棧中的元素,那么最后一個同學交的作業(yè)本就是棧頂元素,而第一個同學交的,也就是最低端的作業(yè)本,就是棧底元素,這就是對棧的讀取規(guī)則。

而隊列必須按"先進先出"的規(guī)則進行操作:打個比方,一些人去銀行辦理業(yè)務,一定是先去排隊的最先得到服務,當然他也是第一個走出銀行的(假設(shè)這些人都在一個窗口排隊)。如果把所有這些等候服務的人看作是隊的元素,第一個人就是對頭元素,相應的,最后一個人就是隊尾元素。這是隊的讀取規(guī)則。


用Python實現(xiàn)棧,這是Python核心編程里的一個例子:

#!/usr/bin/env python 
 
#定義一個列表來模擬棧 
stack = [] 
 
#進棧,調(diào)用列表的append()函數(shù)加到列表的末尾,strip()沒有參數(shù)是去掉首尾的空格 
def pushit(): 
  stack.append(raw_input('Enter new string: ').strip()) 
 
#出棧,用到了pop()函數(shù) 
def popit(): 
  if len(stack) == 0: 
    print 'Cannot pop from an empty stack!' 
  else: 
    print 'Removed [', stack.pop(), ']' 
 
#編歷棧 
def viewstack(): 
  print stack 
 
#CMDs是字典的使用 
CMDs = {'u': pushit, 'o': popit, 'v': viewstack} 
 
#pr為提示字符 
def showmenu(): 
  pr = """ 
  p(U)sh 
  p(O)p 
  (V)iew 
  (Q)uit 
    Enter choice: """ 
 
  while True: 
    while True: 
      try: 
        #先用strip()去掉空格,再把第一個字符轉(zhuǎn)換成小寫的 
        choice = raw_input(pr).strip()[0].lower() 
      except (EOFError, KeyboardInterrupt, IndexError): 
        choice = 'q' 
 
      print '\nYou picked: [%s]' % choice 
      if choice not in 'uovq': 
        print 'Invalid option, try again' 
      else: 
        break 
 
#CMDs[]根據(jù)輸入的choice從字典中對應相應的value,比如說輸入u,從字典中得到value為pushit,執(zhí)行pushit()進棧操作 
    if choice == 'q': 
      break 
    CMDs[choice]() 
 
#判斷是否是從本文件進入,而不是被調(diào)用 
if __name__ == '__main__': 
  showmenu() 

用Python實現(xiàn)隊列:

#!/usr/bin/env python 
 
queue = [] 
 
def enQ(): 
  queue.append(raw_input('Enter new string: ').strip()) 
 
#調(diào)用list的列表的pop()函數(shù).pop(0)為列表的第一個元素 
def deQ(): 
  if len(queue) == 0: 
    print 'Cannot pop from an empty queue!' 
  else: 
    print 'Removed [', queue.pop(0) ,']' 
 
def viewQ(): 
  print queue 
 
CMDs = {'e': enQ, 'd': deQ, 'v': viewQ} 
 
def showmenu(): 
  pr = """ 
  (E)nqueue 
  (D)equeue 
  (V)iew 
  (Q)uit 
    Enter choice: """ 
 
  while True: 
    while True: 
      try: 
        choice = raw_input(pr).strip()[0].lower() 
      except (EOFError, KeyboardInterrupt, IndexError): 
        choice = 'q' 
 
      print '\nYou picked: [%s]' % choice 
      if choice not in 'devq': 
        print 'Invalid option, try again' 
      else: 
        break 
    if choice == 'q': 
      break 
    CMDs[choice]() 
 
if __name__ == '__main__': 
  showmenu() 

相關(guān)文章

  • pandas取出重復數(shù)據(jù)的方法

    pandas取出重復數(shù)據(jù)的方法

    今天小編就為大家分享一篇pandas取出重復數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python調(diào)用騰訊API進行人像動漫化效果實例

    Python調(diào)用騰訊API進行人像動漫化效果實例

    最近上網(wǎng)的時候看到了一個有趣的東西,叫做人物動漫化,嘗試著用python實現(xiàn)了,所以下面這篇文章主要給大家介紹了關(guān)于Python調(diào)用騰訊API進行人像動漫化效果的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Python代碼太長換行的實現(xiàn)

    Python代碼太長換行的實現(xiàn)

    這篇文章主要介紹了Python代碼太長換行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Pandas數(shù)據(jù)操作及數(shù)據(jù)分析常用技術(shù)介紹

    Pandas數(shù)據(jù)操作及數(shù)據(jù)分析常用技術(shù)介紹

    Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫,具有強大的數(shù)據(jù)操作和分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合等。常用技術(shù)有數(shù)據(jù)讀取與寫入、數(shù)據(jù)索引、數(shù)據(jù)切片、數(shù)據(jù)合并、數(shù)據(jù)透視表、數(shù)據(jù)可視化等,適用于各種數(shù)據(jù)分析和機器學習任務
    2023-04-04
  • Python中實現(xiàn)字符串類型與字典類型相互轉(zhuǎn)換的方法

    Python中實現(xiàn)字符串類型與字典類型相互轉(zhuǎn)換的方法

    這篇文章主要介紹了Python中實現(xiàn)字符串類型與字典類型相互轉(zhuǎn)換的方法,非常實用,需要的朋友可以參考下
    2014-08-08
  • Python 中最長公共子序列的長度

    Python 中最長公共子序列的長度

    子序列是在不改變剩余字符的順序的情況下,在刪除一些字符或不刪除任何字符后從給定序列獲得的序列,這篇文章主要介紹了Python 中的最長公共子序列,需要的朋友可以參考下
    2023-06-06
  • python如何實現(xiàn)圖片壓縮

    python如何實現(xiàn)圖片壓縮

    這篇文章主要介紹了python如何實現(xiàn)圖片壓縮,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • 詳解python深淺拷貝區(qū)別

    詳解python深淺拷貝區(qū)別

    在本篇文章里小編給大家整理了關(guān)于python深淺拷貝區(qū)別的相關(guān)知識點總結(jié),有興趣的朋友們可以參考下。
    2019-06-06
  • matplotlib如何設(shè)置坐標軸刻度的個數(shù)及標簽的方法總結(jié)

    matplotlib如何設(shè)置坐標軸刻度的個數(shù)及標簽的方法總結(jié)

    這里介紹兩種設(shè)置坐標軸刻度的方法,一種是利用pyplot提交的api去進行設(shè)置,另一種是通過調(diào)用面向?qū)ο蟮腶pi, 即通過matplotlib.axes.Axes去設(shè)置,需要的朋友可以參考下
    2021-06-06
  • python中isoweekday和weekday的區(qū)別及說明

    python中isoweekday和weekday的區(qū)別及說明

    這篇文章主要介紹了python中isoweekday和weekday的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

舒兰市| 扶余县| 新化县| 万源市| 金寨县| 桐梓县| 灵丘县| 鞍山市| 沛县| 阆中市| 漠河县| 白山市| 奉新县| 富顺县| 都江堰市| 阿拉善盟| 大丰市| 郸城县| 荥阳市| 阿拉善左旗| 徐汇区| 湾仔区| 丰台区| 双柏县| 涟源市| 阿鲁科尔沁旗| 龙川县| 山阴县| 凉山| 上林县| 阜新市| 舟曲县| 四川省| 化德县| 巴南区| 克山县| 金川县| 恭城| 如东县| 凌云县| 舒兰市|