亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python 實現鏈表實例代碼

2020-02-23 04:33:44
字體:
來源:轉載
供稿:網友

Python 實現鏈表實例代碼

前言

算法和數據結構是一個亙古不變的話題,作為一個程序員,掌握常用的數據結構實現是非常非常的有必要的。

實現清單

實現鏈表,本質上和語言是無關的。但是靈活度卻和實現它的語言密切相關。今天用Python來實現一下,包含如下操作:

['addNode(self, data)']['append(self, value)']['prepend(self, value)']['insert(self, index, value)']['delNode(self, index)']['delValue(self, value)']['isempty(self)']['truncate(self)']['getvalue(self, index)']['peek(self)']['pop(self)']['reverse(self)']['delDuplecate(self)']['updateNode(self, index, value)']['size(self)']['print(self)']

生成這樣的一個方法清單肯定是不能手動寫了,要不然得多麻煩啊,于是我寫了個程序,來匹配這些自己實現的方法。代碼比較簡單,核心思路就是匹配源文件的每一行,找到符合匹配規則的內容,并添加到總的結果集中。

代碼如下:

# coding: utf8# @Author: 郭 璞# @File: getmethods.py                                 # @Time: 2017/4/5                  # @Contact: 1064319632@qq.com# @blog: http://blog.csdn.net/marksinoberg# @Description: 獲取一個模塊或者類中的所有方法及參數列表import redef parse(filepath, repattern):  with open(filepath, 'rb') as f:    lines = f.readlines()  # 預解析正則  rep = re.compile(repattern)  # 創建保存方法和參數列表的結果集列表  result = []  # 開始正式的匹配實現  for line in lines:    res = re.findall(rep, str(line))    print("{}的匹配結果{}".format(str(line), res))    if len(res)!=0 or res is not None:      result.append(res)    else:      continue  return [item for item in result if item !=[]]if __name__ == '__main__':  repattern = "def (.[^_0-9]+/(.*?/)):"  filepath = './SingleChain.py'  result = parse(filepath, repattern)  for item in result:    print(str(item))

鏈表實現

