数组与链表
数组
-
数组
是数据结构中的基本模块之一 -
数组
是一种基本的数据结构,用于按顺序存储元素的集合
。但是元素可以随机存取,因为数组中的每个元素都可以通过数组索引
来识别。 -
数组
可以有一个或多个维度。 -
数组
具有固定容量 - 大多数编程语言都提供内置的
动态数组
,它仍然是一个随机存取的列表数据结构,但大小是可变的
。例如,在 C++ 中的vector
,以及在 Java 中的ArrayList
。
在java代码中它的具体表现形式为:
声明一个数组
double[] myList; // 首选的方法
//或
double myList[];
// 效果相同,但不是首选方法,该风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
创建一个数组
int[] intArray = new int[5];
float[] floatArray = new float[]{1F,2F,3F};
链表
- 链表是由一组不必相连【不必相连:可以连续也可以不连续】的内存结构 【节点】,按特定的顺序链接在一起的抽象数据类型。
- 链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。
单链表
单链表 [Linked List]:由各个内存结构通过一个Next
指针链接在一起组成,每一个内存结构都存在后继内存结构【链尾除外】,内存结构由数据域和 Next 指针域组成。
- Data 数据 + Next 指针,组成一个单链表的内存结构 ;
- 第一个内存结构称为 链头,最后一个内存结构称为 链尾;
- 链尾的 Next 指针设置为 NULL [指向空];
- 单链表的遍历方向单一【只能从链头一直遍历到链尾】
在java代码中它的具体表现形式为:
public class Node<T> {
T data; // data数据
Node next; // 指向下一节点
Node(T data) {
this.data = data;
}
}
双链表
双向链表 [Double Linked List]:由各个内存结构通过指针 Next
和指针 Prev
链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构【链头没有前驱,链尾没有后继】,内存结构由数据域、Prev 指针域和 Next 指针域组成。
- Data 数据 + Next 指针 + Prev 指针,组成一个双向链表的内存结构;
- 第一个内存结构称为 链头,最后一个内存结构称为 链尾;
- 链头的 Prev 指针设置为 NULL, 链尾的 Next 指针设置为 NULL;
- Prev 指向的内存结构称为 前驱, Next 指向的内存结构称为 后继;
- 双向链表的遍历是双向的,即如果把从链头的 Next 一直到链尾的[NULL] 遍历方向定义为正向,那么从链尾的 Prev 一直到链头 [NULL ]遍历方向就是反向;
在java代码中它的具体表现形式为:
public class Node<T> {
T data; // data数据
Node prev; // 指向上一节点 (前驱)
Node next; // 指向下一节点 (后继)
Node(T data) {
this.data = data;
}
}
循环链表
单向循环链表 [Circular Linked List] : 由各个内存结构通过一个指针 Next
链接在一起组成,每一个内存结构都存在后继内存结构,内存结构由数据域和 Next 指针域组成。
在java代码中它的具体表现形式为:
可参考下面这篇博客
https://blog.csdn.net/u013393...
双向循环链表 [Double Circular Linked List] : 由各个内存结构通过指针 Next
和指针 Prev
链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由数据域、Prev 指针域和 Next 指针域组成。
在java代码中它的具体表现形式为:
可参考下面这篇博客
https://blog.csdn.net/u014039...
未完待续
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。