python栈和队列哪个好_python 栈和队列

博客给出了Python中栈和队列的代码实现。定义了栈的基本操作,如入栈、出栈等,并用于十进制转二进制、进制转换、中缀表达式转后缀表达式等;还定义了队列的基本操作,如入队、出队等,并实现了热土豆问题的模拟。

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)

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

# print(divideBy2(42))

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

# print(baseConverter(25,2))

# print(baseConverter(25,16))

def infixToPostfix(infixexpr):

prec = {}

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 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 Queue:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def enqueue(self,item):

self.items.insert(0,item)

def dequeue(self):

return self.items.pop()

def size(self):

return len(self.items)

def hotPotato(namelist, num):

simqueue = Queue()

for name in namelist:

simqueue.enqueue(name)

while simqueue.size() > 1:

for i in range(num):

print(i)

print(simqueue.enqueue(simqueue.dequeue()))

simqueue.dequeue()

return simqueue.dequeue()

print(hotPotato(["Bill","David","Susan","Jan e","Kent","Brad"],7))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值