目录标题
栈
数据结构是计算机存储、组织数据的方式
栈:后进先出。进栈和出栈时间复杂度都是O(1)
#创建一个Stack类
Class Stack(object):
def __init__(self,limit=10):
self.stack = [] #存放元素
self.limit = limit #栈容量极限
#进栈push
def push(self,data):
if len(self.stack)>= self.limit
raise IndexError('超出栈容量极限')
self.stack.append(data)
#退栈pop
def pop(self):
if self.stack:
return self.stack.pop()
else:
return IndexError('空栈不能被弹出')
#查看栈最上面的元素peek
def peek(self):
if self.stack:
return self.stack[-1]
#判断是否为空栈is_empty
def is_empty(self):
return not bool(self.stack)
#栈的大小
def size(self):
return len(self.stack)
链表
链表(linked_list)是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。
根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
#创建一个Node的类,作为基础数据结构:链点
class Node:
def __init__(self,data):
self.data = data #对应元素值
self.next = Node #下一个链接的链点
#创建 Linked_List 类
class Linked_List:
def __init__(self,head=None): #链表初始化函数
self.head = head #链表头部
def append(self,new_element): #在链表后添加一个元素
current = self.head
#头部节点存在时
if self.head:
while current.next:
current = current.next
current.next = new_element
#头部节点不存在时
else:
self.head = new_element
def is_empty(self): #判断链表是否为空
return not self.head
def insert(self,position,new_element): #在链表中指定位置插入元素
if position <0 or position >self.get_length():
raise IndexError('insert 插入时,key的值超过了范围')
temp = self.head
if position == 0:
new_element.next = temp
self.head = new_element
return
i =0
while i<position:
pre = temp
temp = temp.next
i+=1
pre.next = nex_element
new_element.next = temp
def remove(self,position): #删除指定索引的链表元素
if position<0 or position >self.get_length()-1:
raise IndexError('删除元素的索引超出范围')
i =