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

python版本單鏈表實(shí)現(xiàn)代碼

 更新時(shí)間:2018年09月28日 08:34:14   作者:冬日新雨  
這篇文章主要為大家詳細(xì)介紹了python版本單鏈表實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天看了一下數(shù)據(jù)結(jié)構(gòu)的書(shū),發(fā)現(xiàn)其實(shí)數(shù)據(jù)結(jié)構(gòu)沒(méi)有幾種,線性表,數(shù)組,字符串,隊(duì)列和棧,等等,其實(shí)是一回事,然后就是樹(shù)結(jié)構(gòu),圖結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)的理論并不難,主要是要自己寫(xiě)一下這些數(shù)據(jù)結(jié)構(gòu)以及對(duì)應(yīng)的基本的操作方法,這樣就能夠更快的提高。

這一篇blog寫(xiě)一下線性表。

線性表:分為順序表和鏈表

一、順序表

順序表就是相對(duì)于表中的數(shù)據(jù),地址也是順序的,所以可以隨機(jī)存取。但是在操作插入和刪除元素的時(shí)候,由于要滿足地址的連續(xù)性,所以要移動(dòng)很多的元素位置,因此,插入或者刪除一個(gè)順序表的元素的時(shí)間復(fù)雜度是o(n)。很多時(shí)候,在對(duì)順序表做合并的時(shí)候,需要先對(duì)表中的元素進(jìn)行排序,然后再進(jìn)行處理,這樣可以避免每次都從頭進(jìn)行查詢。

二、鏈表

鏈表就失去了順序表的隨機(jī)存取特點(diǎn),即每次從中取一個(gè)元素都要從頭開(kāi)始找,這樣耗費(fèi)了一些時(shí)間,時(shí)間復(fù)雜度為o(n);但是在做插入和刪除,以及兩個(gè)鏈表合并的時(shí)候,就方便了很多,只需要做一點(diǎn)指針修改就可以了。

鏈表中的每一個(gè)元素節(jié)點(diǎn)都包含了數(shù)據(jù)部分和下一個(gè)節(jié)點(diǎn)的指針。一般在鏈表的頭部附設(shè)一個(gè)頭結(jié)點(diǎn),而且頭結(jié)點(diǎn)一般不存儲(chǔ)數(shù)據(jù),而是存放一些長(zhǎng)度等附加信息,或者不存儲(chǔ)。

在很多語(yǔ)言中沒(méi)有指針這一概念,而有數(shù)組的概念,比如java和python,java中的數(shù)組還要求定義數(shù)組的類型,也就是說(shuō)必須都是同一類型的數(shù)據(jù),而python則沒(méi)有要求,所以python的list更貼近鏈表的真正含義。這種用數(shù)組描述的鏈表叫做靜態(tài)鏈表。使用靜態(tài)鏈表來(lái)描述鏈表對(duì)此類語(yǔ)言要方便很多了,本身這些語(yǔ)言都提供了內(nèi)置類來(lái)處理鏈表。

除此之外,還有循環(huán)鏈表,雙向鏈表(解決了無(wú)法向前搜索的問(wèn)題,但是在修改指針的時(shí)候需要有更多的操作)。

# -*- coding=utf-8 -*-
# 這個(gè)例子是Python版本的單鏈表

class Node(object):
  def __init__(self, value, next=0):
    self.value = value
    self.next = next # 指針


class LinkedList(object):
  # 鏈表的數(shù)據(jù)結(jié)構(gòu)
  def __init__(self):
    self.head = 0 # 頭部

  def __getitem__(self, key):
    if self.is_empty():
      print 'Linked list is empty.'
      return
    elif key < 0 or key > self.get_length():
      print 'The given key is wrong.'
      return
    else:
      return self.get_elem(key)

  def __setitem__(self, key, value):
    if self.is_empty():
      print 'Linked list is empty.'
      return
    elif key < 0 or key > self.get_length():
      print 'The given key is wrong.'
      return
    else:
      return self.set_elem(key, value)

  def init_list(self, data): # 按列表給出 data
    self.head = Node(data[0])
    p = self.head # 指針指向頭結(jié)點(diǎn)
    print p, self.head
    for i in data[1:]:
      p.next = Node(i) # 確定指針指向下一個(gè)結(jié)點(diǎn)
      p = p.next # 指針滑動(dòng)向下一個(gè)位置
    print self.head.next.next

  def get_length(self):
    length = 0
    p = self.head
    while p != 0: # 0 值就是Node結(jié)點(diǎn)中默認(rèn)的 0 值,表示下一個(gè)結(jié)點(diǎn)沒(méi)有了,即沒(méi)有為其賦值
      length += 1
      p = p.next
    return length

  def is_empty(self):
    if self.head == 0:
      return True
    else:
      return False

  def insert_node(self, index, value):
    if index < 0 or index > self.get_length():
      print 'Can not insert node into the linked list.'
    elif index == 0:
      temp = self.head
      self.head = Node(value, temp)
    else:
      p, post = self.head, self.head
      for i in xrange(index):
        post = p
        p = p.next
      temp = p
      post.next = Node(value, temp)

  def delete_node(self, index):
    if index < 0 or index > self.get_length()-1:
      print "Wrong index number to delete any node."
    elif self.is_empty():
      print "No node can be deleted."
    elif index == 0:
      temp = self.head
      self.head = temp.next
    elif index == self.get_length():
      p = self.head
      for i in xrange(self.get_length()-2):
        p = p.next
      p.next = 0
    else:
      p = self.head
      for i in xrange(index-1):
        p = p.next
      p.next = p.next.next

  def show_linked_list(self): # 打印鏈表中的所有元素
    if self.is_empty():
      print 'This is an empty linked list.'
    else:
      p, container = self.head, []
      for _ in xrange(self.get_length()-1):
        container.append(p.value)
        p = p.next
      container.append(p.value)
      print container

  def clear_linked_list(self): # 將鏈表置空
    self.head = 0

  def get_elem(self, index):
    if self.is_empty():
      print "The linked list is empty. Can not get element."
    elif index < 0 or index > self.get_length()-1:
      print "Wrong index number to get any element."
    else:
      p = self.head
      for _ in xrange(index):
        p = p.next
      return p.value

  def set_elem(self, index, value):
    if self.is_empty():
      print "The linked list is empty. Can not set element."
    elif index < 0 or index > self.get_length()-1:
      print "Wrong index number to set element."
    else:
      p = self.head
      for _ in xrange(index):
        p = p.next
      p.value = value

  def get_index(self, value):
    p = self.head
    for i in xrange(self.get_length()):
      if p.value == value:
        return i
      else:
        p = p.next
    return -1


