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

Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表定義與用法實(shí)例詳解【單鏈表、循環(huán)鏈表】

 更新時(shí)間:2017年09月28日 11:04:14   作者:Inside_Zhang  
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表定義與用法,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了單鏈表、循環(huán)鏈表等的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表定義與用法。分享給大家供大家參考,具體如下:

本文將為大家講解:

(1)從鏈表節(jié)點(diǎn)的定義開始,以類的方式,面向?qū)ο蟮乃枷脒M(jìn)行鏈表的設(shè)計(jì)

(2)鏈表類插入和刪除等成員函數(shù)實(shí)現(xiàn)時(shí)需要考慮的邊界條件,
prepend(頭部插入)、pop(頭部刪除)、append(尾部插入)、pop_last(尾部刪除)

2.1 插入:

空鏈表
鏈表長度為1
插入到末尾

2.2 刪除

空鏈表
鏈表長度為1
刪除末尾元素

(3)從單鏈表到單鏈表的一眾變體:

帶尾節(jié)點(diǎn)的單鏈表
循環(huán)單鏈表
雙鏈表

1. 鏈表節(jié)點(diǎn)的定義

class LNode:
 def __init__(self, elem, next_=None):
  self.elem = elem
  self.next = next_

2. 單鏈表的實(shí)現(xiàn)

重點(diǎn)理解插入、刪除的實(shí)現(xiàn)及其需要考慮的邊界條件:

class LinkedListUnderflow(ValueError):
 pass
class LList:
 def __init__(self):
  self._head = None
 def is_empty(self):
  return self._head is None
 def prepend(self, elem):
  self._head = LNode(elem, self._head)
 def pop(self):
  if self._head is None:
   raise LinkedListUnderflow('in pop')
  e = self._head.elem
  self._head = self._head.next
  return e
 def append(self, elem):
  if self._head is None:
   self._head = LNode(elem)
   return
  p = self._head
  while p.next is not None:
   p = p.next
  p.next = LNode(elem)
 def pop_last(self):
  if self._head is None:
   raise LinkedListUnderflow('in pop_last')
  p = self._head
  if p.next is None:
   e = p.elem
   self._head = None
   return e
  while p.next.next is not None:
   p = p.next
  e = p.next.elem
  p.next = None
  return e

簡(jiǎn)單總結(jié):

(0)能夠訪問 p.next.next 的前提是 p.next 不為空;
(1)尾部插入,如果鏈表不為空,需且僅需改變的是尾部節(jié)點(diǎn)的指針;
(2)尾部刪除,如果鏈表長度不為空,需且僅需改變的是倒數(shù)第二個(gè)節(jié)點(diǎn)的指針。

單鏈表的簡(jiǎn)單變形:具有尾部節(jié)點(diǎn)的單鏈表

class LList1(LList):
 def __init__(self):
  LList.__init__(self)
  self._rear = None
 ...

我們僅需重寫的是:頭部的插入、尾部的插入、尾部的刪除

def prepend(self, elem):
 if self._head is None:
  self._head = LNode(elem)
  self._rear = self._head
 else:
  self._head = LNode(elem, self._head)
def append(self, elem):
 if self._head is None:
  self._head = LNode(elem)
  self._rear = self._head
 else:
  self._rear.next = LNode(elem)
  self._rear = self._rear.next
def pop_last(self):
 if self._head is None:
  raise LinkedListUnderflow('in pop_last')
 p = self._head
 if p.next is None:
  e = p.elem
  self._head = None
  return e
 while p.next.next is not None:
  p = p.next
 e = p.next.elem
 self._rear = p
 p.next = None
 return e

單鏈表的變體:循環(huán)單鏈表

class LCList:
 def __init__(self):
  self._rear = None
 def prepend(self, elem):
  if self._rear is None:
   self._rear = LNode(elem)
   self._rear.next = self._rear
  else:
   self._rear.next = LNode(elem, self._rear.next)
 def append(self, elem):
  self.prepend(elem)
  self_rear = self._rear.next
 def pop(self):
  if self._rear is None:
   raise LinkedListUnderflow('in pop')
  p = self._rear.next
  if p is None:
   self._rear = None
  else:
   self._rear.next = p.next
  return p.elem
 def printall(self):
  if self._rear is None:
   raise ...
  p = self._rear.next
  while True:
   print(p.elem)
   if p is self._rear:
    break
   p = p.next

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

顺义区| 武冈市| 四子王旗| 呼图壁县| 巩义市| 宣威市| 东乡| 义乌市| 若羌县| 博湖县| 两当县| 杂多县| 元谋县| 盐亭县| 洞口县| 二连浩特市| 湖南省| 淄博市| 滦南县| 会东县| 常德市| 秭归县| 抚顺县| 大埔县| 海宁市| 洱源县| 辉县市| 平乡县| 镶黄旗| 吉首市| 鸡泽县| 毕节市| 阳高县| 全南县| 盐城市| 余江县| 阿拉善右旗| 佳木斯市| 科尔| 昌江| 丘北县|