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

py数据结构day3

思维导图:

代码1(完成双向循环链表的判空、尾插、遍历、尾删):

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

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

    #判空
    def is_empty(self):
        return self.size == 0

    #尾插
    def add_tail(self, data):
        node = Node(data)
        if self.is_empty():
            self.head = node
            self.tail = node
            node.next = self.head
            node.prev = self.tail
            self.size += 1
        else:
            node.prev = self.tail
            node.next = self.head
            self.tail.next = node
            self.tail = node
            self.head.prev = self.tail
            self.size += 1

    #遍历
    def show(self):
        if self.is_empty():
            print("空链表")
        else:
            q = self.head
            while q != self.tail:
                print(q.data, end=" ")
                q = q.next
            print(q.data)

    #尾删
    def delete_tail(self):
        if self.is_empty():
            print("空链表")
        else:
            self.tail = self.tail.prev
            self.tail.next = self.head
            self.head.prev = self.tail
            self.size -= 1

if __name__ == "__main__":
    link = DoubleCycleLink()
    link.add_tail(10)
    link.add_tail(20)
    link.add_tail(30)
    link.add_tail(40)
    link.add_tail(50)
    link.show()
    print("=============================")
    link.delete_tail()
    link.show()

代码2(不使用内置函数的情况下,完成顺序栈的创建栈、判空、入栈、出栈、获取栈顶元素、求栈的大小、遍历栈):
 

# 不使用内置函数实现顺序栈
class Stack:
    def __init__(self, capacity=10):
        self.capacity = capacity
        self.top = -1
        self.data = [None] * capacity
        self.size = 0

    # 入栈
    def push(self, data):
        if self.top == self.capacity - 1:
            print("栈已满")
            return
        self.top += 1
        self.data[self.top] = data
        self.size += 1

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

    # 出栈
    def pop(self):
        if self.top == -1:
            print("栈已空")
            return
        self.top -= 1
        self.size -= 1

    # 获取栈顶元素
    def top(self):
        if self.top == -1:
            print("栈已空")
            return
        return self.data[self.top]

    # 获取栈大小
    def size(self):
        return self.size


if __name__ == '__main__':
    stack = Stack()
    for i in range(10):
        stack.push(i)

    stack.show()
    stack.pop()
    stack.show()
    print(stack.top)
    print(stack.size)

代码3(不使用内置函数的情况下,完成链式栈的创建栈、判空、入栈、出栈、获取栈顶元素、求栈的大小、遍历栈):

#不使用内置函数实现链式栈
# 普通节点
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


# 带头节点的单向链表
class LinkList:
    def __init__(self, node=None):
        self.size = 0  # 链表长度
        self.head = node  # 头结点

    # 判空
    def is_empty(self):
        # return self.head is None
        return self.size == 0

    # 头插
    def add_head(self, data):
        node = Node(data)
        if self.is_empty():
            self.head = node
            self.size += 1
        else:
            node.next = self.head
            self.head = node
            self.size += 1

    # 遍历
    def show(self):
        if self.is_empty():
            print("空链表")
        else:
            p = self.head
            while p:
                print(p.data, end=" ")
                p = p.next
            print()

    # 头删
    def delete_head(self):
        if self.is_empty():
            print("空链表")
        else:
            self.head = self.head.next
            self.size -= 1

    #获取栈顶元素
    def top(self):
        if self.is_empty():
            print("空链表")
        else:
            return self.head.data

    #获取栈的长度
    def size(self):
        return self.size






if __name__ == '__main__':
    # 构造一个单向链表
    link = LinkList()
    link.add_head(1)
    link.add_head(3)
    link.add_head(5)
    link.add_head(4)
    link.add_head(7)
    link.add_head(9)
    link.show()
    print("=============================")
    link.delete_head()  # 头删
    link.show()
    print("=============================")
    num = link.top()  # 获取栈顶元素
    print(f"栈顶元素为{num}")
    print("=============================")
    length = link.size  # 获取栈的长度
    print(f"栈的长度为{length}")

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

相关文章:

  • idea gitlab 操作
  • 算法设计学习5
  • 【Windows+Cursor】从0到1配置Arxiv MCP Server,实现论文自主查询、下载、分析、综述生成
  • 从零构建大语言模型全栈开发指南:第四部分:工程实践与部署-4.3.1LangChain与Dify平台实战:从RAG到Agent工作流
  • 基于Python的医院信息管理系统的设计与实现
  • 【C#实战】动态模板替换:根据Model字段名称自动匹配替换值【代码之美】
  • 货代业务数字化管理:易境通货代系统在转型中的应用
  • 7.3 分治-快排:LeetCode 215.数组中的第K个最大元素
  • CompletableFuture 与反应式编程:异步编程的两种范式对比与实战
  • 简化Rust开发:探索lombok-macros crate
  • 01-性能测试
  • 【NLP 52、多模态相关知识】
  • Redis的Lua脚本
  • Docker 安装 Elasticsearch 教程
  • 人工智能之数学基础:基于吉文斯变换完成矩阵的QR分解
  • leetcode-热题100(3)
  • 【Triton 教程】triton_language.arange
  • 【C++】vector的模拟实现
  • 【AI插件开发】Notepad++ AI插件开发实践(代码篇):从Dock窗口集成到功能菜单实现
  • C++动态库对外接口通过接口方式实现
  • 二维码扫不出?用QR Research工具
  • LangChain接入azureopenai步骤(2025年初)
  • ctfshow
  • Android 10.0 通过广播控制systemui状态栏动态显示和隐藏功能实现
  • docker的文件系统Overlay2
  • 【自学笔记】jQuery语言基础知识点总览-持续更新
  • 《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例
  • 洛谷题单3-P1980 [NOIP 2013 普及组] 计数问题-python-流程图重构
  • 【力扣hot100题】(034)LRU缓存
  • 红帽Linux怎么重置密码