Python进阶 - 数据结构与算法 - 04 单向循环链表的操作

本文介绍了单向循环链表的基本概念和操作,包括节点实现、链表操作如判断是否为空、获取长度、遍历、添加、删除元素等。详细阐述了每个操作的实现细节,例如在链表尾部或头部添加元素,指定位置插入元素,查找和删除节点的方法。
摘要由CSDN通过智能技术生成

一、单向循环链表的引入

单向循环链表的结构
链表中的每一个节点都包括数据域和链接域两部分。数据域中存放真实的数据,链接域存放下一个数据的地址,且尾节点的链接域为首节点。
单向循环链表的结构

二、单向循环链表的操作

2.1 节点的实现

链表中的每一个数据都由数据区和链接域两部分组成,在Python或者其他语言中没有一个数据类型可以同时储存这两个数据,因此我们可以定义节点这样一个类,而节点中的数据和链接区可以想象成该类的两个属性。

由于链表中的链接域存储的是下一个数据的地址,但在内存中并没有地址这一个明确的数据,因此我们可以将链接域的值设置为下一个节点。

        class Node(object):
              """单向循环链表的节点"""
		    def __init__(self,item,):
		    
		        #item存放的数据区域
		        self.item = item
		        
		        #next存放下一个节点的标识
		        self.next = None

2.2 单向循环链表的操作

is_empty() 链表是否为空
length() 链表长度
travel() 遍历整个链表
append(item) 链表尾部添加元素
add(item) 链表头部添加元素
insert(pos, item) 指定位置添加元素
search(item) 查找节点是否存在
remove(item) 删除节点

2.3 单链表的操作实现

定义一个单向循环链表类,且进行初始化操作

在进行初始化操作时,需要考虑两种情况:
1.链表为空时,令self.__head = None
2.链表不为空时,首节点指向该节点,该节点的链接域指向该节点
self.__head = node, node.next = node

class SingCycLinkList(object):

    def __init__(self,node = None):
        #空链表
        self.__head = None
        if node:
            # 首节点指向尾节点
            self.__head = node
            #尾节点指向首节点
            node.next = node

2.3.1 判断单向循环链表是否为空

单向循环链表是否为空
如果单向循环链表为空,则其首节点为空(self.__head = None);如果单向循环链表不为空,则其首节点不为空(self.__head = node)。

  class Node(object):
    	"""单向循环链表的节点"""
	    def __init__(self,item):
	        self.item = item
	        self.next = None

  class SingCycLinkList(object):

	    def __init__(self,node = None):
	        #空链表
	        self.__head = None
	        if node:
	            # 首节点指向尾节点
	            self.__head = node
	            #尾节点指向首节点
	            node.next = node
	
	    def is_empty(self):
	        """单向循环链表是否为空"""
	        # if self.__head == None:
	        #     return True
	        # return False
	        return self.__head == None

node = Node(100)
s = SingCycLinkList(node)
print(s.is_empty())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值