JAVA LinkList插入排序
来源:互联网 发布:淘宝网怎么找厂家店 编辑:程序博客网 时间:2024/06/05 18:37
编程实现链表:
要求:1.循环输入学生学号和成绩。并将学生信息加入到链表中;
2.链表中的信息按学生成绩的高-->低进行排序;
3.如果输入的学生信息中,学号重复,则仅更新学生成绩,不添加新的节点。
import java.util.Scanner;
public class TestLink {
// 测试主函数
public static void main(String[] args) {
LinkList list = new LinkList();
Scanner sc = new Scanner(System.in);
String ask = "";
do {
System.out.print("请录入学号:");
int no = sc.nextInt();
System.out.print("请录入成绩:");
int num = sc.nextInt();
Student s = new Student(no, num);
list.addAndSet(s);// 调用方法.将学生信息擦人链表
System.out.println("是否继续Y/N");
ask = sc.next();
} while (ask.equals("Y") || ask.equals("y"));
System.out.println("排序前学生成绩一览:");
list.listAll();// 输出学生信息
// 对学生成绩进行排序.(按成绩高-->低)
list.bubbleSort();
System.out.println("\n排序后学生成绩一览:");
list.listAll();// 输出学生信息
}
}
/**
* 学生类
*/
class Student {
private int no;
private int num;
public Student(int no, int num) {
super();
this.no = no;
this.num = num;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
/**
* 链表结点类
*/
class Node {
private Student student;
private Node next; // 链表结点的指针域,指向直接后继结点
public Node() {
next = null;
}
public Node(Student student, Node next) {
this.student = student;
this.next = next;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public Node getNext() {
return this.next;
}
public void setNext(Node next) {
this.next = next;
}
}
/**
* 链表类
*/
class LinkList {
private Node head = null; // 头结点指针
private int size = 0;
public LinkList() {
head = new Node();
size = 0;
}
public Node getHead() {
return this.head;
}
public void setHead(Node head) {
this.head = head;
}
public int getSize() {
return this.size;
}
public boolean isEmpty() {
return (size == 0);
}
// 插入/修改 学生对象
public boolean addAndSet(Student stu) {
Node node;
// 判断链表是否为空;如果为空则在表头插入
if (size == 0) {
// 定义一个新的节点,并将将新结点的指针指向链表的首结点
node = new Node(stu, this.head.getNext());
// 把节点插入到head后,设置新结点为链表的首结点
this.head.setNext(node);
// 链表长度加1
size++;
return true;
}
// 当链表不为空时候,判断是否有重复的学号.有则替换.无则在结尾插入.
else {
Node n;
for (n = head; n.getNext() != null; n = n.getNext()) {
// 学号相同.更新学生成绩
if (n.getNext().getStudent().getNo() == stu.getNo()) {
n.getNext().getStudent().setNum(stu.getNum());
return true;
}
}
// 如果学号不同,在链表结尾插入
Node temp = head;
while (null != temp.getNext()) {
temp = temp.getNext();
}
node = new Node(stu, temp.getNext());
temp.setNext(node);
size++;
return true;
}
}
// 控制台输出链表所有内容
public void listAll() {
for (Node curr = head.getNext(); curr != null; curr = curr.getNext()) {
System.out.print("\n学号: " + curr.getStudent().getNo() + "\t");
System.out.print("成绩: " + curr.getStudent().getNum() + "\t");
}
System.out.println("");
}
// 链表冒泡排序方法.学生成绩进行排序.(按成绩高-->低)
public void bubbleSort() {
Node p, q;
Student temp;
for (p = head.getNext(); p.getNext() != null; p = p.getNext()) {
for (q = head.getNext(); q.getNext() != null; q = q.getNext()) {
if (q.getStudent().getNum() < q.getNext().getStudent().getNum()) {
temp = q.getStudent();
q.setStudent(q.getNext().getStudent());
q.getNext().setStudent(temp);
}
}
}
}
}
内容可以直接拉入IDE中.右键运行.
- JAVA LinkList插入排序
- 链表插入排序:LinkList:Sort a LinkList(insert directly)
- Java排序--插入排序
- 排序-插入排序-Java
- Java Linklist 类测试
- Java学习之LinkList
- JAVA LinkList、泛型
- Java之LinkList类
- JAVA---Linklist与ListIteractor
- 插入排序--直接插入排序[Java实现]
- 插入排序--折半插入排序[Java实现]
- java插入排序之直接插入排序
- 【插入排序】直接插入排序--Java
- 【插入排序】二分插入排序--Java
- 插入排序----直接插入排序----java实现
- [java]插入排序及折半插入排序
- java插入排序--直接插入排序
- Java插入排序
- override与new(用两个小例子来解释)
- WIN32 编程:如何获取资源并写入硬盘
- extjs 关于js的动态加载问题
- C# vs2010 .net framework 4 工程转 vs2005工程 .net framework2 (一)
- 团购网有可能全军覆灭 电了商务揠苗助长
- JAVA LinkList插入排序
- 一个LED电子工程师的经验之谈
- 推荐一个在线制作icon的网站
- C++Builder中使用Pas文件
- VC/MFC之ListCtrl控件使用经验总结(二)
- Select For Update行级锁定
- MySQL汉字字段按拼音排序
- 成员资格管理
- GWT UiBinder部分官方介绍的翻译