(本文是阅读下面的文章后总结的笔记
ps:http://mp.weixin.qq.com/s/6AvoJYP5fqQ3KzFg8NC0VQ Python数据结构实现之链表)
链表
实现过程(简单的功能)
- 做好准备工作:做一个Node类,进行新建节点,得到下一个节点,和修改节点数据和下一个节点的引用
- 简单功能:
(1)初始化
(2)链表添加新的元素 add()
(3)求链表的长度 size()
(4)查找元素 search()
(5)删除元素 remove()
#准备工作,实现Node
class Node(object):
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 unOrderedList():
def __init__(self):
#初始化None表示此时链表的头部不引用任何内容
self.head=None
#检测是否为空链表,只有在链表中没有节点的时候为真
def isEmpty(self):
return self.head==None
#基本操作的实现
#add()在链表前端添加元素
def add(self,item):
#1:创建一个新节点并将新项作为数据
temp=Node(item)
#2:更改新节点的下一个引用,以引用旧链表的第一个节点
temp.setNext(self.head)
#3:重新设置链表的头,以引用新节点
self.head=temp
#size()求链表长度
def size(self):
current=self.head
count=0
while current!=None:
count+=1
current=current.getNext()
return count
#search()查找
def search(self,item):
current=self.head
found=False
while current != None and not found:
if current.getData()==item:
found =True
else:
current =current.getNext()
return found
#remove()删除
def remove(self,item):
current=self.head
previous=None
found=False
#一旦found为True,current就是对包含要删除的项的节点的引用。
while not found:
if current.getData()==item:
found=True
else:
previous= current
current =current.getNext()
if previous ==None:
#当要删除的项目==链表中的第一个项,
#这时候previous还是None,需要修改head一引用current之后的节点
self.head =current.getNext()
else:
#previous的对下一节点的引用设为current的下一节点。
previous.setNext(current.getNext())
简单事例
>>> ================================ RESTART ================================
>>>
>>> #准备工作
>>> tmp=Node(33)
>>> tmp
<__main__.Node object at 0x036AECD0>
>>> tmp.getData()
33
>>> tmp.setData(2)
>>> tmp.getData()
2
>>> m_y=unOrderedList()
>>> #开始实现各种基本功能
>>> m_y.add(22)
>>> m_y.add(32)
>>> m_y.add(12)
>>> m_y.size()
3
>>> m_y.search(122)
False
>>> m_y.search(12)
True
>>> m_y.remove(22)
>>> m_y.search(22)
False