数据结构:链表 >> 链表按结点中第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个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...
随机推荐
- HTTP 协议 详解
一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相 ...
- Gamma Correction
[Gamma Correction] 磁盘上存储的纹理可分为Linear Texture.Gamma Texture. sRGB sampling allows the Unity Editor to ...
- kangle web配置phpmyadmin
1. kangle安装参考:https://www.kangleweb.com/thread-6001-1-1.html 2. 安装mysql-5.7.22:http://www.cnblogs.co ...
- asp.net导出excle
思路:实际上是读取页面上某个控件下的内容再导出 protected void btnExcel_Click(object sender, EventArgs e) { string bgType = ...
- 截图软件FastStone
屏幕截图软件(FastStone Capture) 好用,可以粘贴 / 复制. 可以做页面设计,有屏幕标尺,取色器.
- vue使用全局element-ui组件
安装loader模块: cnpm install style-loader -D cnpm install css-loader -D cnpm install file-loader -D 安装 ...
- pta7-19打印学生选课清单(模拟)
题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114875633664 题意:输入n个学生,k門课程, ...
- openstack(Pike 版)集群部署(八)--- 连接Ceph Cluster 作为后端存储
一.openstack Glance + ceph Cluster 部署: 博客:http://www.cnblogs.com/weijie0717/p/8563294.html 参考 续 部分. ...
- CentOS Netstat命令
语法 netstat(选项) 选项 -a或--all:显示所有连线中的Socket: -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址: -c或--conti ...
- 【转】关于easyui的窗口和tab页面不执行js说明
原地址:http://www.jeasyuicn.com/post-49.html 一直以来群里里面很多人反应,在用tab加载界面的时候,界面里面的js不会执行.今天GodSon在此说明一下原因. 不 ...