数据结构学习笔记Day2-单链表(用java实现)

8 篇文章 0 订阅
3 篇文章 0 订阅

一、首先说一下线性表

1. 什么是线性表,线性表的逻辑特性?

1)有一个头(表头),有一个尾(表尾)
2)表头与表尾之间的元素有且只有一个前驱元素,有且只有一个后继元素

2.线性表有两种存储方式?

顺序表和链表

3.顺序表和链表的区别?

1)顺序表是一边连续的存储空间
在这里插入图片描述
链表是一片散列的存储空间
在这里插入图片描述
2)顺序表只要知道表头就可以快速查询到其他任何位置的元素。
因为顺序表是连续排列的,比如我们知道了1号元素的位置,要想查6号元素的位置,只需将1号元素的位置加5个距离就能立刻知道6号元素的位置。而链表则不行,在链表中,想要知道某个元素的位置,必须通过该元素的上一个元素的指针去查。
3)链表利于数据的插入和删除操作,而顺序表则不利于插入和删除操作。
在顺序表中我们若删除一个元素,则需将该元素后面的所有元依此前移一位,而链表只需将插入位置的前一位元素的指针指向自己,将自己的指针指向插入位置的后一位元素即可。
4)因为链表中会有一部分空间用来存储指针,所以空间利用率会比顺序表稍差一些。

二、用java实现简单的链表(单链表的插入,删除操作)

1.首先,链表中的节点是一个单独的对象,我们因该将其抽离出来。

一个节点包括两个属性:数据(用于存放数据),和指针(指向下一个节点),所以创建节点类如下:

package myStudy.dataStructure.day2;

/**
*
* @description 节点类
* @author shenrenfeng
* @date 2018年11月4日 上午11:14:07
*
*/
public class Node {

	private int data;// 节点数据
	private Node next;// 节点指针,指向下一个节点
	
	public Node(int data) {
		this.data = data;
		this.next = null;
	} 
	
	public int getData() {
		return data;
	}
	public void setData(int data) {
		this.data = data;
	}
	public Node getNext() {
		return next;
	}
	public void setNext(Node next) {
		this.next = next;
	}
	
}

2、创建单链表类

单链表至少包括一个属性:头节点

package myStudy.dataStructure.day2;

/**
*
* @description 单链表
* @author shenrenfeng
* @date 2018年11月4日 上午11:16:23
*
*/
public class SinglyLinkedList {
	
	private Node firstNode;// 头节点
	
	/**
	 * 插入节点(在头节点之后插入)
	 * @param data
	 */
	public void insert(int data) {
		Node node = new Node(data);
		if(firstNode == null) {
			firstNode = node;
		} else {
			node.setNext(firstNode.getNext());
			firstNode.setNext(node);
		}
	}
	
	/**
	 * 删除节点(删除头节点)
	 * @return 返回被删除的头节点
	 */
	public Node delete() {
		Node deletedNode = firstNode;
		firstNode = firstNode.getNext();
		return deletedNode;
	}
	
	/**
	 * 展示链表数据
	 */
	public void showList() {
		Node currentNode = firstNode;
		while(currentNode != null) {
			System.out.print(currentNode.getData());
			System.out.print(" ");
			currentNode = currentNode.getNext();
		}
	}

	public Node getFirstNode() {
		return firstNode;
	}

	public void setFirstNode(Node firstNode) {
		this.firstNode = firstNode;
	}

}

3、进行测试

package myStudy.dataStructure.day2;

/**
*
* @description 测试单链表
* @author shenrenfeng
* @date 2018年11月4日 上午11:39:50
*
*/
public class Test {

	public static void main(String[] args) {
		SinglyLinkedList list = new SinglyLinkedList();
		list.insert(9);
		list.insert(2);
		list.insert(4);
		list.insert(8);
		list.insert(5);
		list.showList();
		System.out.println();
		list.delete();
		list.delete();
		list.delete();
		list.showList();
	}
	
}

测试结果:
在这里插入图片描述
结果说明:
因为一个插入的作为头节点,所以9在最前面,而后面每次是从头节点之后插入的,类似倒序,所以插入顺序虽然为9 2 4 5 8 输出结果却为9 5 8 4 2
删除是直接将头节点删除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值