Stack and Queue

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

猜你喜欢

转载自blog.csdn.net/helongss/article/details/129923638
今日推荐