链表

本文介绍了链表数据结构的基础知识,包括单链表和双链表的概念、特点以及它们在实际应用中的差异。通过学习,读者可以理解链表如何存储和操作数据。

单链表

#先定义一个节点
class Node(object):
    def __init__(self, value, next=None):
    	self.value = value
    	self.next = next


#定义链表
class LinkedList(object):
    def __init__(self, maxsize):
    	self.maxsize = maxsize
    	self.root = Node()
    	self.tailnode = None
    	self.length = 0
    
    #添加节点,时间复杂度:O(1)
    def append(self, value):      
    	if self.maxsize is not None and len(self) >= self.maxsize:
    	    raise Exception('LikedList is Full')
    	node = Node(value)
    	tailnode = self.tailnode
    	if tailnode is None:
    	    self.root.next = node
    	else:
    	    tailnode.next = node
    	self.tailnode = node
    	self.length += 1

    #左侧添加节点,时间复杂度:O(1)
    def appendleft(self, value):
    	if self.maxsize is not None and len(self) >= self.maxsize:
    	    raise Exception('LinkedList is Full')
    	node = Node(value)
    	if self.tailnode is None:
    	    self.tailnode = node
    	headnode = self.root.next
    	self.root.next = node
    	node.next = headnode
    	self.length += 1

    def __iter__(self):
    	for node in self.iter_node():
    	    yield node.value
    
    #遍历从head节点到tail节点
    def iter_node(self):
        curnode = self.root.next
        while curnode is not self.tailnode: #从第一个节点开始遍历
            yield curnode
            curnode = curnode.next
        if curnode is not None:     #最后一个节点不能忘!!!
            yield curnode

    #删除包含某个值的节点,时间复杂度:O(n)
    def remove(self, value):
        prevnode = self.root.next
        for curnode in self.iter_node():
            if curnode.value == value:
            	prevnode.next = curnode.next
            	if curnode is self.tailnode: #注意更新tailnode
            	    self.tailnode = prevnode
            	del curnode
            	self.length -= 1
            	return 1               #表明删除成功 
            prevnode = curnode
        return -1                      #表明删除失败

    #查找一个节点并返回索引,时间复杂度:O(n)
    def find(self, value):
    	index = 0
    	for node in self.iter_node():
    	    if node.value == value:
    	    	return index
    	    index += 1
    	return -1                       #查找失败

    #删除第一个链表节点,时间复杂度:O(1)
    def popleft(self):
    	if self.root.next is None:
    	    raise Exception('Pop from Empty')
    	headnode = self.root.next
    	self.root.next = headnode.next
    	self.length -= 1
    	value = headnode.value
    	#如果删除的第一个节点刚好是尾节点
    	if self.tailnode is headnode:
    	    self.tailnode = None
    	del headnode
    	return value

    #清空链表,时间复杂度:O(n)
    def clear(self):
        for node in self.iter_node():
            del node
        self.root.next = None
        self.length = 0
        self.tailnode = None

双链表

class Node(object):
	def __init__(self, value=None, prev=None, next=None):
		self.value, self.prev, self.next = value, prev, next


class CircularDoubleLinkedList(object):
	def __init__(self, maxsize=None):
		self.maxsize = maxsize
		node = Node()
		self.prev, self.next = node, node
		self.root = node
		self.length = 0

	def __len__(self):
		return self.length

	def headnode(self):
		return self.root.next

	def tailnode(self):
		return self.root.prev

	#添加一个节点,时间复杂度:O(1)
	def append(self, value):
		if self.maxsize is not None and len(self) >= self.maxsize:
			raise Exception('Full')
		node = Node(value=value)
		tailnode = self.tailnode() or self.root
		tailnode.next = node
		node.next = self.root
		node.prev = tailnode
		self.root.prev = node
		self.length += 1

	#在左侧添加一个节点,时间复杂度:O(1)
	def appendleft(self, value):
		if self.maxsize is not None and len(self) >= self.maxsize:
			raise Exception('Full')
		node = Node(value=value)
		if self.root.next is self.root:
			self.root.next = node
			node.next = self.root
			node.prev = self.root
			self.root.prev = node
		else:
			node.prev = self.root
			headnode = self.root.next
			node.next = headnode
			headnode.prev = node
			self.root.next = node
		self.length += 1

	#删除节点,时间复杂度:O(1)
	def remove(self, value):
		if node is self.root:
			return
		else:
			node.prev.next = node.next
			node.next.prev = node.prev
		self.length -= 1
		return node

	def __iter__(self):
		for node in self.iter_node():
			yielf node.value

	def iter_node(self):
		if self.root.next is self.root:
			return
		curnode = self.root.next
		while curnode is not self.root:
			yield curnode
			curnode = curnode.next
		yield curnode

	def iter_node_reverse(self):
		if self.root.prev is self.root:
			return
		curnode = self.root.prev
		while curnode is not self.root:
			yield curnode
			curnode = curnode.prev
		yield curnode
标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值