栈的Python实现

栈可以用顺序表方式实现,也可以用链表方式实现。我大Python的内建数据结构太强大,可以用list直接实现栈,简单快捷。人生苦短,我用Python。代码如下:

 

class Stack(object):
    # 初始化栈为空列表
    def __init__(self):
        self.items = []
 
    # 判断栈是否为空,返回布尔值
    def is_empty(self):
        return self.items == []
 
    # 返回栈顶元素
    def peek(self):
        return self.items[len(self.items) - 1]
 
    # 返回栈的大小
    def size(self):
        return len(self.items)
 
    # 压栈,入栈,进栈
    def push(self, item):
        self.items.append(item)
 
    # 出栈
    def pop(self):
        return self.items.pop()

 

 

 

两个栈实现队列:

class QueueWithTwoStacks(object):
    def __init__(self):
        self._stack1 = []
        self._stack2 = []

    def appendTail(self,x):
        self._stack1.append(x)

    def deleteHead(self):
         if self._stack2:
             return self._stack2.pop()
         else:
             if self._stack1:
                while self._stack1:
                    self._stack2.append(self._stack1.pop())
                return self._stack2.pop()
             else:
                 return None

两个队列实现栈:

class StackWithTwoQueues(object):
    def __init__(self):
        self._stack1 = []
        self._stack2 = []

    def push(self,x):
        if len(self._stack1) == 0:
            self._stack1.append(x)
        elif len(self._stack2) == 0:
            self._stack2.append(x)
        if len(self._stack2) == 1 and len(self._stack1) >= 1:
            while self._stack1:
                self._stack2.append(self._stack1.pop(0))
        elif len(self._stack1) == 1 and len(self._stack2) > 1:
            while self._stack2:
                self._stack1.append(self._stack2.pop(0))

    def pop(self):
        if self._stack1:
            return self._stack1.pop(0)
        elif self._stack2:
            return self._stack2.pop(0)
        else:
            return None