python数据结构——用链表实现栈、队列、循环队列、双向队列

这篇博客介绍了如何使用Python实现链表数据结构,包括栈、队列、循环队列和双向队列。首先回顾了链表的基本概念,然后详细阐述了每个结构的实现原理,特别提到了在实现双向队列时利用了双向链表的特性。文章提供了具体的代码示例来帮助理解。
摘要由CSDN通过智能技术生成

前言

先复习一下几种数据结构吧。
链表,就是一个个结点,用指针的方式来连接起来,因为py的语言特点,我们只需要将next赋值为下一个对象的变量名即可。(变量名本身就可以理解成一个指针索引)
如果链表还有问题,看这里

队列和栈,前两天用list实现了一个,在这里,也有讲解。
一个是first in first out,另一个是first in last out。

双向队列,就是两端都能插入删除的队列,这个的实现需要双向链表。
循环队列,之前是list实现的,这里我们用一次node,结构基于循环链表。
双向链表和循环链表在这里,都是讲过的,不再赘述。

实现链表

没有链表,我们都做不了。

链表的本质上就是一个个的结点么, 所以这里我先给出了结点的定义。

class _Node():
	"""lightweight,nonpublic class for storing linked node"""
	__slots__ = '_element','_next'
	def __init__(self,element,next):
		self._element = element
		self._next = next

他那个__slots__对象,貌似是能节省一个dict,正常直接创建两个变量也是一样的。

我们将这个类放在整体的大类中就可以了。

栈:

class LinkedStack():
    # 使用链表实现栈,链表第一项为栈顶,没有头节点
    class _Node():
        """lightweight,nonpublic class for storing linked node"""
        __slots__ = '_element','_next'
        def __init__(self,element,next):
            self._element = element
            self._next = next
    def __init__(self):
        """create an empty stack"""
        self._head = None
        self._size = 0
    def __len__(self):
        """return the number of elementsin the stack"""
        return self._size
    def is_empty(self):
        """return true if the stack is empty"""
        return self._size==0
    def push(self,e):
        """add an element e to the top of the stack"""
        self._head = self._Node(e,self._head)
        self._size += 1
    def top(self):
        """return(but not remove) the element at the top of the stack"""
        if self.is_empty():
            raise Empty('stack is empty')
        return self._head._element
    def pop(self):
        """remove and return the element from the top of the stack"""
        if self.is_empty():
            raise Empty(</
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值