Python 链式数据结构应用案例:老鹰抓小鸡

链表应用案例: 老鹰抓小鸡

  1. 把小鸡排队看作一个链表,每个节点记录一个小鸡,并记录指向下一个小鸡的地址

  2. 在小鸡总数范围内随机产生一个序数,产生的序数意味着对应的节点小鸡出队——删除该节点即可

 # -*- coding:utf-8 -*-
  """
  作者:bug君
  日期:2023年 04月 08日
  标题:链表应用
  作用:
  思路:在linkedList类里增加delNode()删除节点方法
  """
  ​
  ​
  class Node:
      def __init__(self, data=None, next=None):
          self._elem = data
          self._next = next
  ​
      def setData(self, NewData):
          self._elem = NewData
  ​
      def setNext(self, NewNext):
          self._next = NewNext
  ​
      def getData(self):
          return self._elem
  ​
      def getNext(self):
          return self._next
  ​
  ​
  class LinkedList:
      def __init__(self):
          self._head = Node()
          self._length = 0
  ​
      def tail_add(self, NewData):  # 向链表尾添加元素
          NewNode = Node(NewData)
          if self._length == 0:
              self._head = NewNode
          else:
              curNode = self._head
              while curNode.getNext():  # 遍历到结尾元素
                  curNode = curNode.getNext()
              curNode.setNext(NewNode)
          self._length += 1
  ​
      def PrintLinkedList(self):  # 遍历并打印节点数值
          curNode = self._head
          while curNode:  # 这里跟上面 末尾添加元素不同, 需要遍历完链表全部元素
              print(f'打印节点 : {curNode.getData()}')
              curNode = curNode.getNext()
  ​
      def getLength(self):
          return self._length
  ​
      def delNode(self, number):
          curNode = self._head
          if self._length <= 1:  # 默认至少有一个节点,才进入删除模式
              self._head = None
          else:
              nextNode = curNode.getNext()
              if number == 1:
                  self._head = nextNode
                  return
              cnt = 2
              while cnt <= self._length:
                  if cnt == number:
                      if cnt == self._length:
                          curNode.setNext(None)
                          break
                      else:
                          curNode.setNext(nextNode.getNext())
                          break
                  curNode = nextNode
                  nextNode = nextNode.getNext()
                  cnt += 1
          self._length -= 1
  ​
  ​
  if __name__ == '__main__':
      chicks = ['1号', '2号', '3号', '4号', '5号', '6号']
      newLinked = LinkedList()
      for chick in chicks:
          newLinked.tail_add(chick)
      print(newLinked.getLength())
      newLinked.PrintLinkedList()
  ​
      print("=========删除3号小鸡=========")
      newLinked.delNode(3)
      newLinked.PrintLinkedList()
  ​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江某指点迷津

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值