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

Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表詳解

 更新時間:2015年04月22日 14:50:01   作者:RussellLuo  
這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,詳細(xì)分析了鏈表的概念、定義及Python實(shí)現(xiàn)與使用鏈表的相關(guān)技巧,非常具有實(shí)用價值,需要的朋友可以參考下

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

一、概述

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

二、ADT

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

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

單向循環(huán)鏈表操作的示意圖如下:

三、Python實(shí)現(xiàn)

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Node:
  def __init__(self, initdata):
    self.__data = initdata
    self.__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 = newnext
class 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.head
    while 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 True
      cur = cur.getNext()
    return False
  def empty(self):
    return self.head.getNext() == self.head
  def size(self):
    count = 0
    cur = self.head.getNext()
    while cur != self.head:
      count += 1
      cur = cur.getNext()
    return count
if __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()))

運(yùn)行結(jié)果:

$ python sincyclinkedlist.py
s.empty() == True, s.size() == 0
s.empty() == False, s.size() == 2
86 is in s
4 is not in s
s.empty() == False, s.size() == 2
s.empty() == False, s.size() == 1

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

相關(guān)文章

  • Python的venv虛擬環(huán)境使用及說明

    Python的venv虛擬環(huán)境使用及說明

    這篇文章主要介紹了Python的venv虛擬環(huán)境使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Python?Asyncio?庫之同步原語常用函數(shù)詳解

    Python?Asyncio?庫之同步原語常用函數(shù)詳解

    這篇文章主要為大家介紹了Python?Asyncio?庫之同步原語常用函數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • django model去掉unique_together報錯的解決方案

    django model去掉unique_together報錯的解決方案

    本文給大家分享的是在使用django model去掉unique_together時報錯的解決思路和具體步驟,提供給大家參考下,希望對大家學(xué)習(xí)使用django能夠有所幫助
    2016-10-10
  • pandas?數(shù)據(jù)透視和逆透視的實(shí)現(xiàn)

    pandas?數(shù)據(jù)透視和逆透視的實(shí)現(xiàn)

    本文介紹了pandas?數(shù)據(jù)透視和逆透視的實(shí)現(xiàn),包含pivot()方法透視及pivot_table()方法逆透視,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 利用Python/R語言分別解決金字塔數(shù)求和問題

    利用Python/R語言分別解決金字塔數(shù)求和問題

    這篇文章將通過兩個小問題:前N階乘求和問題、金字塔數(shù)求和問題,帶領(lǐng)大家深入淺出的理解兩種語言的基本語法,并用以實(shí)際場景,需要的可以參考一下
    2022-03-03
  • numpy array找出符合條件的數(shù)并賦值的示例代碼

    numpy array找出符合條件的數(shù)并賦值的示例代碼

    本文主要介紹了numpy array找出符合條件的數(shù)并賦值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • django框架ModelForm組件用法詳解

    django框架ModelForm組件用法詳解

    這篇文章主要介紹了django框架ModelForm組件用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Django框架ModelForm組件相關(guān)功能、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12
  • python使用HTMLTestRunner導(dǎo)出餅圖分析報告的方法

    python使用HTMLTestRunner導(dǎo)出餅圖分析報告的方法

    這篇文章主要介紹了python使用HTMLTestRunner導(dǎo)出餅圖分析報告的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python迭代器自定義類的具體方法

    python迭代器自定義類的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python迭代器自定義類的具體方法,對此有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Python和OpenCV庫實(shí)現(xiàn)識別人物出現(xiàn)并鎖定

    Python和OpenCV庫實(shí)現(xiàn)識別人物出現(xiàn)并鎖定

    本文主要介紹了Python和OpenCV庫實(shí)現(xiàn)識別人物出現(xiàn)并鎖定,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論

南漳县| 灌南县| 襄城县| 肇庆市| 兴业县| 岚皋县| 通城县| 高阳县| 湖州市| 修武县| 大城县| 科技| 乌拉特后旗| 孙吴县| 卢龙县| 屯昌县| 湘乡市| 巴彦县| 江华| 舟山市| 淳化县| 乳山市| 两当县| 新野县| 新民市| 德格县| 临江市| 江油市| 科技| 都兰县| 鹤岗市| 民县| 巩留县| 常山县| 浏阳市| 宜宾市| 盐津县| 文山县| 紫云| 衡山县| 磴口县|