1. 程式人生 > >Python基本數據結構

Python基本數據結構

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基本數據結構