• python 数据结构 list和链表实现栈的三种方法


    list实现, 头插带头结点的单链表实现链栈,两个队列实现栈

    MAX_SIZE = 100
    class MyStack1(object):
        """模拟栈"""
    
        def __init__(self):
            self.items = []
            self.size = 0
    
        def is_empty(self):
            """判断是否为空"""
            return self.size == 0
    
        def size(self):
            """返回栈的大小"""
            return self.size
    
        def push(self, item):
            """压栈(加入元素)"""
            self.items.append(item)
            self.size += 1
    
        def pop(self):
            """弹栈(弹出元素)"""
            if self.size < MAX_SIZE and self.size >= 0:
                self.size -= 1
                return self.items.pop()
            else:
                print("栈已经为空")
                return None
    
        def peek(self):
            if not self.is_empty():
                return self.items[self.size-1]
            else:
                return None
        
        def __str__(self):
            return str(self.items)
    
    
    class MyStack2(object):
        """模拟栈"""
        def __init__(self):
            self.items = []
            self.size = 0
    
        def is_empty(self):
            """判断是否为空"""
            return self.size == 0
    
        def size(self):
            """返回栈的大小"""
            if self.size <= MAX_SIZE:
                return self.size
    
        def push(self, item):
            """压栈(加入元素)"""
            if self.size <= MAX_SIZE:
                self.items.insert(0, item)
                self.size += 1
    
    
        def pop(self):
            """弹栈(弹出元素)"""
            if self.size > 0 and self.size <= MAX_SIZE:
                self.size -= 1
                return self.items.pop(0)
            else:
                print("栈已经为空")
                return None
    
        def peek(self):
            """返回栈顶元素"""
            if not self.is_empty():
                return self.items[0]
            else:
                return None
        
        def __str__(self):
            return str(self.items)
    
    
    class Node():
        def __init__(self, data, next=None):
            self.data = data
            self.next = next
    
        def __repr__(self):
            return str(self.data)
    
    
    class NodeStack():
        def __init__(self):
            self.node = Node(None)
            self.head = self.node
            self.size = 0
    
        def is_empty(self):
            return self.size == 0
    
        def get_size(self):
            return self.size
    
        def push(self, data):
            node = Node(data)
            node.next = self.head.next
            self.head.next = node
            self.size += 1
    
        def pop(self):
            if not self.is_empty():
                current = self.head.next
                if self.get_size() == 1:
                    self.head.next = None
                else:
                    self.head.next = self.head.next.next
                self.size -= 1
                return current.data
            else:
                raise IndexError('pop from a empty stack')
    
        def peek(self):
            if not self.is_empty():
                return self.head.next.data
            else:
                raise IndexError('stack is empty')
    
        def __repr__(self):
            stack_list = []
            current = self.head
            while current.next is not None:
                stack_list.append(current.next.data)
                current = current.next
            return str(stack_list)
    
        __str__ = __repr__
    
    
    
    
    def test(obj):
        i = obj()
        for x in range(0,6):
            i.push(x)
            print(i)
        i.pop()
        print(i, i.peek(), i.size)
    
    if __name__ == "__main__":
        test(MyStack1)
        test(MyStack2)
        test(NodeStack)

    运行结果:

  • 相关阅读:
    解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
    Loadrunner参数化连接oracle、mysql数据源报错及解决办法
    JavaScript-Runoob-JS 浏览器BOM :JavaScript Window Screen
    JavaScript-Runoob-JS 浏览器BOM :JavaScript Window
    JavaScript-Runoob-JS 高级教程 :JavaScript RegExp 对象
    JavaScript-Runoob-JS 高级教程 :JavaScript Math
    JavaScript-Runoob-JS 高级教程 :JavaScript Boolean
    JavaScript-Runoob-JS 高级教程 :JavaScript Array
    JavaScript-Runoob-JS 高级教程 :JavaScript Date
    JavaScript-Runoob-JS 高级教程 :JavaScript Number 对象
  • 原文地址:https://www.cnblogs.com/liuchaodada/p/13209841.html
Copyright © 2020-2023  润新知