一、基本数据类型
list列表;tuple元组;array数组;set集合,字典(dict),在它们的基础上可以方便快捷的实现常用的数据结构:栈,队列,链表,树等,而没有必要重复造轮子。
二、数据结构
2.1 树(tree)
2.2 栈(stack)
栈是一种运算受限的线性表,其限制是指只仅允许在表的一端进行插入和删除操作,这一端被称为栈顶(Top),相对地,把另一端称为栈底(Bottom)。把新元素放到栈顶元素的上面,使之成为新的栈顶元素称作进栈、入栈或压栈(Push);把栈顶元素删除,使其相邻的元素成为新的栈顶元素称作出栈或退栈(Pop)。这种受限的运算使栈拥有“先进后出”的特性(First In Last Out),简称FILO。
栈分顺序栈和链式栈两种。栈是一种线性结构,所以可以使用数组或链表(单向链表、双向链表或循环链表)作为底层数据结构。使用数组实现的栈叫做顺序栈,使用链表实现的栈叫做链式栈,二者的区别是顺序栈中的元素地址连续,链式栈中的元素地址不连续。
栈的结构如下图所示:
栈的基本操作包括初始化、判断栈是否为空、入栈、出栈以及获取栈顶元素等。
class Stack(object):
def __init__(self):
self.stack = []
def push(self, value): # 进栈
self.stack.append(value)
def pop(self): #出栈
if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
def is_empty(self): # 如果栈为空
return bool(self.stack)
def top(self):
#取出目前stack中最新的元素
return self.stack[-1]
2.3 队列(queue)
队列(queue)是一种具有先进先出特征的线性数据结构,元素的增加只能在一端进行,元素的删除只能在另一端进行。能够增加元素的队列一端称为队尾,可以删除元素的队列一端则称为队首。
class Stack(object):
def __init__(self):
self.queue = []
def push(self, value): # 进列
self.queue.append(value)
def pop(self): #出列
if self.queue:
self.queue.pop(0)
else:
raise LookupError('queue is empty!')
def is_empty(self): # 如果列为空
return bool(self.queue)
def top(self):
#取出目前queue中最新的元素
return self.stack[-1]
双向队列模块deque
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
2.4 堆(heap)
2.5 链表(linked list)
链表是一种物理存储单元上非连续、非顺序的