相关知识点总结

在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法:

  • 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List)
  • 没有类的源代码,或者多种排序,新建一个类,实现Comparator接口 调用Collection.sort(List, Compatator)
  • 泛型类声明:
    class 名称<泛型列表>
  • 创建链表
    LinkedList<String> mylist=new LinkedList<String>();
  • 向链表增加节点
    list.add(E obj);
  • 从链表中删除节点
    list.remove(index)
  • 升序排序
    public static sort(List<E>list)
  • 折半查找list是否含有和参数key一样的元素
    int binarySearch(List<T>,Tkey,compareTo<T>c)
  • 树映射 TreeMap<K,V>适合用于数据的排序
  • 通过关键字进行排序TreeMap<StudentKey,Student> treemap= new TreeMap<StudentKey,Student>()

课上内容的补做及结果截图

习题2:

成绩排序已提交,学号排序忘记传了:

习题3:

  • 代码实现:
import java.util.*;
class Stu implements Comparable{
int id;
String name;
Stu(String n, int i){
name=n;
id=i;
}
public int compareTo(Object b){
Stu st=(Stu)b;
return (this.id-st.id);
}
}
public class MyList {
public static void main(String [] args) {
//选用合适的构造方法,用你学号前后各两名同学的学号创建四个结点
LinkedList<Stu> list=new LinkedList<>();
list.add(new Stu("其米仁增",5239));
list.add(new Stu("李梓豪",5201));
list.add(new Stu("夏云霄",5203));
list.add(new Stu("贾普涵",5204));
//把上面四个节点连成一个没有头结点的单链表
Iterator<Stu> iter=list.iterator();
//遍历单链表,打印每个结点的
System.out.println("初始单链表为:");
while (iter.hasNext()){
Stu st=iter.next();
System.out.println(st.id+" "+st.name);
}
//把你自己插入到合适的位置(学号升序)
list.add(new Stu("贾海粟",5202));
Collections.sort(list);
//遍历单链表,打印每个结点的
iter=list.iterator();
System.out.println("插入我的学号和姓名后单链表为:");
while (iter.hasNext()){
Stu st=iter.next();
System.out.println(st.id+" "+st.name);
}
//从链表中删除自己
list.remove(1);
iter=list.iterator();
//遍历单链表,打印每个结点的
System.out.println("删除我的学号和姓名后单链表为:");
while (iter.hasNext()){
Stu st=iter.next();
System.out.println(st.id+" "+st.name);
} }
}
  • 运行截图

教材第十五章的代码分析

补做教材第十五章的编程题目

1.使用堆栈结构输出an的若干项,其中an=2an-1+2an-2,a1=3,a2=8

  • 代码实现
import java.util.*;
public class E1 {
public static void main(String args[]) {
Stack<Integer> stack=new Stack<Integer>();
stack.push(new Integer(3));
stack.push(new Integer(8));
int k=1;
while(k<=10) {
for(int i=1;i<=2;i++) {
Integer F1=stack.pop();
int f1=F1.intValue();
Integer F2=stack.pop();
int f2=F2.intValue();
Integer temp=new Integer(2*f1+2*f2);
System.out.println(""+temp.toString());
stack.push(temp);
stack.push(F2);
k++;
}
}
}
}
  • 结果截图

2.编写一个程序:将链表中的学生英语成绩单存放到一个树集中,使得按成绩自动排序,并输出排序结果

  • 代码实现
import java.util.*;
class Student implements Comparable {
int english=0;
String name;
Student(int english,String name) {
this.name=name;
this.english=english;
}
public int compareTo(Object b) {
Student st=(Student)b;
return (this.english-st.english);
}
}
public class E2 {
public static void main(String args[]) {
List<Student> list=new LinkedList<Student>();
int score []={100,76,45,99,77,88,75,79};
String name[]={"一文","李悦","江流","胡克","魏凡","周平","赵剑","魏派"};
for(int i=0;i<score.length;i++){
list.add(new Student(score[i],name[i]));
}
Iterator<Student> iter=list.iterator();
TreeSet<Student> mytree=new TreeSet<Student>();
while(iter.hasNext()){
Student stu=iter.next();
mytree.add(stu);
}
Iterator<Student> te=mytree.iterator();
while(te.hasNext()) {
Student stu=te.next();
System.out.println(""+stu.name+" "+stu.english);
}
}
}
  • 结果截图

3.有10个U盘,有两个重要的属性:价格和容量,编写一个应用程序,使用TreeMap<K,V>类,分别按照价格和容量排序输出10个U盘的详细信息。

  • 代码实现
