Пример #1
0
def parchecker(symbol_string):
    s = Stack()
    for symbol in symbol_string:
        if symbol == '(':
            s.push(symbol)
        elif symbol == ')':
            if s.isEmpty():
                return False
            else:
                s.pop()

    return s.isEmpty()
Пример #2
0
def postfixEval(expr):
    operandstack = Stack()
    token_list = expr.split()
    for token in token_list:
        if token.isnumeric():
            operandstack.push(int(token))
        else:
            op2 = operandstack.pop()
            op1 = operandstack.pop()
            result = do_math(token, op1, op2)
            operandstack.push(result)
    return operandstack.pop()
Пример #3
0
def par_checker_v1(symbol_string):
    s = Stack()
    balance = True
    for symbol in symbol_string:
        if symbol == '(':
            s.push(symbol)
        else:
            if s.is_empty():
                balance = False
                break
            s.pop()

    return balance and s.is_empty()
Пример #4
0
def symbol_balance_checker(symbol_string):
    s = Stack()
    for symbol in symbol_string:
        if symbol in "{[(":
            s.push(symbol)
        elif symbol in "}])":
            if s.isEmpty():
                return False
            if "{[(".index(s.pop()) != "}])".index(symbol):
                return False

    return s.isEmpty()
Пример #5
0
def postfix_eval(postfixexpr):
    operate = {
        '+': operator.add,
        '-': operator.sub,
        '*': operator.mul,
        '/': operator.truediv
    }
    operand_stack = Stack()
    for token in postfixexpr:
        if token in '+-*/':
            b = int(operand_stack.pop())
            a = int(operand_stack.pop())
            operand_stack.push(operate[token](a, b))
        else:
            operand_stack.push(token)

    return operand_stack.pop()
Пример #6
0
def toStr(n, base):
    convertString = "0123456789ABCDEF"
    remstack = Stack()
    while n > 0:
        remstack.push(convertString[n % base])
        n = n // base
    restr = ""
    while not remstack.isEmpty():
        restr += remstack.pop()
    return restr
Пример #7
0
def divideBy2(decNumber):
    remstack = Stack()
    while decNumber > 0:
        rem = decNumber % 2
        remstack.push(rem)
        decNumber = decNumber // 2

    binString = ""
    while not remstack.isEmpty():
        binString += str(remstack.pop())

    return binString
Пример #8
0
def par_checker_v2(symbol_string):
    s = Stack()
    balance = True
    for symbol in symbol_string:
        if symbol in '([{':
            s.push(symbol)
        else:
            if s.is_empty():
                balance = False
                break
            top = s.pop()
            if not match(top, symbol):
                balance = False
                break

    return balance and s.is_empty()
Пример #9
0
def baseConverter(decNumber, base):
    remstack = Stack()
    digits = "0123456789ABCDEF"
    while decNumber > 0:
        rem = decNumber % base
        remstack.push(rem)
        decNumber = decNumber // base

    newString = ""
    while not remstack.isEmpty():
        newString += digits[remstack.pop()]

    return newString
Пример #10
0
def divide_by2(dec_number, base):
    digits = '0123456789ABCDEF'

    stack = Stack()
    while dec_number != 0:
        rem = dec_number % base
        dec_number //= base
        stack.push(digits[rem])

    bin_string = ''
    while not stack.is_empty():
        bin_string += str(stack.pop())

    return bin_string
Пример #11
0
def infix_to_postfix(infixexpr):
    prec = {'*': 3, '/': 3, '+': 2, '-': 2, '(': 1}

    postfixexpr = ''
    op_stack = Stack()

    for token in infixexpr:
        if token in 'ABCDEFGHIJKLMNOPQRSTUWXYZ' or token in '0123456789':
            postfixexpr += token
        elif token == '(':
            op_stack.push(token)
        elif token == ')':
            while not op_stack.is_empty():
                op = op_stack.pop()
                if op == '(':
                    break
                postfixexpr += op
        else:
            while not op_stack.is_empty():
                op = op_stack.peek()
                if prec[op] >= prec[token]:
                    postfixexpr += op_stack.pop()
                else:
                    break
            op_stack.push(token)

    while not op_stack.is_empty():
        postfixexpr += op_stack.pop()

    return postfixexpr
Пример #12
0
def infix2postfix(infixexpr):
    prec = {}
    prec['('] = 0
    prec['+'] = prec['-'] = 1
    prec['*'] = prec['/'] = 2
    opstack = Stack()
    postfix_list = []
    for token in infixexpr:
        if token.isalnum():
            postfix_list.append(token)
        elif token == '(':
            opstack.push('(')
        elif token == ')':
            topToken = opstack.pop()
            while topToken != '(':
                postfix_list.append(topToken)
                topToken = opstack.pop()
        else:  # is operator
            while (not opstack.isEmpty()) and \
                    (prec[token] <= prec[opstack.peek()]):
                postfix_list.append(opstack.pop())
            opstack.push(token)

    while not opstack.isEmpty():
        postfix_list.append(opstack.pop())
    return " ".join(postfix_list)
Пример #13
0
import sys
sys.path.append("..")
from pythonds.stack import Stack

s = Stack()

print(s.isEmpty())
s.push(4)
s.push('dog')
print(s.peek())
s.push(True)
print(s.size())
print(s.isEmpty())
s.push(8.4)
print(s.pop())
print(s.pop())
print(s.size())