新手的数据结构练习——可能是线性表
来源:互联网 发布:网络连接怎么设置 编辑:程序博客网 时间:2024/04/29 00:04
作为学习数据结构的新手,用JAVA练习写了一个链表,想问问各位dalao都有什么不足?
package dataStructureSamples;import java.io.Flushable;import java.util.Iterator;/** * 这可能是一个链表。 * @author Miko * * @param <T> 设定泛型以支持存储各种数据。 */public class LinkList<T> implements Iterable<T>, Flushable{ /** * <p>链表现长度,每当一个新元素被添加进来,这个值就会加1,每当一个元素被删除,值就会减1。</p> * @see <code>{@link #addElement(T t)}</code> * @see <code>{@link #removeElements(int index)}</code> */ public int listLength = 0; /** * 链表的节点。 * @author Miko * * @param <E> 链表的节点当然也需要泛型。 */ private class Node<E> implements Iterator<T>{ /** * 节点元素。 */ private transient E item; /** * 上一个节点。 */ private transient Node<E> prev; /** * 下一个节点。 */ private transient Node<E> next; /** * 伪指针。 */ private transient Node<E> pointer; /** * 空构造方法 */ public Node() {} /** * 构造方法。 * @param item * @param prev * @param next */ public Node(E item,Node<E> prev, Node<E> next) { this.item = item; this.prev = prev; this.next = next; pointer = new Node<E>(); pointer.setNext(this); } public E getItem() { return item; }// public void setItem(E item) {// this.item = item;// } public Node<E> getPrev() { return prev; } public void setPrev(Node<E> prev) { this.prev = prev; } public Node<E> getNext() { return next; } public void setNext(Node<E> next) { this.next = next; } @Override public boolean hasNext() { return (pointer.next != null); } @SuppressWarnings("unchecked") @Override public T next() { pointer = pointer.next; return (T) pointer.item; } /** * 销毁该节点。 */ public void destroy(){ this.prev = null; this.next = null; this.item = null; try { super.finalize(); System.out.println("节点销毁。"); }catch(Throwable e) { System.out.println("对象无需销毁。"); } } @Override protected void finalize() { try { super.finalize(); System.out.println("节点对象销毁。"); }catch(Throwable e) { System.out.println("对象无需销毁。"); } } } private Node<T> first; private Node<T> current = new Node<T>(); private Node<T> last; /** * 增加链表的元素,会将<code>{@link #listLength}</code>增加1。 * @param t * @return flag */ public int addElement(T t) { if(listLength == 0) { Node<T> self = new Node<T>(t, null, null); first = self; last = self; }else { Node<T> self = new Node<T>(t, last, null); last.setNext(self); last = self; } listLength++; return 1; } /** * 删除某个元素,会将<code>{@link #listLength}</code>减少1。 * @param index 要删除的元素索引。 * @return flag FLAG。 * @throws Throwable */ public int removeElements(int index) throws Throwable { if(listLength == 0) { throw new NullPointerException("不能删除空链表中的元素。"); }else if(listLength <= index) { throw new Exception("删除越界。"); }else { Node<T> temp = first; for(int i = 0;i < index; i++) { temp = temp.getNext(); } temp.getPrev().setNext(temp.getNext()); temp.getNext().setPrev(temp.getPrev()); temp.destroy(); temp = null; } listLength--; try { super.finalize(); System.out.println("对象销毁。"); }catch(Throwable e) { System.out.println("对象无需销毁。"); } return 1; } /** * 获取随机存储的元素。 * @param index 要获取的元素索引。 * @return element * @throws Exception */ public T getElement(int index) throws Exception{ T t = null; if(listLength == 0) { throw new NullPointerException("无法从空链表中查询到元素。"); }else if(listLength <= index) { throw new Exception("获取越界。"); }else { Node<T> temp = first; for(int i = 0;i < index;i++) { temp = temp.getNext(); } t = temp.getItem(); current = temp; temp = null; } return t; } @Override public Iterator<T> iterator() { current = first; return current; } @Override public void flush() { for(int i = 0;i < listLength;i++) { Node<T> temp = last; last = last.getPrev(); temp.destroy(); temp = null; } listLength = 0; System.out.println("表已清空。"); try { super.finalize(); System.out.println("对象销毁。"); }catch(Throwable e) { System.out.println("对象无需销毁。"); } } @Override protected void finalize() { try { super.finalize(); System.out.println("对象销毁。"); }catch(Throwable e) { System.out.println("对象无需销毁。"); } }}
阅读全文
0 0
- 新手的数据结构练习——可能是线性表
- 新手数据结构练习——二叉树
- 002数据结构练习-线性表
- 数据结构——线性表(顺序是先)
- 数据结构—线性表
- 数据结构—线性表
- 数据结构—线性表
- 数据结构—线性表
- 数据结构——线性表的插入
- 数据结构——线性表的删除
- 数据结构——线性表的学习
- 数据结构——线性表的实现
- 线性表的增删——数据结构
- [数据结构]线性结构——线性表
- 【数据结构练习】基于线性结构的队列
- 数据结构——线性表
- 数据结构——线性表
- 数据结构——线性表
- LeetCode 7.Reverse Integer
- C语言实现静态顺序表
- Elasticsearch 5.x 安装与配置
- cave
- 中山长江考科目一
- 新手的数据结构练习——可能是线性表
- 17-CSS3 高级技巧 精灵图 字体图标 滑动门
- RxJava 源码解析 —— BlockingObservable
- fiddler代理本地前端资源
- “男性更易患流感”这种说法或许是正确的!
- 面向接口编程
- Magento后台单一产品删除图片添加全选和全不选选项
- 有序的map LinkedHashMap
- ftp协议 nfs协议 smb 协议 比较