第十周課堂實踐總結
阿新 • • 發佈:2018-05-06
訪問 temp object 學分 return 抽象 ide compute 編程
知識總結
- 數據結構是指相互之間具有(存在)一定聯系(關系)的數據元素的集合。
- 使用數據結構的三個原因是:效率、抽象和重用性。
- 數據結構的主要運算包括:
- 建立(Create)一個數據結構
- 消除(Destroy)一個數據結構
- 從一個數據結構中刪除(Delete)一個數據元素
- 把一個數據元素插入(Insert)到一個數據結構中
- 對一個數據結構進行訪問(Access)
- 對一個數據結構(中的數據元素)進行修改(Modify)
- 對一個數據結構進行排序(Sort)
- 對一個數據結構進行查找(Search)
- ...
- 鏈表
- LinkedList
- 創建空鏈表:
LinkedList<String> mylist = new LinkedList<String>();
- 使用
add(E obj)
方法依次增加節點 - 使用
get(int index)
方法遍歷鏈表 - 排序與查找
- 升序排序:
public static sort(List<E> list)
- 折半法查找:
int binarySearch(List<T> list,T key,CompareTo<T> c)
- 升序排序:
- 樹集:TreeSet
- 樹映射:TreeMap
- 使用 Comparator
public int compare(java.lang.Object o1, java.lang.Object o2)
如果 o1 和 o2相等,compare返回0;如果o1小於o2,它返回一個負整數;如果o1大於o2,返回一個正整數。- 有類的源代碼,針對某一成員變量排序,讓類實現Comparable接口,調用
Collection.sort(List)
。 - 沒有類的源代碼,或者多種排序,新建一個類,實現Comparator接口 調用
Collection.sort(List, Compatator)
。
- 創建一個 List:
List myList = new ArrayList();
- 將list中的元素按升序排序:
public static sort(List<E>list)
- 鏈表中插入數據:
list.add("xx");
課堂測試補做
- 數據結構-排序:針對下面的Student類,使用Comparator編程完成以下功能:
- 在測試類StudentTest中新建學生列表,包括自己和學號前後各兩名學生,共5名學生,給出運行結果(排序前,排序後)
- 對這5名同學分別用學號和總成績進行增序排序,提交兩個Comparator的代碼
- 產品代碼
import java.util.*;
class StudentTest {
public static void main(String[] args) {
List<Student> list = new LinkedList<>();
list.add(new Student(20165328,"段俊偉","male",20,89,67,89));
list.add(new Student(20165329,"何佳偉","male",20,79,66,45));
list.add(new Student(20165330,"張羽昕","female",20,69,81,78));
list.add(new Student(20165331,"胡麟","male",20,69,56,76));
list.add(new Student(20165332,"延億卓","male",20,62,80,83));
SortByTotal_score sortBytotal_score = new SortByTotal_score();
Collections.sort(list, sortBytotal_score);
SortByID sortByID = new SortByID();
Collections.sort(list, sortByID);
System.out.println("根據學號升序排序:");
for (Student student : list) {
System.out.println(student);
}
Collections.sort(list, sortBytotal_score);
System.out.println("根據總成績升序排序:");
for (Student student : list) {
System.out.println(student);
}
}
}
class Student {
private int id;//表示學號
private String name;//表示姓名
private int age;//表示年齡
private String sex;
private double computer_score;//表示計算機課程的成績
private double english_score;//表示英語課的成績
private double maths_score;//表示數學課的成績
private double total_score;// 表示總成績
private double ave_score; //表示平均成績
@Override
public String toString() {
return "Student[姓名:"+name+",學號:"+id+",總成績:"+total_score+"]";
}
public Student(int id, String name, String sex, int age,double computer_score,
double english_score,double maths_score) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.computer_score = computer_score;
this.english_score = english_score;
this.maths_score = maths_score;
}
public int getId() {
return id;
}//獲得當前對象的學號,
public double getComputer_score() {
return computer_score;
}//獲得當前對象的計算機課程成績,
public double getMaths_score() {
return maths_score;
}//獲得當前對象的數學課程成績,
public double getEnglish_score() {
return english_score;
}//獲得當前對象的英語課程成績,
public void setId(int id) {
this.id = id;
}// 設置當前對象的id值,
public void setComputer_score(double computer_score) {
this.computer_score = computer_score;
}//設置當前對象的Computer_score值,
public void setEnglish_score(double english_score) {
this.english_score = english_score;
}//設置當前對象的English_score值,
public void setMaths_score(double maths_score) {
this.maths_score = maths_score;
}//設置當前對象的Maths_score值,
public double getTotalScore() {
total_score=computer_score + maths_score + english_score;
return total_score;
}// 計算Computer_score, Maths_score 和English_score 三門課的總成績。
public double getAveScore() {
return getTotalScore() / 3;
}// 計算Computer_score, Maths_score 和English_score 三門課的平均成績。
}
class SortByID implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getId() - o2.getId();
}
}
class SortByTotal_score implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return (int)( o1.getTotalScore() - o2.getTotalScore());
}
}
- 運行結果截圖
- 數據結構-單鏈表:補充MyList.java的內容,提交運行結果截圖(全屏)
- 產品代碼
import java.util.*;
import java.util.*;
public class MyList {
public static void main(String [] args) {
List<String> list=new LinkedList<String>();
list.add("20165328");
list.add("20165329");
list.add("20165331");
list.add("20165332");
System.out.println("打印初始鏈表");
//把上面四個節點連成一個沒有頭結點的單鏈表
Iterator<String> iter=list.iterator();
while(iter.hasNext()){
String te=iter.next();
System.out.println(te);
}
//遍歷單鏈表,打印每個結點的
list.add("20165330");
//把你自己插入到合適的位置(學號升序)
System.out.println("插入我的學號後排序,打印鏈表");
Collections.sort(list);
iter=list.iterator();
while(iter.hasNext()){
String te=iter.next();
System.out.println(te);
}
//遍歷單鏈表,打印每個結點的
list.remove("20165330");
//從鏈表中刪除自己
System.out.println("刪除我的學號後打印鏈表");
iter=list.iterator();
while(iter.hasNext()){
String te=iter.next();
System.out.println(te);
}
//遍歷單鏈表,打印每個結點的
}
}
- 運行結果截圖
教材習題
第十五章
- 使用堆棧結構輸出an的若幹項,其中an=2an-1+2an-2,a1=3,a2=8。
- 代碼
import java.util.*;
public class E {
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++;
}
}
}
}
- 運行截圖
- 編寫一個程序,將鏈表中的學生英語成績單存放到一個樹集中,使得按成績自動排序,並輸出排序結果。
- 代碼
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 F {
public static void main(String args[]) {
List<student> list=new LinkedList<student>();
int score []={65,76,45,99,77,88,100,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);
}
}
}
- 運行截圖
- 有10個U盤,有兩個重要的屬性:價格和容量。編寫一個應用程序,使用TreeMap
- 代碼
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 G {
public static void main(String args[ ]) {
TreeMap<UDiscKey,UDisc> treemap= new TreeMap<UDiscKey,UDisc>();
int amount[]={1,2,4,8,16};
double price[]={867,266,390,556};
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+"元");
}
}
}
- 運行截圖
第十周課堂實踐總結