【Python3_进阶系列_007】Python3-Stack实现

一、Stack

栈是一种常见的数据结构,具有先进后出的特性。一些面试题会要求一个Stack类,并且实现常见的方法:push,pop,peek,find,empty,full,length等

下面是通过list模拟实现栈。

### 使用list实现栈的数据接口,先进后出#####
### Stack的几大方法:push,pop,peek,find,empty,full,length,reverse,__str__
import copy
class Stack():

    def __init__(self,len): ##初始化函数,参数是指定stack的长度,用list data[]存储数据
        self.len = len
        self.data = []

    def push(self,var):   ## 1.入栈操作:判断当前栈的长度是否满,不满则直接append到data中;满了提示错误。
        if len(self.data)<self.len:
            self.data.append(var)
            print("Pushed in")
            return True
        else:
            print("Stack Full,Data not pushed in")
            return False

    def pop(self):  ##2:出站操作:直接调用list的pop()方法
        return self.data.pop()

    def peek(self): ##3.返回栈顶元素:直接返回列表的最后一个元素
        return self.data[-1]

    def empty(self): ##4.判空:直接判断data是否为空
        return bool(self.data)

    def full(self): ##5.判满:直接对比实际长度与定义的栈长度是否一致
        return len(self.data)==self.len

    def find(self,var): ##6.查找元素的index:直接调用index方法,返回索引。
         try:
             return self.data.index(var)
         except ValueError:
             return -1
    def length(self): ## 7.长度:直接len函数返回
        return len(self.data)

    def reverse(self): ## 8.栈反转:通过copy一个新的栈,然后依次入栈并返回
        data = copy.copy(self.data)
        data.reverse()
        stack = Stack(len(data))
        for i in data:
            stack.push(i)
        return stack

    def __str__(self): ##9.定义__str__方法,print函数
        return str(self.data)

if __name__ == '__main__':
    stack = Stack(5)
    # print(stack.empty())
    stack.push(1)
    stack.push(2)
    stack.push(1)
    stack.push(3)
    stack.push(4)
    stack.push(5)
    print(stack)
    print(stack.reverse())
    print(stack)
    # print(stack.full())
    # print(stack.peek())
    # print(stack.find(1))
    # print(stack.pop())
    # print(stack.pop())
    # print(stack.peek())

 

posted @ 2018-08-02 13:58  爱寂寞撒的谎言  阅读(718)  评论(0)    收藏  举报