数据结构 -- 栈 stack
特征: 先进后出
python 实现栈
Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
size() 返回栈中的 item 数量。不需要参数,并返回一个整数。
class Stack(): def __init__(self): self.items = [] def push(self,item): self.items.append(item) def pop(self): if not self.isEmpty(): # not True return self.items.pop() def isEmpty(self): return self.items == [] def peek(self): # 栈顶值 数据还在栈里面 return self.items[-1] def size(self): return len(self.items) stack = Stack() stack.push(1) stack.push(2) stack.push(3) # print(stack.pop()) # print(stack.pop()) # print(stack.pop()) # print(stack.peek()) print(stack.size())
s = Stack() #模拟浏览器回退按钮 def getRequest(url): s.push(url) def showCurrentPage(): print(s.pop()) def back(): return s.pop() getRequest('www.1.com') getRequest('www.2.com') getRequest('www.3.com') showCurrentPage() print(back()) print(back()) -- 下面是结果 -- www.3.com www.2.com www.1.com
数据结构 -- 队列 queue
特征: 先进先出,后进后出
案例: 20台电脑公用一个打印机,排队打印的情况
Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。 enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。 dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。 isEmpty() 查看队列是否为空。它不需要参数,并返回布尔值。 size() 返回队列中的项数。它不需要参数,并返回一个整数。 # 队列 队尾 = = = = = > 对头 class Queue(): def __init__(self): self.items = [] def enqueue(self,item): self.items.insert(0,item) def dequeue(self): #移除 修改了队列 if not self.isEmpty(): return self.items.pop() def isEmpty(self): return self.items == [] def size(self): return len(self.items) def travel(self): return self.items q = Queue() q.enqueue(1) q.enqueue(2) q.enqueue(3) print(q.travel()) print(q.dequeue()) print(q.dequeue()) print(q.dequeue())
例子 : 烫手的山芋
数据结构 - 双端队列 Deque
- 同同列相比,有两个头部和尾部。可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性
- Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
- addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
- addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
- removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
- removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
- isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
- size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
class Dequeue(): def __init__(self): self.items = [] def addFront(self,item): self.items.append(item) def addRear(self,item): self.items.insert(0,item) def isEmpty(self): return self.items == [] def removeFront(self): if not self.isEmpty(): return self.items.pop() def removeRear(self): if not self.isEmpty(): return self.items.pop(0) def size(self): return len(self.items) # 回文检查 abccba def huiwen(s): q = Dequeue() for ch in s: q.addFront(ch) while q.size()>1: if q.removeFront() != q.removeRear(): return False return True print(huiwen('abbba'))