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

相关推荐
草莓橙子碗6 分钟前
Claude 使用指南
开发语言·python
工具分享14 分钟前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI27 分钟前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造31 分钟前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏36 分钟前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
hold?fish:palm1 小时前
30 两两交换链表中的节点
数据结构·算法·链表
230万光年的思念1 小时前
分子动力学模拟参考文献
python
kkkkkkkkkk_Z2 小时前
学嵌入式和C语言编程数据结构|学习日记Day21:内核链表与队列学习
c语言·数据结构·学习
不正经学生2 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
HongXu_CaiYi2 小时前
0103-python相关-函数、文件
python