python数据结构之栈的实现

题目描述

实现栈的数据结构,使其具有以下方法
1、创建空栈
1、添加新元素
3、弹栈
4、返回栈顶元素
5、判断栈是否空栈
6、返回栈的元素个数

方法一:数组实现.

在采用数组模拟栈的时候,栈空间是一段连续的空间。具体思路是:将数组的首元素作为栈底,记录元素的个数,利用这个原理非常容易完成栈的操作

源代码


class Stack(object):
    """栈"""
    def __init__(self):
        self.data = []

    def isEmpty(self):
        """判断是否空栈"""
        return self.data == []

    def peek(self):
        """返回栈顶元素"""
        return self.data[len(self.data) - 1]

    def size(self):
        """返回元素个数"""
        return len(self.data)

    def push(self, data):
        """入栈"""
        self.data.append(data)

    def pop(self):
        """出栈"""
        self.data.pop()

if __name__ == '__main__':
    # 以下为测试用例
    stack = Stack()
    print(stack.size())
    print("将0-10入栈")
    for i in range(11):
        stack.push(i)
    print("此时栈的大小为:", end=" ")
    print(stack.size())
    print("出栈3个")
    for i in range(3):
        stack.pop()
    print("此时栈的大小为:", end=" ")
    print(stack.size())
    # 栈菲空时输出栈顶元素,输出一个弹出一个
    while stack.isEmpty() is not True:
        print(stack.peek(), end=" ")
        stack.pop()

方法二:链表实现

采用带头节点的链表,从头结点插入新节点即可完成栈的创建

源代码


class Node(object):
    """结点"""
    def __init__(self,data):
        self.data = data
        self.next = None

class Stack(object):
    """使用链表来模拟栈"""
    def __init__(self):
        self.data = None
        self.next = None

    def isEmpty(self):
        """判断是否空栈"""
        if self.next is None:
            return True
        else:
            return False

    def size(self):
        """返回栈的大小"""
        cur = self.next
        i = 0   #计数器
        while cur is not None:
            i += 1
            cur = cur.next
        return i
    def push(self, data):
        """入栈"""
        cur = Node(data)
        cur.data = data
        cur.next = self.next
        self.next = cur

    def pop(self):
        """出栈"""
        cur = self.next
        if cur is not None:
            self.next = cur.next
            return cur.data
        print("栈空")

    def peek(self):
        """返回栈顶元素"""
        cur = self.next
        return cur.data

if __name__ == '__main__':
    #以下为测试用例
    stack = Stack()
    print(stack.size())
    print("将0-10入栈")
    for i in range(11):
        stack.push(i)
    print("此时栈的大小为:", end=" ")
    print(stack.size())
    print("出栈3个")
    for i in range(3):
        stack.pop()
    print("此时栈的大小为:", end=" ")
    print(stack.size())
    # 栈菲空时输出栈顶元素,输出一个弹出一个
    while stack.isEmpty() is not True:
        print(stack.peek(), end=" ")
        stack.pop()
posted @ 2019-06-06 20:13  田玉斌  阅读(511)  评论(0编辑  收藏  举报