示例#1
0
class Pin():
    def __init__(self, name):
        self.stack = Stack()
        self.label = name

    def name(self):
        return self.label

    def isEmpty(self):
        return self.stack.isEmpty()

    def check(self, d):
        return self.stack.isEmpty() or d.get() < self.stack.peek().get()

    def peek(self):
        return self.stack.peek()

    def push(self, d):
        if self.check(d):
            self.stack.push(d)
            return True
        else:
            return False

    def pop(self):
        return self.stack.pop()

    def __str__(self):
        return self.name() + "=>" + str(self.stack)
示例#2
0
def infixTopostfix(infix):
    prec = {"*": 3, "/": 3, "+": 2, "-": 2, "(": 1, ")": 1}

    opstack = Stack()
    postfixlist = []
    infixlist = infix.split()

    for token in infixlist:
        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":
            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)
示例#3
0
def infixToPostfit(infiexpr):
    prec = {}
    prec['*'] = 3
    prec['/'] = 3
    prec['+'] = 2
    prec['-'] = 2
    prec['('] = 1
    opStack = Stack()
    postfitList = []
    tokenList = infiexpr.split()
    print(tokenList)
    for token in tokenList:
        if token in "ABCDEFG" or token in "0123456789":
            postfitList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfitList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and (prec[opStack.peek()] >=
                                               prec[token]):
                postfitList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfitList.append(opStack.pop())
    return " ".join(postfitList)
示例#4
0
def xiaoxiaole(strings):
    s = Stack()
    list = []

    for str in strings:  # 如果与栈顶相同则消去栈顶, 不同则压入栈顶
        if str == s.peek():
            s.remove()
        else:
            s.push(str)

    if s.isEmpty():
        return None
    else:
        while not s.isEmpty():
            list.insert(0, s.pop())  # 取出栈中的每个元素,注意排列顺序
        return "".join(list)
示例#5
0
import sys
sys.path.append('../')

from basic.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())