Python 数据结构 之 栈 的顺序、链式存储结构

来源:互联网 发布:苹果电脑降价规律知乎 编辑:程序博客网 时间:2024/06/05 10:23

Python 数据结构 之 栈 的顺序、链式存储结构

Python 仿照C 语言实现 栈的链式、顺序存储结构

文章转载请注明: Python 数据结构 之 栈 的顺序、链式存储结构


代码地址:

https://github.com/WenkeZhou/PythonDataStructure/tree/master/struct/Stack


栈的顺序存储结构:

# !/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'MrHero'class SqStack(object):    """    栈的线性结构    """    def __init__(self, size):        self.data = list(None for _ in range(size))        self.max_size = size        self.top = -1    def get_length(self):        # 返回栈的长度        return self.top + 1    def push(self, elem):        # 进栈        if self.top + 1 == self.max_size:            raise IndexError("Stack is full")        else:            self.top += 1            self.data[self.top] = elem    def pop(self):        # 出栈        if self.top == -1:            raise IndexError("Stack is empty")        else:            self.top -= 1            return self.data[self.top + 1]    def get_top(self):        # 取栈顶元素        if self.top == -1:            raise IndexError("Stack is empty")        else:            return self.data[self.top]    def show_stack(self):        # 从栈顶向下开始显示栈里面的元素        j = self.top        while j >= 0:            print self.data[j]            j -= 1    def is_empty_stack(self):        return self.top == -1if __name__ == '__main__':    sqs = SqStack(5)    sqs.push(1)    sqs.push(2)    sqs.push(3)    sqs.show_stack()

栈的链式存储结构

# !/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'MrHero'class Node(object):    # 节点    def __init__(self, data=None):        self.data = data        self.next = Noneclass LKStack(object):    def __init__(self):        self.top = Node(None)        self.count = 0    def get_length(self):        return self.count    def get_top(self):        # 返回栈顶元素        return self.top.data    def is_empty(self):        return self.count == 0    def push(self, elem):        # 进栈        tmp = Node(elem)        if self.is_empty():            self.top = tmp        else:            tmp.next = self.top            self.top = tmp        self.count += 1    def pop(self):        # 出栈        if self.is_empty():            raise IndexError("Stack is empty!")        else:            self.count -= 1            elem = self.top.data            self.top = self.top.next            return elem    def show_stack(self):        # 从栈顶开始显示各节点值        if self.is_empty():            raise IndexError("Stack is empty!")        else:            j = self.count            tmp = self.top            while j > 0 and tmp:                print tmp.data                tmp = tmp.next                j -= 1if __name__ == '__main__':    lks = LKStack()    for i in range(1, 5):        lks.push(i)    lks.show_stack()    lks.pop()    lks.show_stack()



文章转载请注明: Python 数据结构 之 栈 的顺序、链式存储结构

0 0
原创粉丝点击