import java.util.*;
class UDiscKey implements Comparable {
double key=0;
UDiscKey(double d) {
key=d;
}
public int compareTo(Object b) {
UDiscKey disc=(UDiscKey)b;
if((this.key-disc.key)==0)
return -1;
else
return (int)((this.key-disc.key)*1000);
}
}
class UDisc{
int amount;
double price;
UDisc(int m,double e) {
amount=m;
price=e;
}
}
public class E3 {
public static void main(String args[ ]) {
TreeMap<UDiscKey,UDisc> treemap= new TreeMap<UDiscKey,UDisc>();
int amount[]={2,4,8,16,32};
double price[]={32,50,64,128};
UDisc UDisc[]=new UDisc[4];
for(int k=0;k<UDisc.length;k++) {
UDisc[k]=new UDisc(amount[k],price[k]);
}
UDiscKey key[]=new UDiscKey[4] ;
for(int k=0;k<key.length;k++) {
key[k]=new UDiscKey(UDisc[k].amount);
}
for(int k=0;k<UDisc.length;k++) {
treemap.put(key[k],UDisc[k]);
}
int number=treemap.size();
Collection<UDisc> collection=treemap.values();
Iterator<UDisc> iter=collection.iterator();
while(iter.hasNext()) {
UDisc disc=iter.next();
System.out.println(""+disc.amount+"G "+disc.price+"元");
}
treemap.clear();
for(int k=0;k<key.length;k++) {
key[k]=new UDiscKey(UDisc[k].price);
}
for(int k=0;k<UDisc.length;k++) {
treemap.put(key[k],UDisc[k]);
}
number=treemap.size();
collection=treemap.values();
iter=collection.iterator();
while(iter.hasNext()) {
UDisc disc=iter.next();
System.out.println(""+disc.amount+"G "+disc.price+"元");
}
}
}
  • 结果截图

4.编程题目码云链接

20165202 week10课下补做的更多相关文章

  1. 20165202 week4课下补做

    1.相关知识点的总结 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值 ...

  2. 课上补做:用C语言编程实现ls命令

    课上补做:用C语言编程实现ls命令 一.有关ls ls :用来打印当前目录或者制定目录的清单,显示出文件的一些信息等. ls -l:列出长数据串,包括文件的属性和权限等数据 ls -R:连同子目录一同 ...

  3. 20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义

    20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然 ...

  4. 2017-2018-2 20165312 课下选做 MySort

    2017-2018-2 20165312 课下选做 MySort 题目描述 模拟实现Linux下Sort -t : -k 2的功能,参考 Sort的实现. import java.util.*; pu ...

  5. 课下选做作业实现mypwd

    2019-2020-1 20175227 <信息安全系统设计基础> 课下选做作业实现mypwd 要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 ...

  6. 课下选做作业MyOD

    2019-2020-1 20175227 <信息安全系统设计基础> 课下选做作业MyOD 要求 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc ...

  7. 课下选做作业MySort

    20175227张雪莹 2018-2019-2 <Java程序设计> 课下选做作业MySort 要求 注意:研究sort的其他功能,要能改的动代码,需要答辩 模拟实现Linux下Sort ...

  8. HASH方法课下补分博客

    课堂要求:利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75)关键字集合:85,75,57,60,65,(你的8位学号相 ...

  9. 课下必做MyCP

    一.Linux的CP命令 Linux 的cp命令 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有 ...

随机推荐

  1. Linux中LVM2原理

    一.LVM原理 [MD]:Multi Device 多设备 Mdadm是一个用户空间工具,是RAID的管理工具,与真正的RAID工作没有太大关系.真正的RAID集成在linux内核中 [DM]Devi ...

  2. Docker入门简明教程

    Docker简介 概念 Docker是基于Go语言实现的云开源项目,是基于Linux的多项开源技术提供高效.敏捷和轻量级的容器方案.创建于2013年初.自从开源后就受到了广泛的关注,从长远的眼光来看, ...

  3. 【c++ primer, 5e】定义类相关的非成员函数

    练习 7.6 & 7.7 #include <iostream> #include <string> using namespace std; // Sales_dat ...

  4. Nginx访问控制_IP访问控制(http_access_module)原理、局限性、解决方法讲解

    基于IP的访问控制,基于Nginx的http_access_module模块,是Nginx本身内置的模块,不需要安装的时候配置.也就是允许哪些IP访问,不允许哪些IP访问 server { liste ...

  5. 为什么 PHP 程序员应该学习使用 Swoole

    最近两个月一直在研究 Swoole,研究成果即将在6.21正式开源发布,这段时间没有来水文章,趁着今天放假来水水吧. 借助这篇文章,我希望能够把 Swoole 安利给更多人.虽然 Swoole 可能目 ...

  6. Could not initialize class sun.awt.X11FontManager 异常问题

    查了很多资料都是建议在  catalina.sh 中增加 -Djava.awt.headless=true \  的配置. 加了没有效果. 后来发现是因为JDK版本问题,将JDK 8换成 JDK 7后 ...

  7. thrift使用上面的一些坑

    https://blog.csdn.net/andylau00j/article/details/53912485

  8. 20145310《Java程序设计》第5次实验报告

    20145310<Java程序设计>第5次实验报告 实验要求 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验内容 根据所学内容,编写代码实现服务器与客户端 掌 ...

  9. 20145327高晨 实验一 "Java开发环境的熟悉"

    实验一 Java开发环境的熟悉(Linux + Eclipse) (Windows + IDEA) 实验内容:实现Fibonacci数列功能,并进行测试. 实验步骤: Fibonacci数列(斐波拉契 ...

  10. 修改Linux登录提示信息

    佛祖保佑式 cat >> /etc/profile.d/message.sh << END echo -e "\033[33;40;5m _ooOoo_ O88888 ...