(共18张PPT)
2.2 链表
链表类
水果类
类是现实世界或思维世界中的实体在计算机中的反映,用来描述具有相同的属性和方法的对象的集合,它定义了每个对象所共有的属性和方法。
在 Python 中,对象用类创建。类被称为类对象,类的实例被称为类的对象。创建一个新类意味着创建一个新类型的对象,从而允许创建一个该类型的对象实例。每个类的实例可以拥有保存自己状态的属性和改变自己状态的、定义在类中的方法。
类和实例
举例:新建一个类对象“蔬菜”,里面可以有“白菜”、“青菜”、
“西红柿”这些对象。
类的定义
Python 使用 class 关键字来定义类,其语法格式如下:
类是抽象的,要使用类定义的功能,就必须进行类的实例化,即创建类的对象,其语法格式为:对象名=类名(参数列表)。
类中的属性
①类的数据成员是在类中定义的成员变量,用来存储描述类的状态特征的值,也称为属性。属性可以被该类中定义的方法访问,也可以通过类的对象进行访问。
②通过“self.变量名”定义的属性,称为类的对象属性,属于类实例化的特定对象。对象属性在类的内部通过“self.变量名”访问,在外部通过“对象名 .变量名”来访问。
③类属性属于整个类,是在类中所有方法之外定义的变量,所有实例之间共享一个副本。类属性在类的内部通过“类名 .类属性名”或“self.类属性名”访问,在外部可以通过类对象和实例对象访问公有的类属性,但不能访问私有的类属性。
类的对象方法
①类的对象方法对类的某个实例化对象进行操作,一般以 self 作为其第一个形式参数(也可以使用其他名字)。声明对象方法的语法格式如下:
方法的调用格式为 :对象名.方法名([实 参 列表])。
②注意:虽然对象方法的第一个参数是 self,但是在调用时,用户不需要也不能给该参数传递值,Python会自动地把对象传递给 self参数。
(拓展选学)链表类
在python中没有指针,不能直接进行链表操作,但是python面向对象编程
可以定义一个链表类来进行链表操作。在类中设定链表和节点的属性、方法,
在后续的程序中可以直接运用。
(1)单向链表的类定义
通常使用两个类来协调表示单向链表,即单向链表的节点类(LinkNode)和单向链表类(LinkList)。先定义单向链表的节点类,代码如下:
#定义节点类LinkNode
#初始化节点包含两个区域
self.data、self.next
#self.data区域保存数据
#self.next区域保存指针
再定义单向链表类,代码如下:
(2)单向链表节点的访问
链表节点只能通过头指针(head)进行访问,其他节点通过节点间的指针依次访问。可以设计类的魔术方法__str__(),当使用 print()函数输出类对象的值时,会自动调用__str__()方法,依次输出链表的所有节点,代码如下:
(3)单向链表节点的插入
在链表中插入新节点时,无需移动链表中的元素,只要修改链表中节点指针域的值,就能高效地实现插入操作。在单向链表插入新节点可能会出现三种情况,从表头插入、从中间插入或追加在表尾。
①当从表头插入时,可以设计类的方法 prepend(),代码如下:
②当从表尾插入时,可以设计类的方法 append(),代码如下:
③当从表中间插入时,可以设计类的方法 insert(),代码如下:
(4)单向链表节点的删除单向链表中元素的删除比较简单。若要删除节点号为 index 的节点,则只需找到其前驱节点,修改前驱节点的 next指针指向其后继节点。当 index 越界时删除尾节点;若删除了头节点,则需要修改头指针。可以设计类的方法 pop(),代码如下:
练一练
1.已知学生类的定义如下:
Class student:
def _init_(self,name,age_=18,sex_=“女”):
self.name=name
self.age=age_
self.sex=sex_
def _str_(self):
return f”姓名:{self.name},年龄:{self.age},性别:{self.sex}”
下列代码段定义了一个学生类的实例a,并输出其值:
a=student(”王丽”,”16”)
print(a)
则执行该段程序后,程序输出的值为:
A.姓名:王丽,年龄:16,性别:
B.姓名:王丽,年龄:18,性别:女
C.姓名:王丽,年龄:16,性别:女
D.姓名:王丽,年龄:18,性别:女
C
2.已知单向链表类的定义如下:
class linklist:
def _init_(self):
self.head=None
则不带头节点的单向链表a为空的判定条件为
A.self.head is None
B.self.head is not None
C.self.head.next is None
D.self.head.next is not None
A
谢 谢