数据结构
列表
python中的列表是如何存储的
python中的对列表的插入删除(insert,remove)的时间复杂度为O(n)
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
括号匹配问题
# 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实现队列
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
""""""
"""
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一起进步吧!!!