[数据结构] python 用队列做一个类似于linux的tail命令

读取文件test.txt,返回文件最后的n行内容,相当于执行linux中的tail命令。

test.txt中内容为:

djosjd
dashiojsa
jsadsalkdsal
daskdasjd
jdkajssoakdjsa
jksdjsalkjsa
apkspoad
daslkjsaop
kdoaspkdosa
kdoaskd
dasopjjd
#随便乱打了一个内容

方法:直接用collections模块中的deque方法来做就可以了。

因为deque([队列],最大长度)  的函数中,当队列达到最大长度,函数就会自动出队。

from collections import deque

def tail(n):
    with open('test.txt', 'r')as f:
        q = deque(f, n)
        return q

for i in tail(5):
    print(i, end='')

输出:

apkspoad
daslkjsaop
kdoaspkdosa
kdoaskd
dasopjjd
#文本中自动有换行格式

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,可以使用Python的字典和双向链表来实现一个缓存队列,以下是代码实现: ```python class CacheQueue: def __init__(self, capacity): self.capacity = capacity self.cache = {} self.head = None self.tail = None def get(self, key): if key not in self.cache: return -1 node = self.cache[key] self._move_to_head(node) return node.val def put(self, key, value): if key in self.cache: node = self.cache[key] node.val = value self._move_to_head(node) else: if len(self.cache) == self.capacity: self._remove_tail() node = Node(key, value) self.cache[key] = node self._add_to_head(node) def _add_to_head(self, node): if not self.head: self.head = node self.tail = node else: node.next = self.head self.head.prev = node self.head = node def _remove_node(self, node): if node == self.head: self.head = node.next elif node == self.tail: self.tail = node.prev else: node.prev.next = node.next node.next.prev = node.prev def _move_to_head(self, node): self._remove_node(node) self._add_to_head(node) def _remove_tail(self): node = self.tail del self.cache[node.key] self._remove_node(node) class Node: def __init__(self, key, val): self.key = key self.val = val self.prev = None self.next = None ``` 在上面的代码中,我们定义了一个CacheQueue类,它具有get和put方法来获取和存储缓存。我们使用一个字典来存储缓存,并使用双向链表来维护缓存的顺序。当我们获取或添加一个缓存时,我们将它移动到链表的头部。当我们需要删除一个缓存时,我们从链表的尾部开始删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值