Python基本数据结构
一、线性表
线性表是最常用且最简单的一种数据结构,它是n个数据元素的有限序列。
实现线性表的方式一般有两种,一种是使用数组存储线性表的元素,即用一组连续的存储单元依次存储线性表的数据元素。另一种是使用链表存储线性表的元素,即用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的)。
列表list
list的显著特征
- 列表中的每个元素都可变的,意味着可以对每个元素进行修改和删除
- 列表是有序的,每个元素的位置是确定的,可以用索引去访问每个元素
- 列表中的元素可以是Python中的任何对象
可以为任意对象就意味着元素可以是字符串、整数、元组、也可以是list等Python中的对象。
x = [1,2,3]
y = {
'name':'Sakura'}
z="Test"
a=[x,y,z]
a
[[1, 2, 3], {
'name': 'Sakura'}, 'Test']
list中的正反索引
list中的增删查改
利用insert()和分片将元素添加到指定位置 , 利用remove()和关键字del对
元素进行删除需要注意分片[a:b]中的位置不包含位置b,利用[a,a]可以将元素添加至a位置
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:
- 利用正反索引对元素进行查找
- 对元素修改可以直接赋值替换
- 列表中还有其他方法如pop()删除末尾元素,pop(i)删除指定位置i的元素,append()向末尾添加元素。
可以通过list将序列创建为列表
Python中包含6中內建的序列:列表,元组,字符串、Unicode字符串、buffer对象和xrange对象。
链表
链表的结构:链表像锁链一样,由一节节节点连在一起,组成一条数据链。
链表的节点的结构如下:
data next
data为自定义的数据,next为下一个节点的地址。
链表的结构为,head保存首位节点的地址:
单链表
接下来我们来用python实现链表
python实现链表
首先,定义节点类Node:
class Node:
'''
data: 节点保存的数据
_next: 保存下一个节点对象
'''
def __init__(self, data, pnext=None):
self.data = data
self._next = pnext
def __repr__(self):
'''
用来定义Node的字符输出,
print为输出data
'''
return str(self.data)
然后,定义链表类:
链表要包括:
属性:
链表头:head
链表长度:length
方法:
判断是否为空: isEmpty()
def isEmpty(self):
return (self.length == 0
增加一个节点(在链表尾添加): append()
def append(self, dataOrNode):
item = None
if isinstance(dataOrNode, Node):
item = dataOrNode
else:
item = Node(dataOrNode)
if not self.head:
self.head = item
self.length += 1
else:
node = self.head
while node._next:
node = node._next
node._next = item
self.length += 1
删除一个节点: delete()
#删除一个节点之后记得要把链表长度减一
def delete_node(self, index):
if self.isEmpty():
print '[*]This ChainTable is Empty!'
return
if index < 0 or index >= self.length:
print '[*]Error! index out of range!'
return
if index == 0:
self.head = self.head._next
self.length -= 1
return
j = 0
node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j += 1
if j == index:
prev._next = node._next
self.length -= 1
print 'Success delete a node'
修改一个节点: update()
def update(self, index, data):
if self.isEmpty():
print '[*]This ChainTable is Empty!'
return
if index < 0 or index >= self.length:
print '[*]Error! index out of range!'
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
if j == index:
node.data = data
print 'Success update a node'
查找一个节点: getItem()
def getitem(self, index):
if self.isEmpty():
print '[*]This ChainTable is Empty!'
return
if index < 0 or index >= self.length:
print '[*]Error! index out of range!'
return
j = 0
node = self.head
while node._next and j < index:
node = node._next
j += 1
if j == index:
return node.data
#print 'Success get a node value'
查找一个节点的索引: getIndex()
def getindex(self, data):
if self.isEmpty():
print '[*]This ChainTable is Empty!'
return
j = 0
node = self.head
while node:
if node.data == data:
return j