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

首頁 > 編程 > Python > 正文

Python實現的數據結構與算法之鏈表詳解

2020-01-04 19:26:19
字體:
來源:轉載
供稿:網友

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

一、概述

鏈表(linked list)是一組數據項的集合,其中每個數據項都是一個節點的一部分,每個節點還包含指向下一個節點的鏈接。
根據結構的不同,鏈表可以分為單向鏈表、單向循環鏈表、雙向鏈表、雙向循環鏈表等。其中,單向鏈表和單向循環鏈表的結構如下圖所示:

Python實現的數據結構與算法之鏈表詳解

二、ADT

這里只考慮單向循環鏈表ADT,其他類型的鏈表ADT大同小異。單向循環鏈表ADT(抽象數據類型)一般提供以下接口:

① SinCycLinkedlist() 創建單向循環鏈表
② add(item) 向鏈表中插入數據項
③ remove(item) 刪除鏈表中的數據項
④ search(item) 在鏈表中查找數據項是否存在
⑤ empty() 判斷鏈表是否為空
⑥ size() 返回鏈表中數據項的個數

單向循環鏈表操作的示意圖如下:

Python實現的數據結構與算法之鏈表詳解

三、Python實現

Python的內建類型list底層是由C數組實現的,list在功能上更接近C++的vector(因為可以動態調整數組大小)。我們都知道,數組是連續列表,鏈表是鏈接列表,二者在概念和結構上完全不同,因此list不能用于實現鏈表。
在C/C++中,通常采用“指針+結構體”來實現鏈表;而在Python中,則可以采用“引用+類”來實現鏈表。在下面的代碼中,SinCycLinkedlist類代表單向循環鏈表,Node類代表鏈表中的一個節點:

#!/usr/bin/env python# -*- coding: utf-8 -*-class Node: def __init__(self, initdata):self.__data = initdataself.__next = None def getData(self):return self.__data def getNext(self):return self.__next def setData(self, newdata):self.__data = newdata def setNext(self, newnext):self.__next = newnextclass SinCycLinkedlist: def __init__(self):self.head = Node(None)self.head.setNext(self.head) def add(self, item):temp = Node(item)temp.setNext(self.head.getNext())self.head.setNext(temp) def remove(self, item):prev = self.headwhile prev.getNext() != self.head:cur = prev.getNext()if cur.getData() == item:prev.setNext(cur.getNext())prev = prev.getNext() def search(self, item):cur = self.head.getNext()while cur != self.head:if cur.getData() == item:return Truecur = cur.getNext()return False def empty(self):return self.head.getNext() == self.head def size(self):count = 0cur = self.head.getNext()while cur != self.head:count += 1cur = cur.getNext()return countif __name__ == '__main__': s = SinCycLinkedlist() print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size())) s.add(19) s.add(86) print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size())) print('86 is%s in s' % ('' if s.search(86) else ' not',)) print('4 is%s in s' % ('' if s.search(4) else ' not',)) print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size())) s.remove(19) print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

運行結果:

$ python sincyclinkedlist.pys.empty() == True, s.size() == 0s.empty() == False, s.size() == 286 is in s4 is not in ss.empty() == False, s.size() == 2s.empty() == False, s.size() == 1

希望本文所述對大家的Python程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汾西县| 定安县| 南华县| 伽师县| 盈江县| 乐至县| 天门市| 日喀则市| 安徽省| 闸北区| 磐安县| 庆元县| 墨玉县| 景洪市| 建昌县| 黔西| 罗定市| 尚志市| 锡林郭勒盟| 历史| 仁化县| 漳平市| 小金县| 水城县| 遵化市| 淮安市| 阳西县| 蓝山县| 屯昌县| 平和县| 宝应县| 府谷县| 越西县| 清水河县| 南漳县| 合肥市| 洪泽县| 阿鲁科尔沁旗| 贵阳市| 铅山县| 淄博市|