当前位置: 首页 > news >正文

python数据结构——链表、栈、队列

一、思维梳理:

 二、双向循环链表:

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None
        self.prev = None

class DoubleLink:
    def __init__(self):
        self.size = 0
        self.head = None

    def is_empty(self):
        return self.size == 0

    def add_end(self,data):
        node = Node(data)
        if self.is_empty():
          self.head = node
          node.next = node
          node.prev = node
        else:
            q = self.head.prev
            node.prev = q
            node.next = self.head
            q.next = node
            self.head.prev = node
        self.size += 1

    def del_end(self):
        if self.is_empty():
            return
        else:
            if self.size == 1:
                self.head = None
            else:
                q = self.head.prev
                self.head.prev = q.prev
                q.prev.next = self.head
            self.size -= 1

    def show(self):
        if self.is_empty():
            return
        else:
            q = self.head
            while q.next != self.head:
                print(q.data,end=" ")
                q = q.next
            print(q.data,end=" ")
            print()

if __name__ == '__main__':
    doubleLink = DoubleLink()

    doubleLink.add_end(10)
    doubleLink.add_end(20)
    doubleLink.add_end(30)
    doubleLink.add_end(40)
    doubleLink.add_end(50)

    doubleLink.show()

    doubleLink.del_end()
    doubleLink.show()





 结果展示:

10 20 30 40 50 
10 20 30 40 

三、顺序栈:


class Stack:
    def __init__(self,capacity):
        self.capacity = capacity
        self.size = 0
        self.data = [None]*capacity

    def is_empty(self):
        return self.size == 0

    def is_full(self):
        return self.size == self.capacity

    def push(self,data):
        if self.is_full():
            return
        self.data[self.size] = data
        self.size += 1

    def pop(self):
        if self.is_empty():
            return
        self.size -= 1

    def top(self):
        if self.is_empty():
            return
        return self.data[self.size-1]

    def get_size(self):
        return self.size

    def show(self):
        for i in range(self.size-1,-1,-1):
            print(self.data[i],end=" ")
        print()

if __name__ == '__main__':
    stack = Stack(100)

    stack.push(10)
    stack.push(20)
    stack.push(30)
    stack.push(40)

    stack.show()

    stack.pop()
    stack.show()

结果展示:

40 30 20 10 
30 20 10 

四、链式栈:

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class Stack:
    def __init__(self):
        self.size = 0
        self.top = None

    def is_empty(self):
        return self.size == 0

    def push(self,data):
        node = Node(data)
        node.next = self.top
        self.top = node
        self.size += 1

    def pop(self):
        if self.is_empty():
            return
        else:
            self.top = self.top.next
            self.size -= 1

    def get_top(self):
        if self.is_empty():
            return
        return self.top.data

    def get_size(self):
        return self.size

    def show(self):
        if self.is_empty():
            return
        q = self.top
        while q:
            print(q.data,end=" ")
            q = q.next
        print()

if __name__ == '__main__':
    stack = Stack()

    stack.push(10)
    stack.push(20)
    stack.push(30)
    stack.push(40)
    stack.push(50)
    stack.push(60)

    stack.show()

    stack.pop()
    stack.show()

    print(stack.get_top())

    print(stack.get_size())

结果展示:

60 50 40 30 20 10 
50 40 30 20 10 
50
5

http://www.dtcms.com/a/107970.html

相关文章:

  • 安徽京准:NTP时间同步服务器操作使用说明
  • 从数据透视到AI分析,用四层架构解决运维难题
  • 图解AUTOSAR_SWS_CANTransceiverDriver
  • Nginx基本配置文件详解
  • 自然语言处理(23:(第六章3.)​seq2seq模型的改进)
  • UG NX二次开发(C++)-采用Open/C与NXOpen获取曲线的长度
  • 网络安全的现状与防护措施
  • 网络购物谨慎使用手机免密支付功能
  • 算法日常记录
  • 敏捷开发中硬件迭代速度的瓶颈如何解决
  • 14使用按钮实现helloworld(1)
  • JP1 Systemwalker 和 unirita的A-AUTO制品对比
  • 解锁界面设计密码,打造极致用户体验
  • 【Vue2】数据绑定_MVVM模型_数据代理_事件处理
  • 手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
  • 构造超小程序
  • 小程序30-wxml语法-声明和绑定数据
  • 数据库管理-第308期 用MySQL客户端访问国产Halo数据库(20250402)
  • DataX 3.0 实战案例
  • wireshark抓包分析数据怎么看 wireshark使用教程_wireshark怎么看
  • 前端图片压缩实战:基于compressorjs的高效解决方案
  • Flutter极速接入IM聊天功能并支持鸿蒙
  • ArcGIS Pro/GeoScene Pro AI 助手 2.1
  • SQL WHERE 与 HAVING
  • Scala集合
  • PostgreSQL JSON 与 JSONB 类型查询详解:差异、示例与最佳实践
  • 【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
  • Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
  • R语言、MaxEnt模型丨物种分布模拟技术的研究进展与技术挑战
  • mapbox_gl The requested URL returned error: 401