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

相关推荐
Awesome Baron3 分钟前
《Learning Langchain》阅读笔记8-RAG(4)在vector store中存储embbdings
python·jupyter·chatgpt·langchain·llm
阡之尘埃6 分钟前
Python数据分析案例73——基于多种异常值监测算法探查内幕交易信息
人工智能·python·机器学习·数据分析·异常检测·无监督学习
Yhame.11 分钟前
【使用层次序列构建二叉树(数据结构C)】
c语言·开发语言·数据结构
雾月5536 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
蓝莓味柯基1 小时前
Python3:文件操作
python
Pasregret1 小时前
访问者模式:分离数据结构与操作的设计模式
数据结构·设计模式·访问者模式
xiaoh_71 小时前
解决视频处理中的 HEVC 解码错误:Could not find ref with POC xxx【已解决】
python·ffmpeg·音视频
明月与玄武2 小时前
Python编程的真谛:超越语法,理解编程本质
python·编程语言
CodeCraft Studio2 小时前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中进行数据验
开发语言·python·excel
阿让啊2 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法