导航:首页 > 编程语言 > java数据结构链表

java数据结构链表

发布时间:2024-09-13 00:24:03

java怎么用链表实现

在数据结构中经常看见的一个基本概念-链表。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
在Java中,对于链表的实现都是基于引用数据类型操作的。实现大致如下:
定义节点类Node,节点的概念很重要,一个链表是由各各节点连接在一起组成的。在节点类Node中定义节点内容及指向下一节点的引用,再增加一个添加节点的方法即可完成链表实现。
链表有很多种不同的类型:单向链表,双向链表以及循环链表。在执行效率上,相比数组而言,链表插入快查找慢,开发中得根据实际业务使用。

㈡ JAVA数据结构有哪几种

数组、栈 、队列、链表、树、堆 、图、散列表 。

1:数组是计算机编程语言上,对于“Array”的中文称呼,是用于储存多个相同类型数据的集合。

2:栈是限定仅在表尾进行插入和删除操作的线性表,栈者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

3:一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

4:链表,一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

5:哈希表,是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

㈢ Java集合中的基本数据结构

1、集合中三大数据结构

1.1数组

内存地址连续

可以通过下标的成员访问,下标访问的性能高

增删操作有较大的性能消耗(需要动态扩容)

1.2链表(双向链表)

灵活的空间要求,存储空间不要求连续

不支持下标访问,支持顺序遍历搜索

针对增删操作找到对应的节点改变链表的头尾指针指向即可,无需移动元数据存储位置

1.3树(Java中二叉树特性)

某节点的左子树节点仅包含小于该节点的值

某节点的右子树节点仅包含大于该节点的值

节点必须是二叉树

顺序排列

存在问题:树可以认为是介于数组和链表二者之间的一种数据结构,拥有较快的查询速度同时拥有较快的插入和删除速度。但是在树出现极端或严重的不平衡情况下会导致效率低下

基于红黑树折中解决二叉树不平衡带来的效率低下问题

1.3.1红黑树

红黑树,Red-BlackTree[RBT]是一个自平衡(不是绝对平衡)的二叉查找树(BST),树上的每个节点需要遵循下面的规则

每个节点要么是黑色,要么是红色

根节点为黑色

每个叶子节点(NIL)是黑色

不能存在两个连续的红色节点(红色节点的两个子节点必须是黑色)

任一节点到叶子节点的路径包含相同数量的黑节点

红黑树通过什么自平衡

左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左节点变为旋转节点的右子节点,左子节点保持不变

右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变

变色:节点的颜色由红色变为黑色或者黑色变为红色

红黑树插入场景

1、红黑树为空

1.1插入节点作为根节点并把节点设置为黑色

2、插入节点的父节点为黑节点

2.1直接插入

3、插入节点的父节点为红节点

3.1叔叔节点存在且为红节点

1、P节点和S节点设置为黑色

2、PP节点设置为红色

3、PP设置为当前插入节点

4、再次重复上述步骤

3.2叔叔节点不存在或者叔叔节点为黑色

3.2.1P节点是PP节点的左节点

3.2.1.1插入节点是P节点的左节点

1、P设置为黑色

2、PP节点设置为红色

3、PP节点右旋

3.2.1.2插入节点是P节点的右节点

1、P节点左旋

2、把P设置为插入节点(此时等于上面的场景)

3、PP节点右旋

3.2.2P节点是PP节点的右节点

3.2.2.1插入节点是P节点的右节点

1、P节点设置为黑色

2、PP节点设置为红色

3、PP节点左旋

3.2.2.2插入节点是P节点的左节点

1、P节点右旋

2、将P设置为插入节点(此时等于上面场景)

3、PP节点左旋

PP节点左旋

3.2.2.2插入节点是P节点的左节点

1、P节点右旋

2、将P设置为插入节点(此时等于上面场景)

3、PP节点左旋

㈣ java中有哪些数据结构

数据结构:
①数组 (Array)
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数
据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组
元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指
针数组、结构数组等各种类别。
②栈 (Stack)
栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后
的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
③队列 (Queue)
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行
插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
④链表 (Linked List)
一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
⑤树 (Tree)
树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。
⑥堆 (Heap)
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指
二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
⑦图 (Graph)
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,
边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
⑧散列表 (Hash)
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称
这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
差不多我就知道这些了~

㈤ java问题,链表跟顺序表到底有什么不同顺序表我知道,但是为什么说链表读取数据时要从头开始,

接楼上:准确的来说,你的问题是一个数据结构上的问题.

首先你要区分一下物理上的存储结构 与 逻辑上的数据结构

物理上的存储结构

  • 链式存储结构

  • 顺序存储结构

逻辑上的数据结构

  • 线性数据结构 :单链表 双向链表 循环列表(栈 队列 ...)

  • 树:普通树 特殊树

  • 查找表 : 静态查找表,动态查找表

  • 图:有向图 ...

任何逻辑上的数据结构要在计算机上表示时,都必须根据自己的需求选择一种物理上的存储结构,然后根据逻辑数据结构的特性进行存储等等操作.

对于物理上的存储结构而言

  • 顺序存储结构 : 只要知道基址地址,就可以通过数学计算出任一元素 的地址.

  • 链式存储结构: 上下家不能越级联系,你知道爸爸是谁,但是不知道爷爷是谁,想找爷爷只能通过爸爸.(下一个结点的地址存储在上一个结点中)

这种特性是由于其物理实现决定的,目前暂时看没有办法改变.

回过头来看你的问题中两个关键的概念定义:

  • 链表:以链式存储结构存储的线性表叫做链表

  • 顺序表:以顺序存储结构存储的线性表叫做顺序表

所以:

顺序表可以随即存取任一元素.而链表在绝大部分情况下都需要遍历查找.

阅读全文

与java数据结构链表相关的资料

热点内容
当代程序员的日常生活 浏览:649
湖北黄石dns服务器云主机 浏览:581
奇异博士是个什么app 浏览:259
单片机数码管闪烁 浏览:953
有什么阅读小说免费的app 浏览:661
华润电力是个什么app 浏览:372
java与jni线程 浏览:202
c语言哈夫曼编码压缩 浏览:27
单片机零基础入门 浏览:437
千锋python3基础视频 浏览:578
linuxintel程序 浏览:977
光遇登陆服务器连接失败什么意思 浏览:767
jd检测手机新老接口源码 浏览:126
java调用interface 浏览:1
解决点面之间是否存在联系的算法 浏览:272
如何架构云服务器 浏览:395
象山证券交易用什么app 浏览:776
量价分析pdf 浏览:714
php如何调用js方法 浏览:743
网页游戏在哪个文件夹 浏览:689