数据结构(一):顺序表
2015-01-07 11:17
92 查看
1. 线性表
分为顺序表和链表
顺序表用数组实现,插入和删除会引起大量元素的移动, 链表用包含Node内部类的LinkedList类实现, 用引用代替指针
分为顺序表和链表
顺序表用数组实现,插入和删除会引起大量元素的移动, 链表用包含Node内部类的LinkedList类实现, 用引用代替指针
public class SingleLinkedList<E> implements List<E>{ private Node head; private int length = 0; public SingleLinkedList(){ this.head = new Node(); //初始化头指针(data=null,prior=null) } @Override public void clear() { for(Node node = head.next;node != null;){ Node x = node.next; node.data = null; node.next = null; node = x; } } @Override public int indexOf(E e) throws Exception { if(length ==0) throw new Exception("链表为空"); int index = 0; Node n = head.next; while(n!=null && n.data != e){ index++; n = n.next; } if (n!=null) return index; return -1; } @Override public void insert(int index, E e) throws Exception { if (index>length) throw new Exception("超出链表范围"); int j = 0; for(Node n = head;n!=null;){ if(j!=index){ n = n.next; j++; }else{ Node newNode = new Node(e); //创建新节点 newNode.next = n.next; n.next = newNode; break; } } length ++; } @SuppressWarnings("unchecked") @Override public E get(int index) { if (index > length-1) throw new RuntimeException("超出链表范围"); Node n = head.next; for(int j=0;j<=length-1;j++){ if(j == index){ return (E)n.data; }else{ n = n.next; } } return null; } @Override public boolean isEmpty() { return head.next == null; } @Override public int length() { Node n = head.next; int length = 0; while(n != null){ n = n.next; length ++; } return length; } @Override public void remove(int index) throws Exception { if (index>length-1) throw new Exception("超出链表范围"); int j = 0; for(Node n = head;n!=null;){ if(j!=index){ n = n.next; j++; }else{ Node node = n.next; n.next = node.next; node = null; break; } } length --; } @Override public void show() { Node n = head.next; while(n != null){ System.out.print(n.data+","); n = n.next; } System.out.println(); } class Node{ private Object data; private Node next; public Node(){ // 用与初始化head指针 this.data = null; this.next = null; } public Node(Object o){ //用于构造新节点 this.data = o; this.next = null; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } } public static void main(String[] args) throws Exception { SingleLinkedList<Integer> ss = new SingleLinkedList<Integer>(); ss.insert(0, 1); ss.insert(1, 2); System.out.println(ss.length); System.out.println(ss.get(1)+"sssssss");; ss.remove(1); ss.show(); } }
相关文章推荐
- java 数据结构--顺序表
- 基本数据结构:顺序表
- java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能
- 基本数据结构(C#实现):顺序表
- 数据结构-顺序表和链表的基本操作
- 数据结构 学习笔记之:线性表——顺序表、静态链表、动态链表(单链表、双链表、单循环链表、双循环链表,链式栈、链式队列)——基础概念大扫盲!
- 小楼一阁的数据结构学习笔记(二、顺序表)
- 【数据结构】-线性表-顺序表-1324: 算法2-2:有序线性表的有序合并
- 数据结构的Java实现——顺序表
- 第3周SHH数据结构—【项目4-顺序表应用问题(2)】
- 简单的数据结构——顺序表
- 数据结构 第二章 顺序表应用举例——大整数求和
- 数据结构之三元组顺序表实现稀疏矩阵运算(参考整理严蔚敏数据结构)
- 2015年大二上-数据结构-顺序表(2)-删除元素
- 数据结构 之 线性表中的顺序表
- 基本数据结构:顺序表
- 数据结构第八周项目——顺序表算法
- 数据结构 【实验1 顺序表基本操作】
- 数据结构的基本概念 与顺序表和链表的区别
- 数据结构C#类库(1)——顺序表