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()
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()
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()
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()
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()
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
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
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()
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
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
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
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)
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())