数据结构1——线性表链式存储 java
2016-06-25 09:23
513 查看
之前写过一次单链表的实现,但是后续翻看的时候觉得描述的不是特别好,就翻了下源码,重新整理了一下,bty:看源码真实天了噜,太神奇了。
——————————————————————————————————————————————————————————————————————
1. 程序实现功能
<span style="font-size:14px;"> public void add(E data) //添加元素
public void add(int index,E element)//在指定的索引处添加元素
public Node<E> get(int index)//获得某个节点
public E remove(int index)//删除指定位置元素,返回删除的元素 </span>
2. 抽象节点类
<span style="font-size:14px;"> class Node<E> {
E item;
Node<E> next;
Node( E element, Node<E> next) {
this.item = element;
this.next = next;
}
} </span>
由数据元素和下一个结点的地址构成
3.LinkedList类实现
类中有三个private成员以及默认构造函数,分别为
<span style="font-size:14px;"> private Node<E> first;//头节点
private Node<E> last;//尾节点
private int size = 0;//大小
public LinkedList() {
}</span> 辅助方法:向链表头尾添加元素以及边界判断抛异常
——————————————————————————————————————————————————————————————————————
1. 程序实现功能
<span style="font-size:14px;"> public void add(E data) //添加元素
public void add(int index,E element)//在指定的索引处添加元素
public Node<E> get(int index)//获得某个节点
public E remove(int index)//删除指定位置元素,返回删除的元素 </span>
2. 抽象节点类
<span style="font-size:14px;"> class Node<E> {
E item;
Node<E> next;
Node( E element, Node<E> next) {
this.item = element;
this.next = next;
}
} </span>
由数据元素和下一个结点的地址构成
3.LinkedList类实现
类中有三个private成员以及默认构造函数,分别为
<span style="font-size:14px;"> private Node<E> first;//头节点
private Node<E> last;//尾节点
private int size = 0;//大小
public LinkedList() {
}</span> 辅助方法:向链表头尾添加元素以及边界判断抛异常
<span style="font-size:14px;">//向链表末尾添加元素 void linkLast(E e) { final Node<E> l = last; final Node<E> newNode = new Node<>( e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; } //向链表头部添加元素 void linkBefore(E e, int index) { Node<E> prev = null; final Node<E> newNode = new Node<>( e, get(index)); if(index==0){ first = newNode; }else{ prev = get(index-1); prev.next=newNode; } size++; } private String outOfBoundsMsg(int index) { return "Index: " + index + ", Size: " + size; } private void checkPositionIndex(int index) { if (!isPositionIndex(index)) throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } private boolean isPositionIndex(int index) { return index >= 0 && index <= size; }</span>核心方法
<span style="font-size:14px;">/* 添加元素即向链表尾追加元素,需判断是否超出已有索引值 */ public void add(E data) { linkLast(data); } /*在指定的索引处添加元素*/ /*添加处刚好为最后一个,即=add()添加至末尾*/ /*添加到某元素之前*/ public void add(int index,E element){ checkPositionIndex(index); if (index == size) linkLast(element); else linkBefore(element, index); } /* 获得某个节点 */ public Node<E> get(int index) { checkPositionIndex(index); Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } /* 删除指定位置元素,返回删除的元素 */ /*需判断是否头结点*/ /*不是头结点则需要根据当前结点的前一个结点及后续结点进行操作*/ public E remove(int index) { Node<E> x = get(index); E element = x.item; Node<E> next = x.next; Node<E> prev = null; if(index==0){ first = next; } else{ prev = get(index-1); prev.next=next; } x.item = null; size--; return element; } public int size(){ return size; }</span>至此,链表线性存储已经完成。
相关文章推荐
- 数据结构上机实验之顺序查找(sdut_2040)
- 数据结构实验之查找六:顺序查找(sdut_3378)
- 数据结构8.广义表
- 数据结构
- 数据结构与算法分析 学习笔记(二)
- java数据结构(四)——栈
- 剑指offer-数据结构:字符串(基础知识)
- 共同学习Java源代码--数据结构--ArrayList类(七)
- 剑指offer-数据结构:数组和指针(基础知识)
- vpp接口数据结构
- 树与二叉树
- 分布式系统的数据结构
- 复习(数据结构:java):线性表(数组):基础类设计
- 接口缓存不能放置在静态的数据结构存储
- 算法之路(一)----求最大子序列
- 数据结构与算法简记:选择排序
- 利用栈解析算术表达式
- 数据结构之链表和递归
- python微教程---第一季(第三集)---- 数据结构(列表)
- Nginx 模块自主开发四: 模块数据结构