Java数据结构(链表篇)

来源:互联网 发布:至上励合淘宝网店老婆 编辑:程序博客网 时间:2024/05/22 14:40

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。


连接点:

package ch04Link;public class Link {// 数据域private long data;// 指针域private Link next;// 构造函数public Link(long data) {this.data = data;}public long getData() {return data;}public void setData(long data) {this.data = data;}public Link getNext() {return next;}public void setNext(Link next) {this.next = next;}}

测试连接点:

package ch04Link;public class TestLink {public static void main(String[] args) {Link link1 = new Link(10);Link link2 = new Link(50);Link link3 = new Link(20);Link link4 = new Link(100);link1.setNext(link2);link2.setNext(link3);link3.setNext(link4);System.out.println(link1.getData());System.out.println(link1.getNext().getData());System.out.println(link1.getNext().getNext().getData());System.out.println(link1.getNext().getNext().getNext().getData());}}

链表:

package ch04Link;/** * 链表:核心思想:链表中只包含一个数据项,即对第一个连接点的引用 * @author hadoop * */public class LinkList {private Link first;// 插入public void insert(long value){Link link = new Link(value);if(first == null)first = link;else{link.setNext(first);first = link;}}// 打印链表public void display(){Link current = first;while(current != null){System.out.print(current.getData() + " ");current = current.getNext();}}// 查询链表 public Link find(long key){Link current = first;while(current.getData() != key){if(current.getNext() == null)return null;current = current.getNext();}return current;}// 插入节点到指定位置public void insert(long value, int pos){if(pos == 0)insert(value);else{Link current = first;for(int i = 0; i < pos - 1; i++)current = current.getNext();Link link = new Link(value);link.setNext(current.getNext());current.setNext(link);}}// 删除节点public void delete(long value){Link current = first;Link ago = first;while(current.getData() != value){if(current.getNext() == null)return;else{ago = current;current = current.getNext();}}if(current == first)first = first.getNext();elseago.setNext(current.getNext());}}

测试:

package ch04Link;public class TestLinkList {public static void main(String[] args) {LinkList linkList = new LinkList();linkList.insert(20);linkList.insert(80);linkList.insert(40);linkList.insert(60);linkList.display();System.out.println();System.out.println("找到节点,数据为:" + linkList.find(80).getData());linkList.insert(100, 0);linkList.display();System.out.println();linkList.delete(80);linkList.display();}}

比较链表和顺序表:

package ch04Link;import ch01Array.MyArray;public class Test {public static void main(String[] args) {// 构造链表long date1 = System.currentTimeMillis();LinkList linkList = new LinkList();for(int i = 0; i < 1000000; i++)linkList.insert(i);long date2 = System.currentTimeMillis();System.out.println(date2 - date1);// 构造顺序表long date3 = System.currentTimeMillis();MyArray myArray = new MyArray(1000000 + 1);for(int i = 0; i < 1000000; i++)myArray.insert(i);long date4 = System.currentTimeMillis();System.out.println(date4 - date3);// 链表删除long date5 = System.currentTimeMillis();linkList.delete(60000);long date6 = System.currentTimeMillis();System.out.println(date6 - date5);// 顺序表删除long date7 = System.currentTimeMillis();myArray.delete(60000);long date8 = System.currentTimeMillis();System.out.println(date8 - date7);}}


原创粉丝点击