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

首頁 > 編程 > Python > 正文

淺談Python單向鏈表的實現

2020-01-04 17:53:43
字體:
來源:轉載
供稿:網友
本文給大家簡單介紹了下鏈表的知識,然后用Python模擬一下單鏈表,比較簡單,初學者可以參考參考,大神可以給我點改進意見
 

鏈表由一系列不必在內存中相連的結構構成,這些對象按線性順序排序。每個結構含有表元素和指向后繼元素的指針。最后一個單元的指針指向NULL。為了方便鏈表的刪除與插入操作,可以為鏈表添加一個表頭。

淺談Python單向鏈表的實現

刪除操作可以通過修改一個指針來實現。

淺談Python單向鏈表的實現

插入操作需要執行兩次指針調整。

淺談Python單向鏈表的實現

1. 單向鏈表的實現

1.1 Node實現

    每個Node分為兩部分。一部分含有鏈表的元素,可以稱為數據域;另一部分為一指針,指向下一個Node。

class Node():  __slots__=['_item','_next']  #限定Node實例的屬性  def __init__(self,item):    self._item=item    self._next=None   #Node的指針部分默認指向None  def getItem(self):    return self._item  def getNext(self):    return self._next  def setItem(self,newitem):    self._item=newitem  def setNext(self,newnext):    self._next=newnext

1.2 SinglelinkedList的實現

class SingleLinkedList():   def __init__(self):    self._head=None  #初始化鏈表為空表    self._size=0

1.3 檢測鏈表是否為空

def isEmpty(self):  return self._head==None 

1.4 add在鏈表前端添加元素

def add(self,item):  temp=Node(item)  temp.setNext(self._head)  self._head=temp

1.5 append在鏈表尾部添加元素

def append(self,item):  temp=Node(item)  if self.isEmpty():    self._head=temp  #若為空表,將添加的元素設為第一個元素  else:    current=self._head    while current.getNext()!=None:      current=current.getNext()  #遍歷鏈表    current.setNext(temp)  #此時current為鏈表最后的元素  

1.6 search檢索元素是否在鏈表中

def search(self,item):  current=self._head  founditem=False  while current!=None and not founditem:    if current.getItem()==item:      founditem=True    else:      current=current.getNext()  return founditem

1.7 index索引元素在鏈表中的位置

def index(self,item):  current=self._head  count=0  found=None  while current!=None and not found:    count+=1    if current.getItem()==item:      found=True    else:      current=current.getNext()  if found:    return count  else:    raise ValueError,'%s is not in linkedlist'%item

1.8 remove刪除鏈表中的某項元素

def remove(self,item):  current=self._head  pre=None  while current!=None:    if current.getItem()==item:      if not pre:        self._head=current.getNext()      else:        pre.setNext(current.getNext())      break    else:      pre=current      current=current.getNext()

1.9 insert鏈表中插入元素

def insert(self,pos,item):  if pos<=1:    self.add(item)  elif pos>self.size():    self.append(item)  else:    temp=Node(item)    count=1    pre=None    current=self._head    while count<pos:      count+=1      pre=current      current=current.getNext()    pre.setNext(temp)    temp.setNext(current)

全部代碼

class Node():  __slots__=['_item','_next']  def __init__(self,item):    self._item=item    self._next=None  def getItem(self):    return self._item  def getNext(self):    return self._next  def setItem(self,newitem):    self._item=newitem  def setNext(self,newnext):    self._next=newnext     class SingleLinkedList():   def __init__(self):    self._head=None #初始化為空鏈表  def isEmpty(self):    return self._head==None  def size(self):    current=self._head    count=0    while current!=None:      count+=1      current=current.getNext()    return count  def travel(self):    current=self._head    while current!=None:      print current.getItem()      current=current.getNext()  def add(self,item):    temp=Node(item)    temp.setNext(self._head)    self._head=temp   def append(self,item):    temp=Node(item)    if self.isEmpty():      self._head=temp  #若為空表,將添加的元素設為第一個元素    else:      current=self._head      while current.getNext()!=None:        current=current.getNext()  #遍歷鏈表      current.setNext(temp)  #此時current為鏈表最后的元素  def search(self,item):    current=self._head    founditem=False    while current!=None and not founditem:      if current.getItem()==item:        founditem=True      else:        current=current.getNext()    return founditem  def index(self,item):    current=self._head    count=0    found=None    while current!=None and not found:      count+=1      if current.getItem()==item:        found=True      else:        current=current.getNext()    if found:      return count    else:      raise ValueError,'%s is not in linkedlist'%item         def remove(self,item):    current=self._head    pre=None    while current!=None:      if current.getItem()==item:        if not pre:          self._head=current.getNext()        else:          pre.setNext(current.getNext())        break      else:        pre=current        current=current.getNext()             def insert(self,pos,item):    if pos<=1:      self.add(item)    elif pos>self.size():      self.append(item)    else:      temp=Node(item)      count=1      pre=None      current=self._head      while count<pos:        count+=1        pre=current        current=current.getNext()      pre.setNext(temp)      temp.setNext(current) if __name__=='__main__':  a=SingleLinkedList()  for i in range(1,10):    a.append(i)  print a.size()  a.travel()  print a.search(6)  print a.index(5)  a.remove(4)  a.travel()  a.insert(4,100)  a.travel()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆尧县| 新密市| 奇台县| 奎屯市| 绩溪县| 奉化市| 比如县| 岳阳市| 三台县| 光泽县| 陆丰市| 泸定县| 新闻| 二连浩特市| 保靖县| 惠来县| 绥棱县| 唐海县| 阿克苏市| 景宁| 剑阁县| 扬州市| 镶黄旗| 宣武区| 金沙县| 青铜峡市| 宁阳县| 新巴尔虎右旗| 丰原市| 确山县| 赤峰市| 铁岭市| 河西区| 武威市| 崇信县| 津市市| 日土县| 福安市| 万宁市| 房产| 桐城市|