zoukankan      html  css  js  c++  java
  • python-数据结构代码 栈

    from pythonds.basic.stack import Stack
    
    def parChecker(symbolString):
        s=Stack()
        balanced=True
        index=0
        while index<len(symbolString) and balanced:
            symbol=symbolString[index]
            if symbol in "({[":
                s.push(symbol)
            else:
                if s.isEmpty():
                    balanced=False
                else:
                    top=s.pop()
                    if not matches(top,symbol):
                        balanced=False
            index=index+1
        if balanced and s.isEmpty():
            return True
        else:
            return False
    
    def matches(open,close):
        opens="({["
        closers=")}]"
        return opens.index(open)==closers.index(close)
    
    def divideBy2(decNumber):
        remstack = Stack()
        while decNumber > 0:
            rem = decNumber % 2
            remstack.push(rem)
            decNumber = decNumber // 2
        binString = ""
        while not remstack.isEmpty():
            binString = binString + str(remstack.pop())
    
        return binString
    
    def baseConverter(decNumber,base):
        digits = "0123456789ABCDEF"
        remstack = Stack()
        while decNumber > 0:
            rem = decNumber % base
            remstack.push(rem)
            decNumber = decNumber // base
        newString = ""
        while not remstack.isEmpty():
            newString = newString + digits[remstack.pop()]
        return newString
    
    def infixToPostfix(infixexpr):
        prec={}
        prec["*"]=3
        prec["/"]=3
        prec["+"]=2
        prec["-"]=2
        prec["("]=1
        opStack = Stack()
        postfixList=[]
        tokenList=infixexpr.split()
        print(tokenList)
        for token in tokenList:
            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)
    
    def postfixEval(postfixExpr):
        operandStack = Stack()
        tokenList = postfixExpr.split()
        for token in tokenList:
            if token in "0123456789":
                operandStack.push(int(token))
            else:
                operand2 = operandStack.pop()
                operand1 = operandStack.pop()
                result = doMath(token,operand1,operand2)
                operandStack.push(result)
        return operandStack.pop()
    
    def doMath(op,op1,op2):
        if op == "*":
            return op1 * op2
        elif op == "/":
            return op1 / op2
        elif op == "+":
            return op1 + op2
        else:
            return op1 - op2
    
    class Stack:
         def __init__(self):
             self.items = []
    
         def isEmpty(self):
             return self.items == []
    
         def push(self, item):
             self.items.append(item)
    
         def pop(self):
             return self.items.pop()
    
         def peek(self):
             return self.items[len(self.items)-1]
    
         def size(self):
             return len(self.items)
  • 相关阅读:
    Application的使用(使用,及要注意的内存泄露问题)
    ANDROID 2.3 HOTPLUG input设备event处理以及hotplug检测
    博客园随笔添加自己的版权信息
    还贷的那些事III——等额还贷的计算
    计算机中的颜色IX——总述:RGB和HSV快速转换
    还贷的那些事II——等本还贷的计算
    计算机中的颜色VII——快速计算纯色的偏转
    还贷的那些事I——还贷的基本概念
    计算机中的颜色VIII——快速计算颜色的偏转
    计算字符串的相似度(VB2005)
  • 原文地址:https://www.cnblogs.com/lely/p/10136210.html
Copyright © 2011-2022 走看看