Example #1
0
def infixToPostfix(infixexpr):
    prec = {}
    prec["^"] = 3
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr.split()

    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or is_float(token):
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and \
                    (prec[opStack.peek()] >= prec[token]):
                postfixList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)
Example #2
0
def merge(a, b):
    sa = Stack()
    sb = Stack()

    #   Inserir os items de cada queue em stacks independentes
    for i in a.items:
        sa.push(i)

    for j in b.items:
        sb.push(j)

    #   Comparar os 2 stacks
    sc = Stack()
    while not sa.isEmpty() and not sb.isEmpty():
        if sa.peek() < sb.peek():
            tmp = sa.pop()
            sc.push(tmp)
            tmp = sb.pop()
            sc.push(tmp)
        elif sb.peek() < sa.peek():
            tmp = sb.pop()
            sc.push(tmp)
            tmp = sa.pop()
            sc.push(tmp)

    #   Virar o stack ao contrario
    sd = Stack()
    while not sc.isEmpty():
        tmp = sc.pop()
        sd.push(tmp)

    #   Inserir o stack temporario na queue final
    c = Queue()
    for y in sd.items:
        c.enqueue(y)

    return c
Example #3
0
def infixToPostfix(infixexpr):
    prec = {}
    prec["^"] = 3
    prec["*"] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    opStack = Stack()
    postfixList = []
    tokenList = infixexpr.split()

    for token in tokenList:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or is_float(token):
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                try:
                    topToken = opStack.pop()
                except IndexError:
                    return "Expressão Inválida: " + infixexpr
        else:
            try:
                while (not opStack.isEmpty()) and (prec[opStack.peek()] >=
                                                   prec[token]):
                    postfixList.append(opStack.pop())
                opStack.push(token)
            except KeyError:
                return "Operador Inválido: " + "'" + token + "'" + " de " + infixexpr

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())
    return " ".join(postfixList)