算法之单向链表
-
什么是链表?
- 链表是一种思维,并非物理层,链表是一节一节的存储,每一节都保存有一个对象和下一个链表的位置,由头字段也就是hade确定位置,来指向之后的一种数据结构。
-
链表的作用?
-
链表可以将打乱的数据以正向的方式返回给别人。
-
作用用来增删查改,因为数组的检索效率很高,但是增删改的速度并没有那么快,因此有链表的由来,每一个链表指向另一个链表的位置节省时间。
-
-
链表如何实现?
package com.xxx; public class linkdlist { public int no ; public String name; public String noname; public linkdlist next ; public linkdlist(int no, String name, String noname) { this.no = no; this.name = name; this.noname = noname; } @Override public String toString() { return "linkdlist{" + "no=" + no + ", name='" + name + '\'' + ", noname='" + noname + '\'' + '}'; } } class read{ //首先链表的头字段不能改变就是 linkdlist hade = new linkdlist(0,"",""); //创建添加方法 //创建遍历的方法 public void list(){ //指针指向后一个 linkdlist lend = hade.next; if (lend == null) { return; } while(true){ if (lend == null) { break; } System.out.println(lend); lend = lend.next; } } public void newadd(linkdlist node){ //创建指针 linkdlist lend = hade; boolean fid = false; while(true){ //指针在链表最后 if (lend.next == null) { break; } //找到下一个节点的编号信息,与传过来的信息相比较,如果大于了那么就证明,这个传入的编号比链表里面的数组小,可以放在左边 if (lend.next.no>node.no){ break; }else if(lend.next.no == node.no) { fid=true; break; } lend = lend.next; } if(fid){ System.out.println("有相同的编号请重新输入"); return; }else { node.next=lend.next; lend.next=node; } } }
实现类
package com.xxx; public class test { public static void main (String args[]){ read read = new read(); linkdlist l1 = new linkdlist(1,"李白","打野"); linkdlist l2 = new linkdlist(2,"上官婉儿","中单"); linkdlist l3 = new linkdlist(3,"瑶","辅助"); linkdlist l4 =new linkdlist(4,"孙尚香","射手"); linkdlist l5 =new linkdlist(5,"苏烈","上单"); read.newadd(l3); read.newadd(l2); read.newadd(l1); read.newadd(l5); read.newadd(l4); read.list(); } }
实现结果
可以看到,我们添加的顺序是打乱的,但是最后的顺序,却能依次排好,这就是链表的功能。