国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python數據結構與算法之鏈表定義與用法實例詳解【單鏈表、循環

2020-02-16 10:19:02
字體:
來源:轉載
供稿:網友

本文實例講述了Python數據結構與算法之鏈表定義與用法。分享給大家供大家參考,具體如下:

本文將為大家講解:

(1)從鏈表節點的定義開始,以類的方式,面向對象的思想進行鏈表的設計

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

2.1 插入:

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

2.2 刪除

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

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

帶尾節點的單鏈表
循環單鏈表
雙鏈表

1. 鏈表節點的定義

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

2. 單鏈表的實現

重點理解插入、刪除的實現及其需要考慮的邊界條件:

class LinkedListUnderflow(ValueError): passclass 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

簡單總結:

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

單鏈表的簡單變形:具有尾部節點的單鏈表

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.nextdef 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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平度市| 东方市| 安阳县| 普安县| 宁强县| 伽师县| 腾冲县| 青神县| 邢台县| 阿克苏市| 新安县| 常德市| 辛集市| 长子县| 子洲县| 尉氏县| 集安市| 靖江市| 丁青县| 南漳县| 蛟河市| 仪征市| 六枝特区| 安徽省| 永福县| 高台县| 永丰县| 旬邑县| 海盐县| 谢通门县| 阿坝县| 黄冈市| 建阳市| 萍乡市| 丹阳市| 广南县| 玉树县| 乐陵市| 鄯善县| 江阴市| 扬州市|