python数据结构包括什么_Python数据结构列表(1)

img_3_1865686152x15555273_26.jpg

数据结构是一门必须在计算机科学中掌握的科学. 以前的许多教科书都使用C语言来实现链接列表. 因为c有指针,所以方便控制内存,并且方便实现链接列表. 其他语言则不是那么方便,它们中的许多使用模拟链接列表,但是这次,我不使用模拟链接列表,因为python是一种动态语言,可以直接将对象分配给新变量.

好的,在我说我使用Python来实现它之前,让我简要地谈谈链接列表. 当存储大量数据时,我们经常使用数组,但是执行插入操作非常麻烦. 看下面的示例,有一堆数据1、2、3、5、6、7在5和5之间插入4. 如果我们使用数组,该怎么办?当然,返回5之后的数据有点,然后插入4,这是很麻烦的,但是如果使用链表,我将在3和5之间直接插入4,这非常方便.

那么链表的结构是什么?顾名思义链表 结构链表 结构,链表当然就像一条链,由节点连接以形成数据链.

链接列表的节点结构如下:

数据

下一个

1492956572996_0.jpg

数据是用户定义的数据,下一个是下一个节点的地址.

链表的结构是头存储第一个节点的地址:

735729-20160919190648121-778551154.png

接下来,我们将使用python实现链表

Python实现链接列表

首先,定义节点类Node:

23112138-42f5c1388ccfb49fa8f9c63ff7e474.png

classNode:'''data: 节点保存的数据

_next: 保存下一个节点对象'''

def __init__(self, data, pnext=None):

self.data=data

self._next=pnextdef __repr__(self):'''用来定义Node的字符输出,

print为输出data'''

return str(self.data)

然后,定义链接列表类:

链接列表应包括:

属性:

列出头: 头

列表长度: 长度

1659542-20200315180000742-224041501.png

方法:

确定是否为空: 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()

2012092516312023.gif

#删除一个节点之后记得要把链表长度减一

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值