数据结构是一门必须在计算机科学中掌握的科学. 以前的许多教科书都使用C语言来实现链接列表. 因为c有指针,所以方便控制内存,并且方便实现链接列表. 其他语言则不是那么方便,它们中的许多使用模拟链接列表,但是这次,我不使用模拟链接列表,因为python是一种动态语言,可以直接将对象分配给新变量.
好的,在我说我使用Python来实现它之前,让我简要地谈谈链接列表. 当存储大量数据时,我们经常使用数组,但是执行插入操作非常麻烦. 看下面的示例,有一堆数据1、2、3、5、6、7在5和5之间插入4. 如果我们使用数组,该怎么办?当然,返回5之后的数据有点,然后插入4,这是很麻烦的,但是如果使用链表,我将在3和5之间直接插入4,这非常方便.
那么链表的结构是什么?顾名思义链表 结构链表 结构,链表当然就像一条链,由节点连接以形成数据链.
链接列表的节点结构如下:
数据
下一个
数据是用户定义的数据,下一个是下一个节点的地址.
链表的结构是头存储第一个节点的地址:
接下来,我们将使用python实现链表
Python实现链接列表
首先,定义节点类Node:
classNode:'''data: 节点保存的数据
_next: 保存下一个节点对象'''
def __init__(self, data, pnext=None):
self.data=data
self._next=pnextdef __repr__(self):'''用来定义Node的字符输出,
print为输出data'''
return str(self.data)
然后,定义链接列表类:
链接列表应包括:
属性:
列出头: 头
列表长度: 长度
方法:
确定是否为空: isEmpty()
defisEmpty(self):return (self.length == 0
添加节点(在链表的末尾添加): append()
defappend(self, dataOrNode):
item=Noneifisinstance(dataOrNode, Node):
item=dataOrNodeelse:
item=Node(dataOrNode)if notself.head:
self.head=item
self.length+= 1
else:
node=self.headwhilenode._next:
node=node._next
node._next=item
self.length+= 1
删除节点: delete()
#删除一个节点之后记得要把链表长度减一
defdelete(self, index):ifself.isEmpty():print "this chain table is empty."
return
if index < 0 or index >=self.length:print 'error: out of index'
return
#要注意删除第一个节点的情况
#如果有空的头节点就不用这样
#但是我不喜欢弄头节点
if index ==0:
self.head=self.head._next
self.length-= 1
return
#prev为保存前导节点
#node为保存当前节点
#当j与index相等时就
#相当于找到要删除的节点
j =0
node=self.head
prev=self.headwhile node._next and j
prev=node
node=node._next
j+= 1
if j ==index:
prev._next=node._next
self.length-= 1
修改节点: update()
defupdate(self, index, data):if self.isEmpty() or index < 0 or index >=self.length:print 'error: out of index'
returnj=0
node=self.headwhile node._next and j
node=node._next
j+= 1
if j ==index:
node.data= data
查找节点: getItem()
defgetItem(self, index):if self.isEmpty() or index < 0 or index >=self.length:print "error: out of index"
returnj=0
node=self.headwhile node._next and j
node=node._next
j+= 1
return node.data
查找节点的索引: getIndex()
defgetIndex(self, data):
j=0ifself.isEmpty():print "this chain table is empty"
returnnode=self.headwhilenode:if node.data ==data:returnj
node=node._next
j+= 1
if j ==self.length:print "%s not found" %str(data)return
插入节点: insert()
definsert(self, index, dataOrNode):ifself.isEmpty():print "this chain tabale is empty"
return
if index < 0 or index >=self.length:print "error: out of index"
returnitem=Noneifisinstance(dataOrNode, Node):
item=dataOrNodeelse:
item=Node(dataOrNode)if index ==0:
item._next=self.head
self.head=item
self.length+= 1
returnj=0
node=self.head
prev=self.headwhile node._next and j
prev=node
node=node._next
j+= 1
if j ==index:
item._next=node
prev._next=item
self.length+= 1
清除链接列表: clear()
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-271209-1.html