Python基本數據結構
阿新 • • 發佈:2017-10-01
from abcd pop tac pri ddr import pre base
棧
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)
隊列
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)
雙端隊列
class Deque: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def addFront(self, item): self.items.append(item) def addRear(self, item): self.items.insert(0,item) def removeFront(self): return self.items.pop() def removeRear(self): return self.items.pop(0) def size(self): return len(self.items)
應用
括號匹配:
def check(s):
lefts = [‘(‘, ‘[‘, ‘{‘]
rights = [‘)‘, ‘]‘, ‘}‘]
stack = Stack()
for c in s:
if c in lefts:
stack.push(c)
else:
if stack.is_empty():
return False
c_pop = stack.pop()
if lefts.index(c_pop) != rights.index(c):
return False
if stack.is_empty:
return True
return False
進制轉換
def divideBy2(decNumber):
reback = Stack()
while (decNumber > 0):
reback.push(decNumber % 2)
decNumber = decNumber // 2
binstr = ‘‘
while not reback.is_empty():
binstr = binstr + str(reback.pop())
return binstr
def baseConverter(decNumber, base):
‘‘‘
將十進制數字轉成任意進制數字
‘‘‘
digits = ‘0123456789ABCDEF‘
reback = Stack()
while (decNumber > 0):
reback.push(decNumber % base)
decNumber = decNumber // base
basestr = ‘‘
while not reback.is_empty():
basestr = basestr + digits[reback.pop()]
return basestr
兩個棧實現隊列
# coding:utf-8
from pythonds.basic.stack import Stack
class StacToQueue(object):
def __init__(self):
self.stack_one = Stack()
self.stack_two = Stack()
def push(self, item):
self.stack_one.push(item)
def pop(self):
if self.stack_two.isEmpty():
while not self.stack_one.isEmpty():
self.stack_two.push(self.stack_one.pop())
return self.stack_two.pop()
def size(self):
return len(self.stack_one) + len(self.stack_two)
def isEmpty(self):
return self.size() == 0
if __name__ == ‘__main__‘:
queue = StacToQueue()
for x in range(5):
queue.push(x)
for x in range(5):
print(queue.pop())
Python基本數據結構