Python | 链表的基础操作1

面向对象:

        “对象”实际上是对现实世界中所存在的事物的一种抽象

        人拥有着一些静态的特征,比如身高、体重、性别等,也拥有一些动态的行为,比如吃法,睡觉等,而在计算机世界中,我们将之抽象为一个类Person, 并具有与之对应的“属性”和“方法”。

  • 属性”表示Person类所具有的特征,比如姓名、年龄、性别,通过这些特征,我们可以描述一个“人”的基本状态。
  • “方法”表示Person类的行为和功能,比如吃饭、睡觉、行走,通过这些动作,我们可以描述一个“人”的动态行为。
# 实例化一个类,从而创造一个对象,和调用一个函数类似
person1 = Person("Tom", 10, "男") # person1是一个对象,是Person类的实例
person2 = Person("Jerry", 3, "男")# person2是一个对象,是Person类的实例

        类”是现实世界中的实体在计算机世界中的抽象概念,类可以看作是对象的模板,它定义了对象的结构和行为方式,而对象是“类”的实现。

Class类:

        在Python中,类的定义是从class关键字开始的, 类的名称命名要使用大驼峰来命名(即MyName这种形式)

        在类的代码块中,我们可以定义变量和函数,在类中所定义的变量,将会成为所有的实例的属性,所有实例都可以访问这些变量,在类中也可以定义函数(被称之方法)类的所有实例也可以访问这些方法

class Person:
    # 类中定义一个变量name, 会成为所有实例的公共属性
    name = "Tom"
    # 类中也可以定义函数,称之为方法,方法也可以通过该类的实例来访问
    def say_hello(self):
        print("Hello")
        
# 创建Person的实例    
person1 = Person()
person2 = Person()

# 实例可以调用属性
person1.name = "Jerry"
person2.name = "Mike"

# 实例可以调用方法
person1.say_hello()
person2.say_hello()

初始化类:

class Person:
    #定义_init_方法:name是创造是创造实例时传递的参数
    def _init_(self, name):
        #self表示实例本身(person1,person2),即实例.name属性 = 传递的name值
        self.name = name

__int__方法会在实例创建的时候立即执行,可以向新创建的对象初始化属性,调用类创建对象时,类后边的所有参数都会依次传递到init中。

所以类的基本结构是如下的:

class 类名:
    #公共属性
    #init方法
    def _init_(self, 其他参数):

    #其他方法
    def method_1(self, 其他参数)
    ...

定义链表节点:

class Node:
    def _init_(self, data):
        self.data = data #储存节点的数据
        self.next = None

        self后面的参数是你在定义链表节点时需要传的

定义链表类:

需要定义一个链表类用于容纳链表节点,链表类一般包括链表头节点和链表的节点长度这两个属性。

class LinkList:
    def _init_(self):
        #头结点初始化为None
        self.head_node = None
        self.length = 0

链表的插入:

具体步骤如下:

  • 新加入一个节点,所以链表长度length + 1

  • 创建一个新的链表节点,初始化它的值为data

  • 如果当前链表还是空链表(头节点为空),则新创建的链表节点为头节点

  • 如果当前链表不为空链表,将新的节点放入到链表的尾部,接入链表,也就是当前链表的尾部的next指向新节点,新接入的链表节点变为链表的尾部

insert方法:

class LinkList:
    def _init_(self):
        self.head_node = None
        self.lenth = 0
    #该方法名称为insert,接受data作为参数
    def insert(self, data):
        self.length += 1 
        new_node = Node(data) #创建一个新的链表头结点,初始化为data

        if self.head-node is None:   #如果当前链表为空
            self.head_node = new_node #新创建的链表节点为头结点
            return self.head_node

        current_node = self.head_node # 如果当前链表不是空链表, currentNode 指针初始指向 头节点
        while current_node.next is not None:
            # 不断移动 currentNode,直到 next 指针为空时停止,说明已经走到最后一个节点
            current_node = current_node.next

        current_node.next = new_node  #将新创建的节点插入链表的尾部
        return new_node #返回插入的节点

打印链表节点:

def print_link_list(self):
    current_node = self.head_node   #current_node指向头结点
    while current_node is not None: 
        print(current_node.data, enn = "")  #输出链表数据
        current_node = current_node.next    #移动current_ndoe
    print()
        
    

完整代码如下:

#链表节点类
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

#链表类        
class LinkList:
    def __init__(self):
        self.head_node = None
        self.length = 0
    
    #尾部插入链表节点
    def insert(self, data):
        self.length += 1
        new_node = Node(data)
        
        if self.head_node is None:
            self.head_node = new_node
            return self.head_node
        
        current_node = self.head_node
        while current_node.next is not None:
            current_node = current_node.next
            
        current_node.next = new_node
        return new_node
        
    #打印链表节点
    def print_link_list(self):
        current_node = self.head_node
        while current_node is not None:
            if current_node.next is not None:
                print(current_node.data, end = " ")
            else:
                print(current_node.data)
            current_node = current_node.next
      
        
while True:
    try:
        n = int(input())
        nums = list(map(int, input().split))
    except:
        break
    
    link_list = LinkList()
    
    for data in nums:
        link_list.insert(data)
            
    link_list.print_link_list()
        
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值