链表的定义与使用

本文详细介绍了链表的概念,包括链表的动态对象数组本质和节点定义。讲解了链表的基本操作,如数据增加、获取集合个数、空集判断、数据返回、根据索引获取和修改数据等。此外,通过宠物商店和超市购物车的综合实战例子,展示了链表在实际问题中的应用。
摘要由CSDN通过智能技术生成

链表实现简介

链表的本质是一个动态的对象数组,它可以实现若干个对象的存储。
链表的基本定义:
在实际的开发之中对象数组是一项非常实用的技术,并且利用其可以描述出“多”方的概念,例如:一个人有多本书,则在人的类里面一定要提供有一个对象数组保存书的信息,但是传统的对象数组依赖于数组的概念,所以数组里面最大的缺点在于:长度是固定的,正是因为如此所以在实际的开发之中,传统的数组应用是非常有限的(数组的接收以及循环处理),但是如果要想进行灵活的数据保存,那么就必须自己来实现结构。
在这里插入图片描述
传统对象数组的开发操作依赖于脚标(索引)的控制,如果要想实现内容的动态维护,那么难度太高了,而且复杂度攀升,所以现在就可以发现,对于一成不动的数据可以使用对象数组来实现,但是对于可能随时变化的数据就必须实现一个可以动态扩充的对象数组。
所谓的链表实质性的本质是利用引用的逻辑关系来实现类似于数组的数据处理操作,以一种保存“多”方数据的形式,实现数组类似的功能。
在这里插入图片描述
通过分析可以发现,如果要想实现链表处理,那么需要一个公共的结构,这个结构可以实现数据的保存以及下一个连接的指向,为了描述这样的逻辑,可以把每一个存储理解为一个节点,但是此时应该准备出一个节点类,但是这个节点类可以保存有各种数据类型的数据。
在这里插入图片描述
虽然已经清楚了需要通过Node节点来进行数据的保存,但是毕竟这里面需要牵扯到节点的引用处理关系,那么这个引用处理关系是由使用者控制吗?
范例:直接操作Node很麻烦

class Node<E> {
   
	private E data ;
	private Node next ;
	public Node(E data){
   
		this.data = data ;
	}
	public E getData(){
   
		return this.data ;
	}
	public void setNext(Node<E> next){
   
		this.next = next ;
	}
	public Node getNext(){
   
		return this.next ;
	}
}
public class StringDemo {
   
	public static void main(String args[]){
    
		Node<String> n1 = new Node<String>("火车头") ;
		Node<String> n2 = new Node<String>("车厢一") ;
		Node<String> n3 = new Node<String>("车厢二") ;
		Node<String> n4 = new Node<String>("车厢三") ;
		Node<String> n5 = new Node<String>("车厢四") ;
		n1.setNext(n2) ;
		n2.setNext(n3) ;
		n3.setNext(n4) ;
		n4.setNext(n5) ;
		print(n1) ;
	}
	public static void print(Node<?> node){
   
		if (node != null){
   	// 有节点
			System.out.println(node.getData()) ;
			print(node.getNext()) ;	// 递归调用
		}
	}
}

在这里插入图片描述
这样肯定不可能,所以应该有一个专门的类来进行节点的配置。因为真实的使用者实际上关心的只是数据的存储与获取,所以现在应该重新对Node类进行包装处理。
在这里插入图片描述

数据增加:public void add(E e)

通过之前的分析可以发现在进行链表操作的过程之中为了避免转型的异常应该使用泛型,同时也应该设计一个链表的标准,同时具体实现该接口的时候还应该通过Node类做出节点的关系描述。
范例:基本结构

interface ILink<E> {
   	// 设置泛型避免安全隐患
	public void add(E e) ;
}
class LinkImpl<E> implements ILink<E> {
   
	private class Node {
   	// 保存节点的数据关系
		private E data ;	// 保存的数据
		private Node next ;		// 保存下一个引用
		public Node(E data){
   	// 有数据的情况下才有意义
			this
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值