吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6647|回复: 4
收起左侧

[会员申请] 申请会员ID:luyi0405【冒充他人作品申请】

[复制链接]
吾爱游客  发表于 2019-10-28 11:47
1、申请ID:luyi0405
2、个人邮箱:164196046@qq.com        
3、原创技术文章:   

栈和队列

特性:先进后出的数据结构
应用:每个web浏览器都有一个返回按钮,当你浏览网页时,这些网页被放置在一个栈中(网页的网址)。你现在查看网页的地址存储在栈的顶部,你第一个查看网页的地址存储在栈的底部。如果按"返回"按钮,将按相反的顺序浏览刚才的页面。

栈的方法

Stack()   创建一个空的新栈。他不需要参数,返回创建的新栈
push(item)将一个新数据添加到栈的顶部,他需要item参数,并且不返回任何内容
pop()     从栈中删除顶部项,他不需要参数并返回item。栈被修改
peek()    从栈返回顶部项,但不会删除它,不需要参数,不修改栈
isEmpty() 测试栈是否为空。不需要参数,返回布尔值
size()    返回栈中item数量。不需要参数,并返回一个整数

python第三方库栈的实现

from pythonds.basic.stack import Stack
s=Stack()       #实例化创建一个栈

s.push("11")    #向栈顶部放入数据
s.push("22")
s.push("33")
s.push("44")
print(s.size())   #查看栈中有多少个元素
print(s.pop())    #取出栈顶部第一个元素
print(s.peek())   #返回栈顶第一个元素
print(s.isEmpty())#判断栈是否为空

自定义栈的实现

class Stack():
    def __init__(self):                        #使用列表实现栈
        self.li=[]
    def push(self,item):                 #向栈顶部放入数据
        self.li.append(item)
    def pop(self):                                #取出栈顶部第一个元素
        ret=self.li.pop()
        return ret
    def peek(self):                                #返回栈顶第一个元素
        ret=self.li[-1]
        return ret
    def size(self):                                #查看栈中有多少个元素
        ret=len(self.li)
        return ret
    def isEmpty(self):                        #判断栈是否为空
        return self.li==[]

s=Stack()
s.push(1)
s.push("11")    #向栈顶部放入数据
s.push("111")
s.push("33")
s.push("44")
print(s.size())   #查看栈中有多少个元素
print(s.pop())    #取出栈顶部第一个元素
print(s.peek())   #返回栈顶第一个元素
print(s.isEmpty())#判断栈是否为空

队列

队列:先进先出
应用场景:我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印

队列的方法

Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。
put(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
get() 从队首移除项。它不需要参数并返回 item。 队列被修改。
empty() 查看队列是否为空。它不需要参数,并返回布尔值。
qsize() 返回队列中的项数。它不需要参数,并返回一个整数。

python第三方库中的队列方法

from queue import Queue
q=Queue()           #实例化一个队列
q.put("sss")        #向队列里放入一个元素
q.put("aaa")
q.put("ddd")

print(q.get())      #从队列取出第一个元素
print(q.empty())    #判断队列是否为空
print(q.qsize())    #查看队列的长度

自定义队列

class Queue():
    def __init__(self):                        #使用列表完成队列的实现
        self.li=[]
    def put(self,item):                        #向队列里放入一个元素
        self.li.append(item)
    def get(self):                                #从队列取出第一个元素
        return self.li.pop(0)
    def empty(self):                        #判断队列是否为空
        return self.li==[]
    def qsize(self):                        #查看队列的长度
        return len(self.li)

q=Queue()                        #实例化一个队列
q.put('11')
q.put('22')
q.put('33')

print(q.get())                #从队列取出第一个元素
print(q.empty())        #判断队列是否为空
print(q.qsize())        #查看队列的长度

双端队列

同队列相比,有两个头部和尾部。可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性

双端队列的方法

append()                在双端队列队尾添加一个元素
appendleft()        在双端队列队首添加一个元素
pop()                        删除双端队列队尾的元素
popleft()                删除双端队列队首的元素
reverse()                将双端队列反转(无返回值)
clear()                        清空双端队列(无返回值)

python第三方库中的双端队列

from collections import deque

dq=deque(['1','2','3'])         #实例化一个双端队列

print(dq)                   #查看双端队列
dq.append("aa")             #在双端队列队尾添加一个元素
print(dq)
dq.appendleft("bb")         #在双端队列队首添加一个元素
print(dq)
print(dq.pop())             #删除双端队列队尾的元素
print(dq.popleft())         #删除双端队列队首的元素
dq.reverse()         #将双端队列反转(无返回值)
dq.clear()           #清空双端队列(无返回值)
print(dq)

自定义双端队列

class Dequeue():
    def __init__(self,*args,**kwargs):
        if args:                                #方便用户通过实例化时传值直接创建双端队列
            self.li=list(args)
        else:
            self.li=list(kwargs)

    def __str__(self):                        #打印队列时,返回字符串形式的队列
        return str(self.li)

    def append(self,item):                #在双端队列队尾添加一个元素
        self.li.append(item)

    def appendleft(self,item):        #在双端队列队首添加一个元素
        self.li.insert(0,item)

    def pop(self):                                #删除双端队列队尾的元素
        return self.li.pop()

    def popleft(self):                        #删除双端队列队首的元素
        return self.li.pop(0)

    def reverse(self):                        #将双端队列反转(无返回值)
        self.li.reverse()

    def clear(self):                        #清空双端队列(无返回值)
        self.li=[]

dq=Dequeue()
dq.append("11")                #在双端队列队尾添加一个元素
dq.append("22")
dq.append("33")
print(dq)                        #查看双端队列
dq.append("aa")
dq.appendleft("bb")                #在双端队列队首添加一个元素

print(dq.pop())                        #删除双端队列队尾的元素
print(dq.popleft())                #删除双端队列队首的元素
dq.reverse()                        #将双端队列反转(无返回值)
print(dq)
dq.clear()                                #清空双端队列(无返回值)
print(dq)

优先级队列

import heapq

#利用heapq实现一个简答的优先级队列
class PriorityQueue:
    def __init__(self):
        self._queue=[]
        self._index=0
    def push(self,item,priority):
        heapq.heappush(self._queue,(-priority,self._index,item))
        self._index+=1
    def pop(self):
        return heapq.heappop(self._queue)[-1]

class Item:
    def __init__(self,name):
        self.name=name

    def __repr__(self):
        return 'Item({!r})'.format(self.name)

if __name__ == '__main__':
    q=PriorityQueue()
    q.push(Item('foo'),1)
    q.push(Item('bar'),5)
    q.push(Item('spam'),4)
    q.push(Item('grok'),1)

    print(q.pop())
    print(q.pop())
    #具有相同优先级的两个元素,返回的顺序同它们插入到队列时的顺序相同
    print(q.pop())
    print(q.pop())

线程安全的栈

from queue import LifoQueue #LIFO队列
lifoQueue = LifoQueue()
lifoQueue.put(1)
lifoQueue.put(2)
lifoQueue.put(3)
print('LIFO队列',lifoQueue.queue)
lifoQueue.get() #返回并删除队列尾部元素
lifoQueue.get()
print(lifoQueue.queue)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2019-10-28 14:31
随手搜到处都是,是你原创?https://www.cnblogs.com/konghui/p/10876850.html
深巷丶 发表于 2019-11-4 23:27
又是你,整天复制粘贴过来申请账号,真当管理是傻的?
错过了一个亿 发表于 2019-11-27 16:50
头像被屏蔽
ivyboy 发表于 2019-12-30 16:07
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 06:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表