Python数据结构3

本文深入探讨了Python中的链表数据结构,包括链表的需求与重要性、节点构成、链表在动态堆栈和队列实现中的应用。文章详细介绍了链表的插入和删除操作,并讨论了链表在非线性数据结构如树和图中的作用。此外,还提到了双链表和循环链表的操作,并展示了链表如何实现堆栈和队列。
摘要由CSDN通过智能技术生成

一、链表
1.理解链表的需求和重要性
2.在给定的链表中插入和删除项
3.使用链表实现堆栈和队列
4.理解与链表相关的问题
链表是一种以节点为基本单元的数据结构。每个节点有两部分即:数据和链接。数据部分包含值,而链接部分包含下一个节点的地址。
如图:
在这里插入图片描述
链表用于许多问题,比如动态堆栈和队列的实现,以及树和图等非线性数据结构的实现。
在某些情况下,在树的实现中不使用链表。在实现非线性数据结构时,必须仔细考虑链表的需要。例如,如果我们有一个平衡的二叉树或堆,那么使用数组比使用链表要好得多。链表的第一个节点将用HEAD表示。还可以注意到,最后一个节点的链接为NULL,表示在最后一个节点之后没有节点。
链表操作:
插入在开始、在中间插入、插入在结束、删除在开始、删除在中间、删除在最后
双链表操作:
插入在开始、在中间插入、插入在结束、删除在开始、删除在中间、删除在最后
循环链表:
在循环链表中,最后一个节点连接到第一个节点。也就是说,最后一个节点的“NEXT”包含第一个节点的地址。
链表实现堆栈:

class Node:
    def __init__(self):
        self.data = None
        self.link = None
    def setVal(self, val):
        self.data = val
    def getVal(self):
        return self.data
    def setNext(self, next):
        self.link = next
    def getNext(self):
        return self.link
    def hasNext(self):
        if self.link != None:
            return True
        else:
            return False

class Stack:
    def __init__(self):
        self.head =None
        self.length = 0
    def Length(self):
        current = self.head
        count = 0
        while current !=None:
            count = count + 1
            current = current.getNext()
            return count
    def push(self, val):
        tempNode = Node()
        tempNode.setVal(val)
        current = self.head
        if current!=None:
            while current.getNext() != None:
                current = current.getNext()
            current.setNext(tempNode)
            self.length+=1
        else:
            self.head = tempNode
    def pop(self):
        current = self.head
        if current!=None:
            while (current.link).link != None:
                current = current.link
            data =current.data
            current.link = None
        else:
            print('Underflow')
            data = -1
        return  data
    def traverse(self):
        current = self.head
        while current !=None:
            print(current.data, end ="")
            current = current.getNext()
S =Stack()
print('\nStack')
S.traverse()
S.push(2)
S.traverse()
print('\nStack')
S.push(5)
S.traverse()
print('\nStack')
S.push(3)
S.traverse()


结果:

Stack
2
Stack
25
Stack
253

链表实现队列:
同理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值