python使用list实现栈

2022-09-07 11:31:46 浏览数 (1)

代码语言:javascript复制
# -*- coding: utf-8 -*-
"""
@author: sato
@file: stack.py
@time: 2019-08-22 00:06

"""


class Stack(object):

    def __init__(self):
        self.items = []

    def is_empty(self):
        return len(self.items) == 0

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        raise IndexError('Stack is empty!')

    def len(self):
        return len(self.items)

    def peek(self):
        return self.items[len(self.items) - 1]


# s = Stack()
# print(s.is_empty())
# print(s.pop())


def reverse_str(mystr):
    # 反转字符串
    output = ''
    s = Stack()
    for m in mystr:
        s.push(m)
    while not s.is_empty():
        output  = s.pop()
    # print(output)


def is_balanced(symbolstring):
    # 利用栈, 判断括号的平衡性
    s = Stack()
    balanced = True
    for i in symbolstring:
        # print(i)
        if i not in ')]}([{':
            continue
        if balanced:
            if i in '([{':
                s.push(i)
            else:
                if s.is_empty():
                    return False
                else:
                    # print(s.pop(), i)
                    if ')]}'.index(i) != '([{'.index(s.pop()):
                        return False
        else:
            return balanced
    return s.is_empty() and balanced


def Dec2Bin(decNumber):
    # 利用栈十进制转换为二进制
    s = Stack()

    while decNumber > 0:
        temp = decNumber % 2
        s.push(temp)
        decNumber = decNumber // 2
    binString = ''
    while not s.is_empty():
        binString  = str(s.pop())
    print(binString)

# Dec2Bin(9)


# 利用栈实现多进制转换 十进制转换为多进制
def any_converter(decNumber, base):
    digits = '0123456789ABCDEF'

    s = Stack()

    while decNumber > 0:
        temp = decNumber % base
        s.push(temp)
        decNumber = decNumber // base

    new_string = ''
    while not s.is_empty():
        new_string  = digits[s.pop()]
    print(new_string)

any_converter(15, 16)

0 人点赞