1 stack
栈是一种抽象数据类型,具有以下操作:
- push(item):将一个项目添加到堆栈顶部; = add(item)
- pop():从堆栈顶部移除项目并返回它; = remove()
- top():查看堆栈顶部的项目,但不删除它。这个操作是可选的,因为它可以通过弹出顶部项目,然后将其推回堆栈来实现。= peek()
缺点:
- 只有顶部元素可以访问;
- 不能访问栈中的随机项;
- 没有循环遍历堆栈(除非弹出所有项);
- 不需要在堆栈中搜索。
stack 是Last-In-First-Out (LIFO) 后进先出
python代码
node类
class Node:
#由datum和next组成的节点—datum:节点存储的数据—next:下一个节点的引用
def __init__(self, datum, next):
self.datum = datum
self.next = next
stack类
class MyStack:
"""
实现后进先出栈作为连接topNode -> node -> node -> … -> NULL
"""
def __init__(self):
#构造空堆栈
self.topNode = None
top方法
class MyStack:
...
def top(self):
#返回存储在堆栈顶部的项,但不删除它。如果堆栈为空,则返回None。
if self.topNode == None:
return None
return self.topNode.datum
push方法
class MyStack:
...
def push(self, item):
#将一个项添加到堆栈的顶部
#创建一个要放在堆栈顶部的新节点
newNode = Node(datum=item, next= None)
if self.topNode == None:
# 堆栈为空
self.topNode = newNode
else:
newNode.next = self.topNode
self.topNode = newNode
#}
pop方法
class MyStack:
...
def pop(self):
#
删除存储在堆栈顶部的项并返回它。如果堆栈为空,则返回None。
#如果堆栈为空
if (self.topNode == None):
return None
#获取存储在顶部节点上的项
item = self.topNode.datum
#重置堆栈的顶部节点
self.topNode = self.topNode.next
return item
2 queue
队列是一种抽象数据类型,具有以下操作:
- enqueue(item):将一个项目添加到队列的后面;
- dequeue():从队列的前面删除项目并返回它;
- front():查看队列最前面的项目,但不删除它。
缺点:
- 只有前面的元素是可访问的;
- 不能访问队列中的随机项目;
- 不能遍历队列(除非将所有项都排出队列);
- 不能搜索队列。
queue 是 first-in-first-out (FIFO) 先进先出:
python代码
node类
class Node:
#由datum和next组成的节点—datum:节点存储的数据—next:下一个节点的引用
def __init__(self, datum, next):
self.datum = datum
self.next = next
queue类
class MyQueue:
#FIFO队列作为链表的实现连接frontNode -> node -> node ->…-> endNode -> NULL
def __init__(self):
#构造空队列
self.frontNode = None
self.endNode = None
front 方法
class MyQueue:
...
def front(self):
#返回存储在队列前端的项,但不删除它。如果队列为空,则返回None。
if self.frontNode == None:
return None
return self.frontNode.datum
enqueue方法
class MyQueue:
...
def enqueue(self, item):
#将项添加到队列的末尾
#创建一个要放在队列末尾的新节点
newNode = Node(datum=item, next= None)
if self.frontNode == None:
#队列为空
self.frontNode = newNode
self.endNode = newNode
else:
self.endNode.next = newNode
self.endNode = newNode
dequeue方法
class MyQueue:
...
def dequeue(self):
#删除存储在队列前端的项并返回它。如果队列为空,则返回None。
# 如果队列为空
if (self.frontNode == None):
return None
#获取存储在前节点上的项
item = self.frontNode.datum
#重置此队列的前节点
self.frontNode = self.frontNode.next
#如果队列变为空
if (self.frontNode == None):
self.endNode = None
return item