数据结构——栈和队列(python实现)

数据结构

列表

python中的列表是如何存储的

python中的对列表的插入删除(insert,remove)的时间复杂度为O(n)

python实现栈

python 复制代码
class Stack:
    """ python实现栈 """

    def __init__(self):
        self.stack = []

    def push(self, item):
        self.stack.append(item)

    def pop(self):
        if len(self.stack) != 0:
            return self.stack.pop()
        return None

    def peek(self):
        if len(self.stack) != 0:
            return self.stack[-1]
        return None

括号匹配问题

python 复制代码
# 1. 括号匹配   "{}()(({[]}))"    ""
def brace_match(s):
    match = {')': '(', ']': '[', '}': '{'}
    stack = Stack()
    for i in s:
        if i in {'(', '{', '['}:
            stack.push(i)
        else:
            if stack.is_empty():
                return False
            elif stack.peek() == match[i]:
                stack.pop()
            else:
                return False
    if stack.is_empty():
        return True
    return False


print(brace_match("{}"))
print(brace_match("{}()((}}"))
print(brace_match("{}()(({[]}))"))
print(brace_match("{}()(({[[]}))"))

队列

队列怎么实现

队列的实现可以通过简单的列表实现吗:

如果只是通过列表简单实现,那么出去一个元素就要将剩下的元素整体迁移,时间复杂度就是O(n)。

python实现队列

python 复制代码
class Queue:
    """ python实现队列 """

    def __init__(self, size):
        self.queue = [0 for _ in range(size)]
        self.size = size
        self.front = 0
        self.rear = 0

    def is_empty(self):
        return self.front == self.rear

    def is_full(self):
        return (self.rear + 1) % self.size == self.front

    def push(self, item):
        if not self.is_full():
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = item
        else:
            raise ImportError('Queue is full')

    def pop(self):
        if not self.is_empty():
            self.front = (self.front + 1) % self.size
            return self.queue[self.front]
        else:
            raise ImportError('Queue is empty')


q = Queue(5)
for i in range(4):
    q.push(i)

print(q.is_full())
print(q.pop())
print(q.pop())
print(q.pop())
print(q.pop())

双向队列

python内置的队列模块 deque

python 复制代码
""""""
"""
deque 是一个 双向列表
append 从右入队
popleft 从左出队
appendleft 从左入队
pop 从右出队

入队时队列满的话: 自动将入队方向另一边的值出队

由此,就可以通过deque快速实现一个类似于linux中tail的命令
q = deque(f, s)
相当于创建了一个定长的队列,让后循环句柄入队,前面的就都被出队了
"""
from collections import deque

q = deque(maxlen=3)
q.append(2)
q.appendleft(1)
q.append(3)
print(q)
q.appendleft(0)
print(q)
q.append(3)
print(q)


# deque快速实现tail的命令
def tail(s):
    with open('test.txt', 'r') as f:
        q = deque(f, s)
    print(q)
    for line in q:
        print(line, end='')


tail(3)

若有错误与不足请指出,关注DPT一起进步吧!!!

相关推荐
m0_702036537 分钟前
Layui表单input框怎么设置只读或禁用
jvm·数据库·python
weixin_459753947 分钟前
php怎么调用快手开放平台_php如何接入快手授权登录流程
jvm·数据库·python
人道领域11 分钟前
【LeetCode刷题日记】二叉树层序遍历完全指南:从基础到LeetCode实战一篇搞定BFS模板,秒杀4道经典面试题
java·开发语言·数据结构·leetcode·面试·二叉树
weixin_4440129315 分钟前
SQL中如何实现基于条件的批量逻辑删除_过滤与更新状态位
jvm·数据库·python
研究点啥好呢21 分钟前
面馆开业!客官,你的面(经)好了!
python·阿里云·docker·面试·reactjs·求职招聘·react
m0_6138562924 分钟前
Python中PyTorch模型如何显存优化_使用梯度检查点减少显存占用
jvm·数据库·python
承渊政道26 分钟前
【动态规划算法】(一文讲透二维费用的背包问题)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
QQ2422199799 小时前
基于python+微信小程序的家教管理系统_mh3j9
开发语言·python·微信小程序
RSTJ_16259 小时前
PYTHON+AI LLM DAY THREETY-SEVEN
开发语言·人工智能·python
郝学胜-神的一滴9 小时前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习