面向对象:
“对象”实际上是对现实世界中所存在的事物的一种抽象
人拥有着一些静态的特征,比如身高、体重、性别等,也拥有一些动态的行为,比如吃法,睡觉等,而在计算机世界中,我们将之抽象为一个类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()