java数据结构(单链表)

今天主题是单链表
前文已经介绍了关于线性结构的顺序存储结构实现,本文主要是关于线性结构的链式存储结构实现。
链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的。相比顺序结构,链式存储结构更依赖于数据元素之间的关系。你可以在任意位置放置你的数据元素,但是你要保证正常指向它的下一个元素
在这里插入图片描述

1.链表的结点
一个链表需要有结点,包括元素,以及下一个结点的信息
注意:链表的起点并不是第一个结点,而是头指针,头指针不存储元素,但是可以存储线性表的长度等公共元素
2.链表的读取
链表的读取,需要从第一个结点开始,若无查找到数据则移动到下一个结点,直到找到需要数据。
3.链表的插入
比如我我们需要在1和3直接插入2这个数据元素,则需要改变他们的前后关系,如图
在这里插入图片描述
插入前
在这里插入图片描述
插入后
4.链表的删除
删除与插入同理,需要改变对应关系

在这里插入图片描述
删除前

在这里插入图片描述
删除后

在实际操作中,删除后应当销毁对象,在java里面可交由jvm自动回收

下面是实现过程,
首先创建结点类

public class Node {

	
	Object element;
	Node next;
	
	public Node(Node nextval) {
		// TODO Auto-generated constructor stub
		next = nextval;
	}
	
	public Node(Node nextval,Object object) {
		// TODO Auto-generated constructor stub
		next = nextval;
		element = object;
	}

	public Object getElement() {
		return element;
	}

	public void setElement(Object element) {
		this.element = element;
	}

	public Node getNext() {
		return next;
	}

	public void setNext(Node next) {
		this.next = next;
	}

	@Override
	public String toString() {
		return element.toString();
	}
	
	
}

然后是链表

public class LinkList {

	Node head;
	Node current;
	int size;
	
	LinkList(){
		head = current =new Node(null);
		size =0;
	}
	
	public Object getElem(int i){
		Node p =  head;
		int j = 1;
		while (j<i+1) {
			p =  p.next;
			++j;
			//System.out.println(p.element);
		}
		if(p==null||j>i+1) return null;
		return p.element;
	}
	
	public boolean insert(int i ,Object e){
		Node p =  head;
		int j = 1;
		while (j<i) {
			p =  p.next;
			++j;
			
		}
		if(p==null||j>i) return false;
		Node s  =  new Node(null);
		s.element = e;
		s.next = p.next;
		p.next = s;
		size++;
		return true;
	}
	
	
	public boolean delete(int i ){
		Node p =  head;
		int j = 1;
		while (j<i) {
			p =  p.next;
			++j;
			
		}
		if(p==null||j>i) return false;
		p.next = p.next.next;
		size--;
		return true;
	}
	
	public void showall(){
		Node p =  head;

		while (p.next!=null) {
			p =  p.next;
			System.out.print(p.element+" ");
		}
		System.out.println();
	}
}

进行测试


public class test {
	public static void main(String[] args) throws Exception {
	
		LinkList list = new LinkList();
		System.out.println(list.insert(1, 44));
		System.out.println(list.insert(2, 42));
	
		list.showall();
		System.out.println(list.delete(1));
		System.out.println(list.getElem(1));
	
		list.showall();

	}
}

那么什么情况下需要使用顺序线性表,什么情况下使用链表呢?
如果数据需要频繁查找,那么需要使用顺序线性表
如果需要频繁插入删除,建议使用链表
当元素个数未知时,推荐使用链表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值