数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)
创建结点类,链表类,测试类
import java.lang.Object;
//结点node=数据date+指针pointer
public class Node {
Object iprop;
public Object getIprop(int i){
switch(i){
case 1:iprop=num;break;
case 2:iprop=name;break;
case 3:iprop=score;break;
}
return iprop;
}
//数据data
Object num,name,score;
//指针pointer
Node next;
public Node(Object obj1,Object obj2,Object obj3){
num=obj1;
name=obj2;
score=obj3;
}
public Node(){ }
}
//链表List=头结点head+尾结点tail+链表名Lname
public class List { // 头结点head
Node head;
// 尾结点tail
Node tail;
// 链表名Lname
String Lname;
int length=0; // 初始化链表时,里面没有结点,为空链表
public List(String str) {
head = tail = null;
Lname = str;
} public List() {
head = tail = null;
Lname = "List";
} // 头插法
public List appendToFront(Node n) { if(this.head==null){
head=tail=n;
length++;
//n.next=null;
}else{ n.next=head;
head=n;
length++;
}
return this; } // 尾插法
public List appendToTail(Node n) {
//
if(head!=null){
tail.next=n;
tail=n;
}else{
head=tail=n;
//n.next=null;
}
return this; } // 插入结点到第i个结点之后
public void insert(Node n, int i) { } // 插入结点到第j个data为obj的结点之后
public void insert(Node n, Object obj, int i) { } // 遍历链表
public void visitAll() {
//创建pointer p
Node p=new Node();
//拿到头结点的引用
p=head;
//顺序拿到结点做展示
for(;p!=null;){
System.out.println("num:"+p.num+"name:"+p.name+"score:"+p.score);
p=p.next;
}
} // 拿到第i个结点
public Node getNode(int i) {
//定义浏览指针p
Node p=new Node(); //定义循环参数j
int j=1; //循环结点
p=this.head;
if(p!=null)
for(;j<i;j++){ p=p.next;
if(p==null){System.out.println("p==null遍历结束,无此结点");break;} }
return p;
} // 拿到第j个data为obj的结点
public Node getNode(Object obj, int j) {
//拿到头结点的引用
Node p=head;
//循环数据并比较data
for(;p!=null;){ for(int i=0;i<j;i++){
Object prop=p.getIprop(j);
if(prop!=null&&prop.equals(obj)) {return p;}
}
p=p.next;
}
return p;
} // 删除第i个结点
public void delete(int i) {
//找到i结点 } // 删除第j个data为obj的结点
public void delete(Object obj, int j) { } // 删除全部
public void deleteAll() { }
// 链表的排序:list中的node按第j个data的值进行排序
// >>直接插入法
public List listSort(int j){ //循环当前链表的结点对象,找到第j个data值
Node p=head;//想象head 下标为0,head.next依次类推
int[] datas=new int[this.length];
for(int i=0;p!=null;i++){
Object prop=p.getIprop(j);//
if(prop!=null){
System.out.println("循环到下标为"+i+"的结点");
datas[i]=Integer.parseInt(prop.toString()); }
p=p.next;
}
//冒泡排序
Node pre=null; for(int i=0;i<datas.length-1;i++){
pre=null;
p=head; for(int k=0;k<datas.length-i-1;k++){ if(datas[k]>datas[k+1]){ int temp=datas[k];
datas[k]=datas[k+1];
datas[k+1]=temp; Node tempNode=p.next.next; pre.next=p.next;
p.next.next=p;
p.next=tempNode; pre=pre.next; }else{
//拿到前驱结点
pre=p;
p=p.next;
}
}
} return this;
}
public static void main(String[] arg){
int[] datas={4,2,5,6,7,3,1,0,9,8};
//冒泡排序法
for(int i=0;i<datas.length-1;i++){
for(int j=0;j<datas.length-(i+1);j++){
if(datas[j]>datas[j+1]){
int temp=datas[j];
datas[j]=datas[j+1];
datas[j+1]=temp;
}
}
}
for(int i=0;i<datas.length;i++){
System.out.println(datas[i]);}
} }
public class TestList {
public static void main(String[] arg){
Node n0=new Node(125,"n0","91");
Node n1=new Node(123,"n1","98");
Node n2=new Node(121,"n2","99");
Node n3=new Node(125,"n3","96");
Node n4=new Node(125,"n4","95");
Node n5=new Node(125,"n5","97");
Node n6=new Node(125,"n6","93");
Node n7=new Node(125,"n7","94");
Node n8=new Node(125,"n8","92");
Node n9=new Node(125,"n9","90");
List f1=new List("f1List");
//头插法
f1.appendToFront(n0).appendToFront(n1).appendToFront(n2).appendToFront(n3)
.appendToFront(n4).appendToFront(n5).appendToFront(n6).appendToFront(n7)
.appendToFront(n8).appendToFront(n9);
//拿到排好序的链表f2;
f1.listSort(3).visitAll();
}
}
冒泡排序用处真大
心得:
>>对于指针(引用)的运用需要注意如下:
Node p=f1List.head;
p=p.next;//让指针直接指向(即直接p=)新引用对象(p.next),不会引起原被引用对象(head)的任何变化
Node p=f1List.head;
p.next=p;//调用原被引用对象的属性后,将会引起原被引用对象(head)的属性相应的变化
数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)的更多相关文章
- python中的数据结构-链表
一.什么是链表 链表是由一系列节点构成,每个节点由一个值域和指针域构成,值域中存储着用户数据,指针域中存储这指向下一个节点的指针.根据结构的不同,链表可以分为单向链表.单向循环链表.双向链表.双向循环 ...
- C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
//将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...
- C# 数据结构--单链表
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...
- [C++] 数据结构应用——链表
C++ 数据结构应用--链表 代码已经封装成class啦,方便使用. 头文件:Linklist.h #include <iostream> /*********************** ...
- python算法与数据结构-单链表(38)
一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...
- 【PHP数据结构】链表的相关逻辑操作
链表的操作相对顺序表(数组)来说就复杂了许多.因为 PHP 确实已经为我们解决了很多数组操作上的问题,所以我们可以很方便的操作数组,也就不用为数组定义很多的逻辑操作.比如在 C 中,数组是有长度限制的 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- linux内核数据结构之链表
linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...
- 数据结构之链表-链表实现及常用操作(C++篇)
数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...
随机推荐
- js中基本事件的总结,onclick、onblur、onchange等
js中的基本事件总结: 特定的场景下发生的一个动作:事件:事件=函数(),事件发生会触发函数执行. 属性 当以下情况发生时,出现此事件 FF N IE onabort 图像加载被中断 1 3 4 on ...
- Global Illumination
[Global Illumination] Global Illumination (GI) is a system that models how light is bounced off of s ...
- Android Studio: Application Installation Failed
[Android Studio: Application Installation Failed] 参考:http://stackoverflow.com/questions/32718044/and ...
- 使用ddns搭建免费服务器
[使用ddns搭建免费服务器] 第一步 tplink路由器提供了ddns服务,它为用户免费提供一个子tpddns.cn下的子域名,映射到你的路由器上.当启用后,只在要能接入互联网的地方,都能过此域名, ...
- SpringMVC点滴(1)
在使用springMVC很久,却一直没有总结其中的一些便捷配置和功能,恰好有空,加以总结 Servlet 3之后,在web.xml中加入async的支持,从而实现异步请求,需要在servlet和fil ...
- web.xml中<security-constraint>和四种认证类型
https://blog.csdn.net/lisheng19870305/article/details/40819481 sztc开发中http请求一直发送后无响应,通过soapui定位异常信息为 ...
- python -- 初始函数 函数的定义,函数的返回值以及函数的参数
1.什么是函数,函数的定义及语法 2.函数的返回值 3.函数的参数 一.函数的定义及语法 函数的定义:定义了一个动作或者功能,是对功能的封装 语法: def 函数名( 形参列表 ): ...
- JMeter学习(十四)JMeter函数学习(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter函数是一些能够转化在测试树中取样器或者其他配置元件的域的特殊值.一个函数的调用就像这样:${_functio ...
- java学习笔记整理
java知识模块:1.基础知识,数组,字符串,正则表达式:2.类和对象,接口,继承,多态,抽象类,内部类,泛型,java常用类库.3.异常处理: 4.IO: 5.事件处理: 6.多线程: 7 ...
- hbase 定时备份
#!/bin/bash#su - hdfs <<EOFdata1=`date "+%Y%m%d%H%M%S"`data2="/user/news/hbase_ ...