# coding: utf8# @Author: 郭 璞# @File: SingleChain.py                                 # @Time: 2017/4/5                  # @Contact: 1064319632@qq.com# @blog: http://blog.csdn.net/marksinoberg# @Description: 單鏈表實現class Node(object):  def __init__(self, data, next):    self.data = data    self.next = nextclass LianBiao(object):  def __init__(self):    self.root = None  # 給單鏈表添加元素節點  def addNode(self, data):    if self.root==None:      self.root = Node(data=data, next=None)      return self.root    else:      # 有頭結點,則需要遍歷到尾部節點,進行鏈表增加操作      cursor = self.root      while cursor.next!= None:        cursor = cursor.next      cursor.next = Node(data=data, next=None)      return self.root  # 在鏈表的尾部添加新節點,底層調用addNode方法即可  def append(self, value):    self.addNode(data=value)  # 在鏈表首部添加節點  def prepend(self, value):    if self.root == None:      self.root = Node(value, None)    else:      newroot = Node(value, None)      # 更新root索引      newroot.next = self.root      self.root = newroot  # 在鏈表的指定位置添加節點  def insert(self, index, value):    if self.root == None:      return    if index<=0 or index >self.size():      print('index %d 非法, 應該審視一下您的插入節點在整個鏈表的位置!')      return    elif index==1:      # 如果index==1, 則在鏈表首部添加即可      self.prepend(value)    elif index == self.size()+1:      # 如果index正好比當前鏈表長度大一,則添加在尾部即可      self.append(value)    else:      # 如此,在鏈表中部添加新節點,直接進行添加即可。需要使用計數器來維護插入未知      counter = 2      pre = self.root      cursor = self.root.next      while cursor!=None:        if counter == index:          temp = Node(value, None)          pre.next = temp          temp.next = cursor          break        else:          counter += 1          pre = cursor          cursor = cursor.next  # 刪除指定位置上的節點  def delNode(self, index):    if self.root == None:      return    if index<=0 or index > self.size():      return    # 對第一個位置需要小心處理    if index == 1:      self.root = self.root.next    else:      pre = self.root      cursor = pre.next      counter = 2      while cursor!= None:        if index == counter:          print('can be here!')          pre.next = cursor.next          break        else:          pre = cursor          cursor = cursor.next          counter += 1  # 刪除值為value的鏈表節點元素  def delValue(self, value):    if self.root == None:      return    # 對第一個位置需要小心處理    if self.root.data == value:      self.root = self.root.next    else:      pre = self.root      cursor = pre.next      while cursor!=None:        if cursor.data == value:          pre.next = cursor.next          # 千萬記得更新這個節點,否則會出現死循環。。。          cursor = cursor.next          continue        else:          pre = cursor          cursor = cursor.next  # 判斷鏈表是否為空  def isempty(self):    if self.root == None or self.size()==0:      return True    else:      return False  # 刪除鏈表及其內部所有元素  def truncate(self):    if self.root == None or self.size()==0:      return    else:      cursor = self.root      while cursor!= None:        cursor.data = None        cursor = cursor.next      self.root = None      cursor = None  # 獲取指定位置的節點的值  def getvalue(self, index):    if self.root is None or self.size()==0:      print('當前鏈表為空!')      return None    if index<=0 or index>self.size():      print("index %d不合法!"%index)      return None    else:      counter = 1      cursor = self.root      while cursor is not None:        if index == counter:          return cursor.data        else:          counter += 1          cursor = cursor.next  # 獲取鏈表尾部的值,且不刪除該尾部節點  def peek(self):    return self.getvalue(self.size())  # 獲取鏈表尾部節點的值,并刪除該尾部節點  def pop(self):    if self.root is None or self.size()==0:      print('當前鏈表已經為空!')      return None    elif self.size()==1:      top = self.root.data      self.root = None      return top    else:      pre = self.root      cursor = pre.next      while cursor.next is not None:        pre = cursor        cursor = cursor.next      top = cursor.data      cursor = None      pre.next = None      return top  # 單鏈表逆序實現  def reverse(self):    if self.root is None:      return    if self.size()==1:      return    else:      # post = None      pre = None      cursor = self.root      while cursor is not None:        # print('逆序操作逆序操作')        post = cursor.next        cursor.next = pre        pre = cursor        cursor = post      # 千萬不要忘記了把逆序后的頭結點賦值給root,否則無法正確顯示      self.root = pre  # 刪除鏈表中的重復元素  def delDuplecate(self):    # 使用一個map來存放即可,類似于變形的“桶排序”    dic = {}    if self.root == None:      return    if self.size() == 1:      return    pre = self.root    cursor = pre.next    dic = {}    # 為字典賦值    temp = self.root    while temp!=None:      dic[str(temp.data)] = 0      temp = temp.next    temp = None    # 開始實施刪除重復元素的操作    while cursor!=None:      if dic[str(cursor.data)] == 1:        pre.next = cursor.next        cursor = cursor.next      else:        dic[str(cursor.data)] += 1        pre = cursor        cursor = cursor.next  # 修改指定位置節點的值  def updateNode(self, index, value):    if self.root == None:      return    if index<0 or index>self.size():      return    if index == 1:      self.root.data = value      return    else:      cursor = self.root.next      counter = 2      while cursor!=None:        if counter == index:          cursor.data = value          break        cursor = cursor.next        counter += 1  # 獲取單鏈表的大小  def size(self):    counter = 0    if self.root == None:      return counter    else:      cursor = self.root      while cursor!=None:        counter +=1        cursor = cursor.next      return counter  # 打印鏈表自身元素  def print(self):    if(self.root==None):      return    else:      cursor = self.root      while cursor!=None:        print(cursor.data, end='/t')        cursor = cursor.next      print()if __name__ == '__main__':  # 創建一個鏈表對象  lianbiao = LianBiao()  # 判斷當前鏈表是否為空  print("鏈表為空%d"%lianbiao.isempty())  # 判斷當前鏈表是否為空  lianbiao.addNode(1)  print("鏈表為空%d"%lianbiao.isempty())  # 添加一些節點,方便操作  lianbiao.addNode(2)  lianbiao.addNode(3)  lianbiao.addNode(4)  lianbiao.addNode(6)  lianbiao.addNode(5)  lianbiao.addNode(6)  lianbiao.addNode(7)  lianbiao.addNode(3)  # 打印當前鏈表所有值  print('打印當前鏈表所有值')  lianbiao.print()  # 測試對鏈表求size的操作  print("鏈表的size: "+str(lianbiao.size()))  # 測試指定位置節點值的獲取  print('測試指定位置節點值的獲取')  print(lianbiao.getvalue(1))  print(lianbiao.getvalue(lianbiao.size()))  print(lianbiao.getvalue(7))  # 測試刪除鏈表中指定值, 可重復性刪除  print('測試刪除鏈表中指定值, 可重復性刪除')  lianbiao.delNode(4)  lianbiao.print()  lianbiao.delValue(3)  lianbiao.print()  # 去除鏈表中的重復元素  print('去除鏈表中的重復元素')  lianbiao.delDuplecate()  lianbiao.print()  # 指定位置的鏈表元素的更新測試  print('指定位置的鏈表元素的更新測試')  lianbiao.updateNode(6, 99)  lianbiao.print()  # 測試在鏈表首部添加節點  print('測試在鏈表首部添加節點')  lianbiao.prepend(77)  lianbiao.prepend(108)  lianbiao.print()  # 測試在鏈表尾部添加節點  print('測試在鏈表尾部添加節點')  lianbiao.append(99)  lianbiao.append(100)  lianbiao.print()  # 測試指定下標的插入操作  print('測試指定下標的插入操作')  lianbiao.insert(1, 10010)  lianbiao.insert(3, 333)  lianbiao.insert(lianbiao.size(), 99999)  lianbiao.print()  # 測試peek 操作  print('測試peek 操作')  print(lianbiao.peek())  lianbiao.print()  # 測試pop 操作  print('測試pop 操作')  print(lianbiao.pop())  lianbiao.print()  # 測試單鏈表的逆序輸出  print('測試單鏈表的逆序輸出')  lianbiao.reverse()  lianbiao.print()  # 測試鏈表的truncate操作  print('測試鏈表的truncate操作')  lianbiao.truncate()  lianbiao.print()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕av一区二区| 久久av.com| 久久久精品影院| 九九视频直播综合网| 91免费精品视频| 国产美女主播一区| 欧美日韩在线观看视频| 在线电影av不卡网址| 色综合天天综合网国产成人网| 精品呦交小u女在线| 欧美激情二区三区| 日韩最新免费不卡| 亚洲精品第一页| 最近2019中文字幕在线高清| 国产日本欧美一区二区三区在线| 欧美另类交人妖| 精品亚洲一区二区三区在线播放| 国产精品老女人视频| 国产精品女主播| 91丝袜美腿美女视频网站| 欧美激情视频一区| 亚洲综合国产精品| 久久久久久com| 国产91在线播放九色快色| 8050国产精品久久久久久| 久久久国产精彩视频美女艺术照福利| 久久久久久网站| 人体精品一二三区| www国产91| 国产成人精品久久亚洲高清不卡| 久久久久久久影视| 91伊人影院在线播放| 97超级碰碰人国产在线观看| 欧美日韩国产中字| 亚洲欧美激情四射在线日| 欧美日韩ab片| 国产精品自拍小视频| 欧美成人精品影院| 中文字幕亚洲综合久久筱田步美| 日韩激情视频在线| 欧美激情亚洲自拍| 久久中国妇女中文字幕| 一区二区福利视频| 久久九九国产精品怡红院| 亚洲综合最新在线| 精品无人国产偷自产在线| 欧美成人激情图片网| 亚洲欧美成人在线| 伊人激情综合网| 国产精品偷伦免费视频观看的| 亚洲精品国精品久久99热| www.日本久久久久com.| 国产亚洲欧美另类中文| 成人国产精品色哟哟| 欧美激情伊人电影| 成人做爰www免费看视频网站| 91精品国产91久久久久| 亚洲精品乱码久久久久久金桔影视| 人人做人人澡人人爽欧美| 亚洲欧美精品中文字幕在线| 午夜精品久久久久久99热软件| 国产福利精品在线| 一个人看的www欧美| 日韩一区二区久久久| 久久欧美在线电影| 欧美一区二区三区……| 日韩精品中文字| 亚洲天堂成人在线| 亚洲精品电影网站| 欧美床上激情在线观看| 日韩美女视频在线观看| 国产精品日日做人人爱| 国产精品美女免费视频| 国产欧美日韩精品丝袜高跟鞋| 亚洲人成电影网站色www| 日韩免费在线播放| 91精品久久久久久久久久另类| 欧美大学生性色视频| 综合激情国产一区| 热久久视久久精品18亚洲精品| 美女性感视频久久久| 亚洲自拍小视频免费观看| 国产日韩中文字幕在线| 国产欧美在线播放| 亚洲成色777777在线观看影院| 欧美精品一区二区三区国产精品| 一区二区三区高清国产| 精品日韩美女的视频高清| 亚洲国产精品va在线观看黑人| 欧美日韩国产第一页| 成人美女av在线直播| 欧美大片欧美激情性色a∨久久| 91大神在线播放精品| 伊人一区二区三区久久精品| 欧美视频国产精品| 国产成人福利视频| 成人免费在线网址| 日韩亚洲国产中文字幕| 性欧美xxxx交| 亚洲欧美日韩国产中文专区| 国产精品视频999| 伊人伊成久久人综合网小说| 欧美视频专区一二在线观看| 久久精品中文字幕| 亚洲欧美视频在线| 97欧美精品一区二区三区| 亚洲国产精品久久久久秋霞不卡| 国产99视频在线观看| 一区二区三区四区视频| 亚洲专区中文字幕| 欧美亚洲在线观看| 国产激情久久久久| 亚洲视频日韩精品| 日韩国产高清视频在线| 国产福利成人在线| 九九热这里只有精品6| 亚洲一区二区三区sesese| 国产精品美乳一区二区免费| 国产精品嫩草影院久久久| 国产精品视频精品| 欧美福利小视频| 久青草国产97香蕉在线视频| 这里只有精品视频| 日本一区二区三区四区视频| 国模极品一区二区三区| 亚洲激情第一页| 久久手机精品视频| 国产成人精品视频在线观看| 亚洲成人av在线| 久久av在线看| 亚洲精品按摩视频| 国产成人综合精品在线| 日本欧美国产在线| 午夜精品久久久久久99热| 亚洲欧美精品中文字幕在线| 少妇av一区二区三区| 91tv亚洲精品香蕉国产一区7ujn| 国产一区二区三区在线视频| 国产精品国产自产拍高清av水多| 日韩一区视频在线| 中文字幕亚洲色图| 国产精品男人爽免费视频1| 亚洲欧美制服综合另类| 国产91精品视频在线观看| 日韩美女中文字幕| 黑丝美女久久久| 久久久噜噜噜久久中文字免| 欧美午夜精品久久久久久人妖| 亚洲欧美日本另类| 久久全球大尺度高清视频| 亚洲成人av中文字幕| 国产精品劲爆视频| 韩国三级日本三级少妇99| 亚洲激情电影中文字幕| 免费97视频在线精品国自产拍| 中文字幕精品国产| 午夜精品久久久久久久久久久久| 欧美性生交xxxxxdddd| 亚洲xxxx18| 亚洲综合色av| 性欧美长视频免费观看不卡| 久久中国妇女中文字幕| 亚洲色图综合网| 欧美激情国产精品|