java中的链表数据结构,数据结构链表的基本操作

  java中的链表数据结构,数据结构链表的基本操作

  目录

  基础知识

  1.1链表的基本结构

  1.2节点类和链表节点的定义

  1.3顺序打印和反向打印链表的基本操作

  2.1计算链表的长度

  2.2从前到后插入数据。

  2.3查找和删除参考

  1.基础知识1.1链表的基本结构

  链表是由节点组成的,每个节点包含一个叫做cargo的基本单元,也是一个递归的数据结构。它可以保持数据的逻辑顺序,但存储空间不必按顺序存储。

  如图所示:

  链表的基本元素是:

  节点:每个节点有两部分,左边部分叫值域,用来存储用户数据;右边部分称为指针字段,用于存储指向下一个元素的指针。Head:头节点始终指向第一个节点tail: tail始终指向最后一个节点None:链表中最后一个节点的指针字段为None,但链表也分为单向链表和单向循环链表,双向链表和双向循环链表,如图:

  写一个基本程序来测试它:

  1.2节点类和链表节点的定义

  该类定义如下:

  Classnode: def _ _ init _ _ (self,cargo=none,next=none):self . cargo=cargo self . next=next def _ _ str _ _(self):#测试基本函数,输出字符串返回str (self。cargo)打印节点( text) #由于任何值而输出文本

  如何定义链表?

  我们可以一次定义一个节点,如下所示:

  1=节点(1)节点2=节点(2)节点3=节点(3)然后展示各个节点的关系,就OK了。

  1.next=node2node2。next=node3 1.3顺序打印和反向打印

  因为之前已经建立了关系,所以可以进入第一个节点,循环整个链表然后顺序打印整个链表。

  print list(node):while node:print node node=node . nextprintlist(node 1)123使用递归方法进行打印。主要步骤如下:

  将列表分成两部分,head:第一个元素,tail:其他元素向后打印。打印第一个元素def向后打印(lists):iflists==none:return head=lists tail=lists . next print,tail向后打印(Tail)打印头,Tail向后打印(node 1) 1 22 33 none 3 none 2 31 2其实可以更简单。

  def backward(lists):if lists==None:return print backward(lists。next)printlistsprintbackward(node 1)2。链表的基本操作就是链表的基本操作,包括插入、删除等。但需要注意的是,下面的操作是针对非循环链表的,从第一个节点开始,我们不能在链表中插入none值。

  2.1计算链表的长度

  类节点(object):# nodeclass #函数:输入一个值data,将值改为一个节点def __init__(self,data,next=None):self . data=data self . next=next def _ _ str _ _(self):return self . data class linked list(object):def _ _ init _ _(self,Head=none): self。head=headdef _ _ len _ _ (self): #函数:进入头节点,返回链表长度curr=self。Headcounter=0而curr不为none: counter=1curr=curr.next返回插入前后的计数器2.2。

  从前:

  如果插入的数据为空,则返回以使用输入数据创建一个节点,并将该节点指向原始的头节点。设置该节点为头节点,时间复杂度和空间复杂度为O(1)。

  Def insertToFront(self,data): #函数:输入数据,插入头节点前,改为头节点#输出:如果数据为none则为当前头节点:返回none node=node (data,self。头)自我。head=node从后面返回节点:追加

  如果输入数据为空,则返回None。如果头节点为空,则直接将输入数据作为头节点遍历整个链表。直到当前节点的下一个节点为None,将当前节点的下一个节点设置为输入数据,时间复杂度为O(n),空间为O(1)。

  Def append(self,data): #函数:输入数据,如果数据为none,则作为节点插入到末尾:如果,则返回none node=node (data)。头无:自我。head=node返回节点curr _ node=self。头而curr _ node。next不是none: curr _ node=curr _ node。next=node返回node 2.3查找和删除

  查找

  如果搜索到的数据为空,则返回将首节点设置为当前节点;如果当前节点不为None,遍历整个链表;如果当前节点的数据与输入数据相同,则为当前节点;否则,轮到下一个节点,其可见时间复杂度为O(n),空间复杂度为O(1)。

  def find(self,data): #函数:如果数据为none,则查找链表的节点数据:返回none curr _ node=self。头而curr _ node不为none:if curr _ node . data==data:return curr _ node curr _ node=curr _ node . next return none删除1

  申请两个变量。如果遇到匹配,不需要删除,直接将匹配节点的上一个节点指向匹配节点的下一个节点。因此,您需要定义一个前节点和一个当前节点。当前节点用于判断是否匹配输入数据,前一个节点用于改变链表的指向。

  如果输入数据为None,返回设置头节点为前一个节点,头节点的下一个节点为当前节点,判断前一个节点是否匹配输入数据。如果是,则将首节点设置为当前节点,遍历整个链表。如果当前节点与输入数据匹配,则将前一个节点的指针指向当前节点的下一个节点。否则,移动到下一个节点的时间复杂度为O(n),空间复杂度为O(1)。

  def delete(slef,data): #如果数据为none则删除节点:如果self.head为none则返回none:如果self . head . data==data:self . head=self . head . next返回prev _ node=self . head . curr_node=self . head . next当curr _ node不为None:if curr _ node . data==data:prev _ node . next=curr _ node . next else:prev _ node=curr _ node curr _ node=curr _ node . next010-next

  第二种解决方案是只定义一个变量作为当前节点,用它的下一个节点来判断是否与数据匹配。如果是,将当前节点直接指向下一个节点。

  时间复杂度为O(n),空间复杂度为O(1)。

  def deleteAlt(self): #如果数据为none,则只定义一个变量来完成删除操作:如果self,则返回。头无:自性则归。head.data==data: self。头=自己。头。下次返回curr _ node=self。head while curr_node.next不为None:if curr _ node . next . data==data:curr _ node . next=curr _ node . next . next返回curr_node=curr_node.next引用

  链接列表

  用Python实现的数据结构和算法:链表

  Python数据结构-链表

  解决方案笔记本

  历史提交的图片或压缩文件

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: