0
点赞
收藏
分享

微信扫一扫

数据结构——栈和队列(Python版)

浮游图灵 2022-02-01 阅读 59

栈结构

Stack是一种线性存储结构,特点:先进后出,只能在栈顶进行插入和删除。

node.py

class Node:
    def __init__(self,value):
        self.value = value
        self.pre = Node  # 指向前一个节点的指针

stack.py

from node import Node


class Stack:
    def __init__(self):
        self.point = None
        self.length = 0

    def push(self,value):
        node = Node(value)
        if self.point!= None:
            node.pre = self.point
            self.point = node
        else:
            self.point = node
        self.length += 1

    def pop(self):
        if self.point!= None:
            node = self.point
            self.point = node.pre
            node.pre = None
            self.length -= 1
            return node.value
        else:
            return None

    def isNone(self):
        if self.length > 0:
            return False
        else:
            return True


栈的应用:十进制转二进制

示例1:

from stack import Stack
import math


def ten_to_tow(n):
    if n > 1:
        stack = Stack()
        temp = n
        while(temp>0):
            mod = temp % 2
            stack.push(mod)
            temp = math.floor(temp/2)
        v = stack.pop()
        while(stack.isNone()==False):
            v = v*10+stack.pop()
        return v
    else:
        return n

print(ten_to_tow(6))

示例2:

from stack import Stack
import  math


def ten_to_two(n):
    stack=Stack()
    while (n>0):
        mod = n % 2
        stack.push(mod)
        n = math.floor(n/2)
    for i in range(stack.length):
        v=stack.pop()
        print(v,end='')

ten_to_two(9)



最小栈

from node import Node

class MinStack:
    def __init__(self):
        self.point = None
        self.length = 0

    def push(self,value):
        node = Node(value)
        if self.point!= None:
           if node.value>self.point.value:
                minV=self.pop()
                self.add(node)
                self.length += 1
               self.add(Node(minV))
        else:
            self.point = node
        self.length += 1

    def add(self,node):
        node.pre = self.point
        self.point = node

    def pop(self):
        if self.point!= None:
            node = self.point
            self.point = node.pre
            node.pre = None
            self.length -= 1
            return node.value
        else:
            return None

    def isNone(self):
        if self.length > 0:
            return False
        else:
            return True

举报

相关推荐

0 条评论