创建结点类,链表类,测试类
 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. 弹性盒子 flexbox 元素居中

    1 .navtext{ width:800px; height:600px; border: 1px solid black; justify-content:center; align-items: ...

  2. flex-direction

    [flex-direction] The flex-direction CSS property specifies how flex items are placed in the flex con ...

  3. 【Django】ORM操作MySQL数据库遇到的一些问题

    关于查询操作: 1.exact和iexact exact相当于=   iexact相当于like(但是这里的like和数据库的不一样,没有给后面条件加上%%所以这里like和=的作用相似) artic ...

  4. redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but seems to be not monitored.

    在使用Redis的哨兵Sentinel配置时,报错如下: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, ...

  5. 三:python 对象类型详解一:数字(上)

    一:python 的数字类型: a)整数和浮点数 b)复数 c)固定精度的十进制数 d)有理分数 e)集合 f)布尔类型 g)无穷的整数精度 h)各种数字内置函数和模块 二:各种数字类型的详解 1,数 ...

  6. docker的理解

    作者:刘允鹏链接:https://www.zhihu.com/question/28300645/answer/67707287来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  7. pta7-18奥运排行榜(模拟)

    题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114867245056 题意:给n个国家,以及每个国家 ...

  8. webpack 打包问题2

  9. 装了appserv之后,浏览器中访问localhost加载不了

    AppServe下载地址:https://AppServnetwork.com/ 如果只下载Apache,推荐大神博客http://www.cnblogs.com/zhaoqingqing/p/496 ...

  10. oracle视图(转)

    视图的概念   视图是基于一张表或多张表或另外一个视图的逻辑表.视图不同于表,视图本身不包含任何数据.表是实际独立存在的实体,是用于存储数据的基本结构.而视图只是一种定义,对应一个查询语句.视图的数据 ...