java实现几种简单的数据结构

java实现几种简单的数据结构

备注:本文内容参考学习自阿发老师(网易云:阿发你好)的数据结构与算法课程。

何为数据结构?何为算法?

算法可以理解为我们解决、实现问题用到的数学逻辑、方法,而数据结构则是数据组织结构。数据结构是为算法服务的。

算法的应用场景:

  1. 操作系统
  2. 服务器
  3. 图片视频处理
  4. 大数据
  5. 人工智能领域

常见的数据结构

常见的数据结构有数组、队列、链表、栈、哈希表等。

数组

数组是最简单的一种数据结构。

	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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值