赞
踩
栈是一种只能在同一端进行插入或删除操作的线性表。
表中允许进行插入、删除操作的一端称为栈顶。栈顶的当前位置是动态的,可以用一个称为栈顶指针的位置指示器来指示。
表的另一端称为栈底。
当栈中没有数据元素时称为空栈。
栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。
特点:“后进先出”或“先进后出”
顺序栈
# 进栈
def push(self,e):
self.data.append(e)
# 出栈
def pop(self):
assert not self.empty() # 检测栈不为空,出栈
return self.data.pop()
链栈
# 进栈
def push(self, e):
p = LinkNode(e)
p.next = self.head.next
self.head.next = p
# 出栈
def pop(self):
assert self.head.next != None
p = self.head.next
self.head.next = p.next
return p.data
队列(简称为队)是一种操作受限的线性表,其限制为仅允许在表的一端进行插入,而在表的另一端进行删除。
进行插入的一端称为队尾。
进行删除的一端称为队头或队首。
队列:先进先出表
默认队列一头只进,另一头只出,一个元素要入队,只能从队尾进。
循环队列
# 元素进队
# 在队列不满的情况下,先将队尾指针rear循环+1,然后将元素e放到该位置处,否则抛出异常
def push(self, e):
# 检测队满
assert (self.rear+1)%MaxSize != self.front
self.rear = (self.rear+1)%MaxSize
self.data[self.rear] = e
# 出队元素
def pop(self):
assert not self.empty()
self.front = (self.front+1)%MaxSize
return self.data[self.front]
队列的链式存储
# 元素e进队 def push(self, e): s = LinkNode(e) # 新建结点s if self.empty(): self.front = self.rear = s else: self.rear.next = s self.rear = s # 出队操作 def pop(self): assert not self.empty() if self.front == self.rear: # 原链队只有一个结点 e = self.front.data # 取首结点的值 self.front = self.rear = None # 置为空队 else: # 若原链队有多个结点 e = self.front.data self.front = self.front.next # front指向下一个结点 return e
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。