链表结构(linked structure)在程序中是常用到的数据结构,而链表最简单的结构就是单链表(singly linked structure)。
单链表节点包括两个数据类型data和next类型,data存储数据内容,next指向下一个节点。
其节点在python的表现为:
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
这采用“引用+类”来实现链表的。Node(object)链表节点类,其实列数据类型Node(data, next)包括data数据域和next指针域。默认参数next的默认值为None,即可以这样Node(data)进行实列化,其指针域指向空。链表最后一个节点的指针域要指向None。
来给自己建立一个节点类型并对其构成的链表读取数据操作:
#!/usr/bin/python
'''
filename: node.py
实现:单链表的节点类型
时间:2019/5/14
作者:peipei12138
'''
class Node(object):
'''Node(object)链表节点类,实列数据类型包括data数据域和next指针域。'''
def __init__(self, data, next=None):
self.data = data
self.next = next
def print_List(head):
'''print_List(head)函数输入Node节点类型链表头指针(头节点)输出链表所有节点data
,无返回值。'''
p = head
while p != None:
print(p.data, end=' ')
p = p.next
if not p:
print('')
def List_node_id(head):
'''List_node_id(head)函数输入Node节点类型链表头指针(头节点)输出链表所有节点10进制存储地址
,无返回值。'''
while head != None:
print(id(head), end=' ')
head = head.next
if not head:
print('')
if __name__ == "__main__":
node0 = None
node1 = Node('A', node0)
node2 = Node('B', node1)
print(node2.data, node2.next.data, node2.next.next)
else:
print('-----Represents a singly linked node-----')
程序的运行结果:>>>B A None
node0 = None
node1 = Node('A', node0)
node2 = Node('B', node1)
print(node2.data, node2.next.data, node2.next.next)
这里将node0赋值为None,并把它赋给节点node1的指针域,节点node1的数据域赋值'A'……
这样便形成了一个有两个节点的短的单链表。其尾巴节点为node1,而不是node0,因为节点0不是Node类型的节点,只是一个数据:None,我们在这里把它作为尾节点的指针域;node2为链表头节点,往往需要引出一个外部参数指向它: head = node2,因为长链表的生成往往是自动化的,需要一个头指针作为索引,head节点永远指向第一个节点。
调用实例节点node2的数据:head.data;调用实例节点node1的数据:head.next.data。
最后输出的是(节点2的数据:B,节点2指向节点(节点1)的数据:A,节点2指向的节点(节点1)其指针域的值(node0=None):None。