l = LinkedList()
print "The length of linked list now is: ", l.get_length()
print l.is_empty()
l.init_list([1, 5, 12, "fjd", 45, 999])
print "The length of linked list now is: ", l.get_length()
print l.is_empty()
l.insert_node(4, 100)
l.insert_node(6, "cecil")
l.show_linked_list()
print "The value of index 0 is: ", l.get_elem(0)
l.set_elem(0,1000)
l.show_linked_list()
print "the index of *** is: ", l.get_index(1009)
print "The length of linked list now is: ", l.get_length()
l.delete_node(3)
#l.clear_linked_list()
l.show_linked_list()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問(wèn)題

    完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問(wèn)題

    下面小編就為大家?guī)?lái)一篇完美解決python遍歷刪除字典里值為空的元素報(bào)錯(cuò)問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • python eventlet綠化和patch原理

    python eventlet綠化和patch原理

    這篇文章主要介紹了python eventlet綠化和patch原理,幫助大家更好的理解和學(xué)習(xí)python eventlet工具的使用,感興趣的朋友可以了解下
    2020-11-11
  • Python全棧之學(xué)習(xí)JS(1)

    Python全棧之學(xué)習(xí)JS(1)

    這篇文章主要為大家介紹了Python全棧之JS,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法

    Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法

    這篇文章主要介紹了Python實(shí)現(xiàn)獲取操作系統(tǒng)版本信息方法,本文在命令行中獲取操作系統(tǒng)信息,介紹了platform模塊的使用,需要的朋友可以參考下
    2015-04-04
  • python 從csv讀數(shù)據(jù)到mysql的實(shí)例

    python 從csv讀數(shù)據(jù)到mysql的實(shí)例

    今天小編就為大家分享一篇python 從csv讀數(shù)據(jù)到mysql的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python讀取圖像并顯示灰度圖的實(shí)現(xiàn)

    Python讀取圖像并顯示灰度圖的實(shí)現(xiàn)

    這篇文章主要介紹了Python讀取圖像并顯示灰度圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于Python的圖像閾值化分割(迭代法)

    基于Python的圖像閾值化分割(迭代法)

    這篇文章主要介紹了基于Python的圖像閾值化分割(迭代法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 如何用python復(fù)制粘貼excel指定單元格(可保留格式)

    如何用python復(fù)制粘貼excel指定單元格(可保留格式)

    這篇文章主要給大家介紹了關(guān)于如何用python復(fù)制粘貼excel指定單元格(可保留格式)的相關(guān)資料,利用python操作excel非常方便,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法

    詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法

    這篇文章主要介紹了詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python如何生成隨機(jī)數(shù)及random隨機(jī)數(shù)模塊應(yīng)用

    Python如何生成隨機(jī)數(shù)及random隨機(jī)數(shù)模塊應(yīng)用

    這篇文章主要介紹了Python如何生成隨機(jī)數(shù)及random隨機(jī)數(shù)模塊應(yīng)用,首先我們要知道在python中用于生成隨機(jī)數(shù)的模塊是random,在使用前需要import。由此展開(kāi)內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論

定兴县| 清镇市| 河池市| 茶陵县| 鹤壁市| 蒙阴县| 云和县| 建德市| 宿松县| 大余县| 东安县| 齐齐哈尔市| 麟游县| 六枝特区| 广宗县| 额济纳旗| 巴林右旗| 师宗县| 腾冲县| 南康市| 平谷区| 大兴区| 河北省| 昌邑市| 衢州市| 芷江| 六安市| 香港| 年辖:市辖区| 承德市| 沈丘县| 昭通市| 克什克腾旗| 潮安县| 武川县| 濮阳县| 吉安县| 梓潼县| 革吉县| 东乌| 星子县|