创建结点类,链表类,测试类
 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个数据属性排序(冒泡排序法)的更多相关文章

  1. python中的数据结构-链表

    一.什么是链表 链表是由一系列节点构成,每个节点由一个值域和指针域构成,值域中存储着用户数据,指针域中存储这指向下一个节点的指针.根据结构的不同,链表可以分为单向链表.单向循环链表.双向链表.双向循环 ...

  2. C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。

    //将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...

  3. C# 数据结构--单链表

    什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...

  4. [C++] 数据结构应用——链表

    C++ 数据结构应用--链表 代码已经封装成class啦,方便使用. 头文件:Linklist.h #include <iostream> /*********************** ...

  5. python算法与数据结构-单链表(38)

    一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  6. 【PHP数据结构】链表的相关逻辑操作

    链表的操作相对顺序表(数组)来说就复杂了许多.因为 PHP 确实已经为我们解决了很多数组操作上的问题,所以我们可以很方便的操作数组,也就不用为数组定义很多的逻辑操作.比如在 C 中,数组是有长度限制的 ...

  7. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  8. linux内核数据结构之链表

    linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...

  9. 数据结构之链表-链表实现及常用操作(C++篇)

    数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...

随机推荐

  1. Snipaste截图

    Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏.标注等功能. 引自: https://blog.csdn.net/qq_36279445/article/details/702109 ...

  2. @Scope 注解

    @Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)这个是说在每次注入的时候回自动创建一个新的bean实例 @Scope(value=Config ...

  3. 消息队列RabbitMQ与Spring

    1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 官网:http://www.rabbitmq.c ...

  4. yum update 自动忽略内核更新

    系统每天凌晨 3 点自动执行 yum update 任务 但升级内核后,会出现下面情况 一些编译软件需要内核模块才能够被调用, 而内核模块需要与当前版本内核编译后才能够使用, 假设内核升级后,之前软件 ...

  5. socat流量操控

    被称为nc++,双向数据流通道工具. 假设有这样一个场景 相互通信 创建服务器端,侦听2222端口 socat - tcp4-listen:2222 查看2222端口是否打开 netstat -pan ...

  6. python中matplotlib 的简单使用

    1.简单折线图的画图,轴标签.图的颜色,风格,等等参数,本文只介绍最常用的几个参数: import matplotlib.pyplot as plt import numpy as np x = np ...

  7. Mac快捷键大全

    Android Studio command+option+L:格式化代码 Visual Studio Code option+shift+f:格式化代码 先按command+k,再按command+ ...

  8. RxJS之工具操作符 ( Angular环境 )

    一 delay操作符 源Observable延迟指定时间,再开始发射值. import { Component, OnInit } from '@angular/core'; import { of ...

  9. VS项目属性配置问题

    1  libcpmtd.lib(stdthrow.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW 运行库:多线程 (/MT) 2 MSVCRT.lib( ...

  10. IntelliJ IDEA return null with ClassLoader.getSystemResourceAsStream(“configFilename”));

    参考https://stackoverflow.com/questions/49470053/intellij-idea-return-null-with-classloader-getsystemr ...