• 3 栈 队列 双头队列


    数据结构 -- 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() 返回队列中的项数。它不需要参数,并返回一个整数。
    
    # 队列    队尾 0 = = = = = -1> 对头
    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   double-ended queue

    优缺点: (尽管双端队列看起来似乎比栈和队列更灵活,但实际上在应用程序中远不及栈和队列有用)

    • 同同列相比,有两个头部和尾部。可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性
    • Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
    • addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
    • addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
    • removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
    • removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
    • isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
    • size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
    class Deque():
        def __init__(self):
            self.items = []
        def addFront(self,item): #进队首
            self.items.append(item)  #追加
        def addRear(self,item):  #队尾
            self.items.insert(0,item)  #插入0 位置
        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) #pop 0位置的
        def size(self):  #个数
            return len(self.items) #长度
    
    # 回文检查  abccba
    def huiwen(s):
        q = Deque()
        for ch in s:
            q.addFront(ch)
    while q.size()>1: if q.removeFront() != q.removeRear(): return False return True print(huiwen('abbba'))

    
    
  • 相关阅读:
    字符串前面加@
    SQL字段类型bit 查询时注意
    SELECT IDENT_CURRENT(tableName)和自增长列的纠结
    解析xml文件 selectSingleNode取不到节点
    【.NET】.NET MVC4 微信扫一扫功能实现附全部代码
    未定义对象
    C# Web开发中弹出对话框的函数[转载]
    json序列化和反序列化
    jq的$.each()方法
    学习URLRewriter.dll的使用
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10878709.html
Copyright © 2020-2023  润新知