国产探花免费观看_亚洲丰满少妇自慰呻吟_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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嫩江县| 绿春县| 定边县| 大兴区| 临西县| 阿拉善右旗| 凉山| 涿州市| 华亭县| 且末县| 千阳县| 湘阴县| 新民市| 固安县| 沙雅县| 江孜县| 利辛县| 金秀| 沅江市| 广平县| 黔西县| 文安县| 康平县| 东海县| 普宁市| 白朗县| 裕民县| 客服| 延津县| 宣威市| 白河县| 澄迈县| 筠连县| 宜宾县| 郧西县| 南通市| 宣汉县| 大港区| 丰顺县| 罗城| 崇礼县|