Пример #1
0
def infix_2_postfix(infix_expr):
    postfix = ""  # empty string where operands operators and popped items from stack will go
    operator_stack = Stack()  # Empty stack to push items

    for symbol in infix_expr:
        if symbol == " " or symbol == '\t':  # Ignore white spaces
            continue

        if symbol == '(':
            operator_stack.push(symbol)
        elif symbol == ')':
            top_symbol_stack = operator_stack.pop()
            while top_symbol_stack != '(':
                postfix += top_symbol_stack
                top_symbol_stack = operator_stack.pop()
        elif symbol in '+-*/%^':
            while not operator_stack.is_empty() and precedence(
                    operator_stack.peek()) >= precedence(symbol):
                # If the precedence in the stack is >= scanned symbol pop from stack and add to postfix list
                postfix += operator_stack.pop()
            operator_stack.push(
                symbol)  # When finished push the scanned symbol
        else:  # Its an operand add it to postfix string
            postfix += symbol

    while not operator_stack.is_empty():
        postfix += operator_stack.pop()
    return postfix
def par_checker(symbol_strng):
    s = Stack()  # Empty stack to place parentheses
    balanced = True
    index = 0

    while index < len(symbol_strng) and balanced:
        symbol = symbol_strng[index]  # First parentheses is at index 0
        if symbol in "([{":
            s.push(symbol)
        else:
            if s.is_empty():
                balanced = False
            else:
                top_open = s.pop()
                if not matches(top_open, symbol):
                    balanced = False
        index += 1

    return balanced and s.is_empty()
def divide_by_two(number):
    remainder_stack = Stack()  # Create an empty stack

    while number > 0:
        remainder = number % 2
        remainder_stack.push(remainder)
        number = number // 2
# remainder_stack.display()  Prints the stack in list form
    result = ''
    while not remainder_stack.is_empty():
        result = result + str(remainder_stack.pop())
    return result
def base_conversion(number, base):
    digits = '0123456789ABCDEF'
    remainder_stack = Stack()

    while number > 0:
        remainder = number % base
        remainder_stack.push(remainder)
        number = number // base

    result = ''
    while not remainder_stack.is_empty():
        result = result + str(digits[remainder_stack.pop()])

    return result
Пример #5
0
def is_valid(expression):
    # Create an empty stack
    par_stack = Stack()

    for ch in expression:
        if ch in '({[':
            par_stack.push(ch)
        if ch in ')}]':
            if par_stack.is_empty():
                print("Right parentheses are more then left parentheses.")
                return False
            else:
                popped_char = par_stack.pop()
                if not matched_parentheses(popped_char, ch):
                    print("Mismatched parentheses are ", popped_char, " and ", ch)
                    return False

    if par_stack.is_empty():
        print("Balanced parentheses")
        return True
    else:
        print("Left parentheses are more than right parentheses")
        return False
Пример #6
0
def infix_to_postfix(infix_expr):
    # Prec holds the precedence
    prec = {}
    prec['**'] = 4
    prec['*'] = 3
    prec['/'] = 3
    prec['+'] = 2
    prec['-'] = 2
    prec['('] = 1

    operator_stack = Stack()  # Empty stack for the operators
    postfixList = []  # Empty stack for the post fix list
    tokenList = infix_expr.split()  # Lets split the expression

    # Lets read each token
    for token in tokenList:
        if token in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or token in '0123456789':
            # Append token to the postfixList
            postfixList.append(token)
        elif token == '(':
            # Push the token to operator stack
            operator_stack.push(token)
        elif token == ')':
            # pop last item from operator stack
            topToken = operator_stack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = operator_stack.pop()
        else:
            while (not operator_stack.is_empty()) and (
                    prec[operator_stack.peek()] >= prec[token]):
                postfixList.append(operator_stack.pop())
            operator_stack.push(token)

    while not operator_stack.is_empty():
        postfixList.append(operator_stack.pop())
    return " ".join(postfixList)