栈 队列 双头队列

数据结构 -- 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'))

猜你喜欢

转载自www.cnblogs.com/zhangchen-sx/p/10878709.html