zoukankan      html  css  js  c++  java
  • 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)

    运行结果:

  • 相关阅读:
    信道、模拟信道、数字信道、基带信号、宽带信号的概念
    数据、信息、信号与码元的概念
    如何少些重复代码?
    编程中阶段性测试的重要性
    Python 字典的初始化,字典参数引用传递等问题
    什么是操作系统内核?有什么意义?
    什么是系统调用?系统调用的执行过程是什么?
    鼠标右键新建 Typora 文件
    如何快速高效的学习一门新技术
    字符串处理
  • 原文地址:https://www.cnblogs.com/liuchaodada/p/13209841.html
Copyright © 2011-2022 走看看