java实现几种简单的数据结构
备注:本文内容参考学习自阿发老师(网易云:阿发你好)的数据结构与算法课程。
何为数据结构?何为算法?
算法可以理解为我们解决、实现问题用到的数学逻辑、方法,而数据结构则是数据组织结构。数据结构是为算法服务的。
算法的应用场景:
- 操作系统
- 服务器
- 图片视频处理
- 大数据
- 人工智能领域
常见的数据结构
常见的数据结构有数组、队列、链表、栈、哈希表等。
数组
数组是最简单的一种数据结构。
int[] array1 = new int[20]; //动态初始化 0
Integer[] array2 = new Integer[20]; //动态初始化 null
int[] array3 = {
1,2,3,4}; //静态初始化--默认初始化长度为4
创建数组有多种办法,初始化的数组必须指定数组的长度。初始化的数组如果没有赋值的话注意其是有默认值的。
链表
链表(LinkedList)也是一种常见的数据结构,样式如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAb0Kqkj-1592479268325)(C:\Users\xyz\AppData\Roaming\Typora\typora-user-images\image-20200616154515982.png)]
链表中的每个节点(node)都存在一个next指针指向下一个节点,呈现一个链状结构。
普通有头链表的实现 java自带(ArrayList 、 LinkedList)
public class XyzList
{
public static class Node{
//静态内部类,与外部类无关
public Object value;
public Node next;
}
//定义一个头节点/有头链表
public Node head = new Node(); //实例化XyZList时自动加入到实例化的对象中 ===emmm...相当于XyzList内的属性
public void add(Object value)
{
Node tail = head;
while(tail.next != null)
tail = tail.next;
//在尾部添加一个新节点
Node node = new Node();
node.value = value;
tail.next = node;
}
public void remove(Object value)
{
Node node = head;
while(node.next != null)
{
if(node.next.value.equals(value))
{
//value相等则移除该节点
node.next = node.next.next;
}
node = node.next;
}
}
public int size()
{
int count = 0;
Node node = head;
while(node.next != null)
{
count ++;
node = node.next;
}
return count;
}
}
双向链表 java.util.LinkedList
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ncGhUl8H-1592479268327)(C:\Users\xyz\AppData\Roaming\Typora\typora-user-images\image-20200616175459180.png)]
添加节点
public class XyzDoubleList
{
public static class Node{
public Object value;
public Node prev;
public Node next;
}
//头节点
public Node head = new Node(); //field
//尾节点
public Node tail = new Node();//field
public XyzDoubleList()
{
//初始化
head.next = tail;
tail.prev = head;
}
public void add(Object value)
{
// 附加到末尾
Node node = new Node ();
node.value = value;
// 插在尾节点之前
tail.prev.next = node;
node.prev = tail.prev;
node.next = tail