数据结构——栈和队列(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一起进步吧!!!

相关推荐
yanxing.D15 小时前
OpenCV轻松入门_面向python(第六章 阈值处理)
人工智能·python·opencv·计算机视觉
while(1){yan}15 小时前
数据结构之链表
数据结构·链表
JJJJ_iii16 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归
Han.miracle17 小时前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
Python图像识别19 小时前
71_基于深度学习的布料瑕疵检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo
独自破碎E20 小时前
判断链表是否为回文
数据结构·链表
千码君201620 小时前
React Native:从react的解构看编程众多语言中的解构
java·javascript·python·react native·react.js·解包·解构
淮北49421 小时前
windows安装minicoda
windows·python·conda
爱喝白开水a1 天前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
liu****1 天前
8.list的模拟实现
linux·数据结构·c++·算法·list