python 堆栈与队列

昨天尝试了python的链表操作,一时意犹未尽,就连续写了几行python堆栈与队列的代码。当然python作为高级语言,一般都要使用到类。在抒写代码之前,首先要对堆栈和队列两种数据结构进行分析,提取出各自类的特征属性(数据和方法)。

class Stack:
      def __init__(self,.top.):
           # top指针
      def push(self,data):
           #data入栈
      def pop(self):
           #data 出栈
           return data
      def isEmpty(self):
           #堆栈判空

以上是堆栈类的简易代码,里面的数据和方法都是堆栈的基本特征和操作。同样依据这一方法,给出如下的Queue类的简易代码:

class Stack:
      def __init__(self,head.tail):
           # head 节点
           # tail 节点
      def enqueue(self,data):
           #data入对
      def dequeue(self):
           #data 出对
           return data
      def isEmpty(self):
           #队列判空
剩下就是类中的方法实现了。当然了需要明白stack先进后出,queue先进先出,不过这是小事,稍微提醒自己以下。MyStack类以及MyQueue类具体实现如下:

class MyStack:
    def __init__(self,top = 0):
        self.top = top
        self.size = 0

    def push(self, data):
        tmp_node = Node(data, None)
        if self.size == 0:
            self.top = tmp_node
            self.size += 1
            return
        tmp_node.p_next = self.top
        self.top = tmp_node
        self.size += 1

    def pop(self):
        if self.isEmpty():
            print "The Stack is already empty!"
            return
        tmp_value = self.top.data
        self.top = self.top.p_next
        self.size -= 1
        return tmp_value

    def isEmpty(self):
        return self.top is None


class MyQueue:
    def __init__(self, head = 0, tail = 0):
        self.head = head
        self.tail = tail
        self.size = 0

    def enqueue(self,data):
        tmp_node = Node(data, None)

        if self.isEmpty():
            self.head = tmp_node
            self.tail = tmp_node
            self.head.p_next = self.tail
            self.tail.p_next = None
            self.size += 1
            return
        
        self.tail.p_next = tmp_node
        self.tail = self.tail.p_next
        self.size += 1

    def dequeue(self):
        if self.isEmpty():
            print "Queue is empty!"
            return

        tmp_data = self.head.data
        self.head = self.head.p_next
        self.size -= 1
        return tmp_data
    
    def isEmpty(self):
        return self.size == 0
需要说一句的是,queue类的实现采用了和stack类一样的模式方法,但是这不是唯一一种,用两个stack来模仿queue也未尝不可,仅需要queue类中实例化2个stack(s1,s2),剩下的所有操作皆可由s1、s2配合完成。代码也非常简单,就不贴出来了....


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值