博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)
阅读量:4681 次
发布时间:2019-06-09

本文共 5224 字,大约阅读时间需要 17 分钟。

创建结点类,链表类,测试类
1 import java.lang.Object; 2 //结点node=数据date+指针pointer 3 public class Node { 4     Object iprop; 5     public Object getIprop(int i){ 6     switch(i){ 7     case 1:iprop=num;break; 8     case 2:iprop=name;break; 9     case 3:iprop=score;break;10     }11     return iprop;12     }13    //数据data14     Object num,name,score;15     //指针pointer16     Node next;17     public Node(Object obj1,Object obj2,Object obj3){18         num=obj1;19         name=obj2;20         score=obj3;21     }22     public Node(){23     24     }25 }
View Code
1 //链表List=头结点head+尾结点tail+链表名Lname  2 public class List {  3   4     // 头结点head  5     Node head;  6     // 尾结点tail  7     Node tail;  8     // 链表名Lname  9     String Lname; 10     int length=0; 11  12     // 初始化链表时,里面没有结点,为空链表 13     public List(String str) { 14         head = tail = null; 15         Lname = str; 16     } 17  18     public List() { 19         head = tail = null; 20         Lname = "List"; 21     } 22  23     // 头插法 24     public List appendToFront(Node n) { 25          26         if(this.head==null){ 27            head=tail=n; 28            length++; 29            //n.next=null; 30         }else{ 31              32             n.next=head; 33             head=n; 34             length++; 35         } 36         return this; 37  38     } 39  40     // 尾插法 41     public List appendToTail(Node n) { 42         // 43         if(head!=null){ 44            tail.next=n; 45            tail=n; 46         }else{ 47             head=tail=n; 48             //n.next=null; 49         } 50         return this; 51  52     } 53  54     // 插入结点到第i个结点之后 55     public void insert(Node n, int i) { 56  57     } 58  59     // 插入结点到第j个data为obj的结点之后 60     public void insert(Node n, Object obj, int i) { 61  62     } 63  64     // 遍历链表 65     public void visitAll() { 66        //创建pointer p 67        Node p=new Node(); 68        //拿到头结点的引用 69        p=head; 70        //顺序拿到结点做展示 71        for(;p!=null;){ 72            System.out.println("num:"+p.num+"name:"+p.name+"score:"+p.score); 73            p=p.next; 74        } 75     } 76  77     // 拿到第i个结点 78     public Node getNode(int i) { 79         //定义浏览指针p 80         Node p=new Node(); 81          82         //定义循环参数j 83         int j=1; 84          85         //循环结点 86         p=this.head; 87         if(p!=null) 88         for(;j
>直接插入法130 public List listSort(int j){131 132 //循环当前链表的结点对象,找到第j个data值133 Node p=head;//想象head 下标为0,head.next依次类推134 int[] datas=new int[this.length];135 for(int i=0;p!=null;i++){136 Object prop=p.getIprop(j);//137 if(prop!=null){138 System.out.println("循环到下标为"+i+"的结点");139 datas[i]=Integer.parseInt(prop.toString());140 141 }142 p=p.next;143 }144 //冒泡排序145 Node pre=null;146 147 for(int i=0;i
datas[k+1]){155 156 int temp=datas[k];157 datas[k]=datas[k+1];158 datas[k+1]=temp;159 160 161 Node tempNode=p.next.next;162 163 pre.next=p.next;164 p.next.next=p;165 p.next=tempNode;166 167 pre=pre.next;168 169 }else{170 //拿到前驱结点171 pre=p;172 p=p.next;173 }174 }175 }176 177 return this;178 }179 public static void main(String[] arg){180 int[] datas={4,2,5,6,7,3,1,0,9,8};181 //冒泡排序法182 for(int i=0;i
datas[j+1]){185 int temp=datas[j];186 datas[j]=datas[j+1];187 datas[j+1]=temp;188 }189 }190 }191 for(int i=0;i
View Code
1 public class TestList { 2     public static void main(String[] arg){ 3         Node n0=new Node(125,"n0","91"); 4         Node n1=new Node(123,"n1","98"); 5         Node n2=new Node(121,"n2","99"); 6         Node n3=new Node(125,"n3","96"); 7         Node n4=new Node(125,"n4","95"); 8         Node n5=new Node(125,"n5","97"); 9         Node n6=new Node(125,"n6","93");10         Node n7=new Node(125,"n7","94");11         Node n8=new Node(125,"n8","92");12         Node n9=new Node(125,"n9","90");13         14         15         List f1=new List("f1List");16         //头插法17         f1.appendToFront(n0).appendToFront(n1).appendToFront(n2).appendToFront(n3)18         .appendToFront(n4).appendToFront(n5).appendToFront(n6).appendToFront(n7)19         .appendToFront(n8).appendToFront(n9);20         21         22         //拿到排好序的链表f2;23         f1.listSort(3).visitAll();24         25         26         27         28     }29 30 }
View Code

冒泡排序用处真大

心得:

>>对于指针(引用)的运用需要注意如下:

        Node p=f1List.head;

        p=p.next;//让指针直接指向(即直接p=)新引用对象(p.next),不会引起原被引用对象(head)的任何变化

        Node p=f1List.head;
        p.next=p;//调用原被引用对象的属性后,将会引起原被引用对象(head)的属性相应的变化

转载于:https://www.cnblogs.com/kuiyeit/p/4692864.html

你可能感兴趣的文章
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
昨天用的流量有点多60M
查看>>
kafka中的消费组
查看>>
Golang的channel使用以及并发同步技巧
查看>>
【JDK源码分析】 String.join()方法解析
查看>>
【SICP练习】112 练习3.28
查看>>
python--注释
查看>>
前端资源链接 ...
查看>>
yum install ntp 报错:Error: Package: ntp-4.2.6p5-25.el7.centos.2.x86_64 (base)
查看>>
leetcode-Single Number-136
查看>>
CF715C Digit Tree
查看>>
二分法练习1
查看>>
QT 制作串口调试小助手----(小白篇)
查看>>
前端MVC实践之hellorocket——by张舒彤
查看>>
OptimalSolution(2)--二叉树问题(3)Path路径问题
查看>>
IPC 之 Messenger 的使用
查看>>
爱情八十六课,等得不是爱情
查看>>
企业网站建设流程
查看>>
数据库的显示、创建、使用 、用户授权管理及忘记root用户后重置密码
查看>>
ES5和ES6中的继承 图解
查看>>