面向对象:
“对象”实际上是对现实世界中所存在的事物的一种抽象
人拥有着一些静态的特征,比如身高、体重、性别等,也拥有一些动态的行为,比如吃法,睡觉等,而在计算机世界中,我们将之抽象为一个类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):#头结点初始化为Noneself.head_node = Noneself.length = 0
链表的插入:
具体步骤如下:
-
新加入一个节点,所以链表长度
length
+ 1 -
创建一个新的链表节点,初始化它的值为
data
-
如果当前链表还是空链表(头节点为空),则新创建的链表节点为头节点
-
如果当前链表不为空链表,将新的节点放入到链表的尾部,接入链表,也就是当前链表的尾部的
next
指向新节点,新接入的链表节点变为链表的尾部
insert方法:
class LinkList:def _init_(self):self.head_node = Noneself.lenth = 0#该方法名称为insert,接受data作为参数def insert(self, data):self.length += 1 new_node = Node(data) #创建一个新的链表头结点,初始化为dataif self.head-node is None: #如果当前链表为空self.head_node = new_node #新创建的链表节点为头结点return self.head_nodecurrent_node = self.head_node # 如果当前链表不是空链表, currentNode 指针初始指向 头节点while current_node.next is not None:# 不断移动 currentNode,直到 next 指针为空时停止,说明已经走到最后一个节点current_node = current_node.nextcurrent_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_ndoeprint()
完整代码如下:
#链表节点类
class Node:def __init__(self, data):self.data = dataself.next = None#链表类
class LinkList:def __init__(self):self.head_node = Noneself.length = 0#尾部插入链表节点def insert(self, data):self.length += 1new_node = Node(data)if self.head_node is None:self.head_node = new_nodereturn self.head_nodecurrent_node = self.head_nodewhile current_node.next is not None:current_node = current_node.nextcurrent_node.next = new_nodereturn new_node#打印链表节点def print_link_list(self):current_node = self.head_nodewhile 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.nextwhile True:try:n = int(input())nums = list(map(int, input().split))except:breaklink_list = LinkList()for data in nums:link_list.insert(data)link_list.print_link_list()