第10章 综合应用设计(java版)

60
数数数数 Java 数 )( 3数第 10 第 第第第第第第 10.1 第第第第第 10.2 第第第第第 10.3 第第第第第第 10.4 第第第第第第第 第第第第第

Upload: yan-li

Post on 27-Jul-2015

901 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

第 10 章 综合应用设计 10.1 数组和集合 10.2 实现迭代器

10.3 算法设计策略

10.4 课程设计的目的、要求和选题

Page 2: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

目的 目的:综合运用数据结构课程所讨论的基

础知识和基本理论,解决具有一定 规模的、中等难度的实际应用问

题,培养综合应用设计能力。 内容: Java 集合框架;多种算法设计策

略。

Page 3: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.1 数组和集合10.1.1 Arrays 数组类( 1 ) 比较两个数组是否相等

public static boolean equals(Object[] a, Object[] b)

( 2 ) 填充public static void fill(Object[] a, Object

obj) public static void fill(long[] a, int

begin, int end, long value)

Page 4: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.1.1 Arrays 数组类( 3 ) 排序

public static void sort(Object[] a) public static <T> void sort(T[] a,

Comparator<? super T> c)

( 4 ) 二分法查找public static int binarySearch(Object[]

a, int begin, int end, Object key)public static <T> int binarySearch(T[]

a, T key, Comparator<? super T> c)

Page 5: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

java.util.Comparator 比较器接口

public interface Comparator<T>{ int compare(T cobj1, T cobj2); // 指定比较两个对象大小的规则}

Page 6: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.1.2 Java 集合框架1. 集合框架结构

Page 7: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

表 10-1 集合框架中的主要接口和类

接 口实现接口的类

一维数组 循环双链表 平衡二叉树 散列表Set 集合 TreeSet HashSet

List 列表 ArrayList

LinkedList

Map 映射 TreeMap

HashMap

Page 8: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

2. 迭代

( 1 ) java.util.Iterator和 ListIterator 迭代器接口

public interface Iterator<T> // 迭代器接口{ boolean hasNext(); // 判断是否有后继元素 T next(); // 返回后继元素 void remove(); // 删除迭代器对象表示的集合当前元素}

Page 9: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

java.util.ListIterator 列表迭代器接口

public interface ListIterator<T> extends Iterator<T>

{ boolean hasPrevious();// 判断是否有前驱元素 T previous(); // 返回前驱元素 int nextIndex(); // 返回后继元素序号 int previousIndex(); // 返回前驱元素序号 void set(T x); // 将集合当前元素替换为 x void add(T x); // 增加元素 x}

Page 10: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

( 2 ) java.lang.Iterable 可迭代接口

public interface Iterable<T>

{ Iterator<T> iterator();}

Page 11: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

3.Collection 接口 public interface Collection<T> extends Iterable<T> { Iterator<T> iterator(); // 获得迭代器 boolean isEmpty(); // 判断集合是否为空 int size(); // 返回集合的元素个数 boolean contains(Object obj); // 判断是否包含指定元素 boolean add(T element); // 增加指定元素 boolean remove(Object obj); // 移去首次出现指定元素 void clear(); // 移去所有元素 // 以下方法描述集合运算,参数是另一个集合 boolean equals(Object obj); // 比较两个集合是否相等 boolean containsAll(Collection<?> c); // 判断集合包含 boolean addAll(Collection<? extends T> c); // 集合

并 boolean removeAll(Collection<?> c); // 集合差 boolean retainAll(Collection<?> c); // 仅保留那些也包含在集合 c 中的元

素}

Page 12: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

4. 列表( 1 ) List 接口

public interface List<T> extends Collection<T>

{ T get(int i) // 返回第 i( i≥0 )个元素 T set(int i, T x) //用 x 替换原第 i 个元素 ListIterator<T> listIterator()

// 返回列表迭代器对象}( 2 ) ArrayList 类 ( 3 ) LinkedList 类

Page 13: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

5. Collections 类 public class Collections{ public static<T> T max(Collection<? extends

T> coll,Comparator<? super T> c) // 最大值 public static <T> T min(Collection<? extends

T> coll, Comparator<? super T> c) // 最小值 public static<T> int binarySearch(List<?

extends Comparable<? super T>> list,T key)

public static<T> void sort(List<T> list, Comparator<? super T> c) // 排序

}

Page 14: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

【例 10.1 】 电话簿。1. Friend 类表示电话簿对象,实现可比较、

比较器和序列化接口。2. TelephoneBookTreeSet 类实现电话

簿的存储和管理。 3. TelephoneBookJFrame 类实现电话

簿的图形用户界面,提供添加、查找和删除功能。

Page 15: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

电话簿管理窗口中两个分割窗格的布局层次

JSplitPane分割窗格(垂直分割)JScrollPane滚动窗格

JScrollPane滚动窗格

JTable表格

JList列表框

JSplitPane分割窗格(水平分割)

JPanel面板

JPanel面板

Page 16: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.2 实现迭代器 10.2.1 基于迭代器的操作10.2.2 提供迭代器对象

Collection集合的根接口

java.lang.Iterable可迭代接口

List列表接口

Set集合接口

SortedSet有序集合接口

HashSet散列集合类

TreeSet树集合类

LinkedList循环双链表类

AbstractCollection抽象集合类

AbstractSequentialList抽象顺序列表类

AbstractList抽象列表类

ArrayList数组列表类

AbstractSet抽象集合类

NavigableSet导航集合接口

继承

实现

继承

继承

继承

继承

继承

继承

继承 继承 实现实现

实现

继承 继承

继承

java.lang.Object

继承

Page 17: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.2.1 基于迭代器的操作1. 抽象集合类public abstract class AbstractCCollection<T> implements

Iterable<T> { public abstract java.util.Iterator<T> iterator(); public String toString() { java.util.Iterator<T> it = this.iterator(); String str="("; while (it.hasNext()) // 若有后继元素 { str += it.next().toString(); // 添加后继元素字符串 if (it.hasNext()) str += ", "; } return str+")"; }}

Page 18: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

2. 抽象列表类 public abstract class AbstractLList<T> extends

AbstractCCollection<T> { public boolean equals(Object obj) { if (obj == this) return true; if (!(obj instanceof AbstractLList)) return false; java.util.Iterator<T> it1 = this.iterator(); java.util.Iterator<T> it2 =

((AbstractLList<T>)obj).iterator(); while (it1.hasNext() && it2.hasNext()) if (!(it1.next().equals(it2.next()))) return false; return !it1.hasNext() && !it2.hasNext(); }}

Page 19: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.2.2 提供迭代器对象1. 顺序表类提供迭代器对象 public class SeqList<T> extends AbstractLList<T>

implements LList<T>{ public java.util.Iterator<T> iterator() { // 返回 Java 迭代器对象 return new SeqIterator(); } private class SeqIterator implements

java.util.Iterator<T> // 私有内部类,实现迭代器接口 { …… }}

Page 20: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

2. 单链表类提供迭代器对象 public class SinglyLinkedList<T> extends

AbstractLList<T> implements LList<T>{ public java.util.Iterator<T> iterator() { // 返回 Java 迭代器对象 return new SinglyIterator(); } private class SinglyIterator implements

java.util.Iterator<T>// 私有内部类,实现迭代器接口 {……}}

Page 21: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

本书线性表接口和类的层次关系

实现

AbstractCCollection抽象集合类

java.lang.Iterable可迭代接口

继承

LList线性表接口

SinglyLinkedList单链表类

SeqList顺序表类

SortedSinglyLinkedList排序单链表类

实现

SortedDoublyLinkedList排序循环双链表类

CirDoublyLinkedList循环双链表类

继承 继承

PolySLinkedList多项式排序单链表类

继承

实现 实现

AbstractLList抽象列表类

继承

Page 22: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3 算法设计策略

10.3.1 分治法

10.3.2 动态规划法

10.3.3 贪心法

10.3.4 回溯法

Page 23: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3.1 分治法1. 分治策略

分治法( divide and conquer )采用分而治之、逐个解决的策略。孙子兵法曰“凡治众如治寡,分数是也。”

2. 分治与递归 结果 求解问题(问题规模){ if (问题规模足够小) // 递归边界条件 求解小规模子问题; else 分解,求解问题(问题规模缩小); // 递归调用 return 各子问题合并后的解;}

3. 分治法的效率分析

Page 24: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

深度优先搜索遍历二叉树、树和图,以及折半查找、快速排序都是采用分治策略的算法。

void 遍历(问题规模){ if (问题规模 >1 ) // 继续递归 { 访问当前元素; while (存在子问题) // 分解成若干子问题 遍历(子问题规模); // 递归调用 }}

Page 25: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3.2 动态规划法1. 动态规划

动态规划法( dynamic programming )也是把一个大问题分解为若干较小的子问题,通过求解子问题而得到原问题的解。动态规划法采用备忘录做法。

2. 动态规划法的基本要素 ① 最优子结构 ② 子问题重叠

n

Page 26: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

【例 10.2 】 动态规划法求组合数。

0

0,01

111 nmCCC

mnmnCnm

nm

nm

nm 或

n

n m

0 1 2 3 4 5

1 1 12 1 2 13 1 3 3 14 1 4 6 4 15 1 5 10 10 5 1

+

34C

33C

+

24C

22C

01C

12C

+

+

11C

23C

13C

02C

+

35C

3

1

11

1

11

2

10

01C

12C

+11C

22C

01C

12C

+

+

11C

23C

2

3 3

1

1

1

2

1

46

+

Page 27: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3.3 贪心法

63.6 元 = 10元×6+1元×3+0.1元×6 //15张

63.6 = 50+10+2+1+0.5+0.1 //6 张(个)

1. 贪心选择策略 贪心法( greedy )是运用局部最优选择以期获得全局最优解的一种策略。

Page 28: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

【例 10.3 】 贪心法求解背包问题。

给定 n个物品和一个背包,物品 i 的重量为 wi ,价值为 pi ,背包能容纳物品总重量为W ;设 xi ( 0≤ xi ≤1 )表示物品 i 的几分之几,求如何选择装入背包的物品(全部或部分),使背包中物品总价值 最大。背包问题的约束条件为 ≤W ,满足约束条件的 n元组 是一个可用解,使最大的可用解 是最优解。

n

iiixp

1

)(

n

iiixw

1

)(

),,,( 21 nxxx

n

iiixp

1

)(

Page 29: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

表 10-2 背包问题的多个可用解

n=3 ,物品 序列为 {(80,20),(50,25),(15,45)},W=100 。

),,( 321 xxx

3

1

)(i

iixw )(3

1i

ii xp

方案

可用解

背包重量 背包价值

1 (1, 20/50, 0) 80+20=100 20+25*2/5=30

2 (1, 5/50, 1)80+5=15=100 20+25*5/50+45

=67.5

3 (50/80, 1, 0) 50+50=100 20*50/80+25=37.5

4 (35/80, 1, 1)35+50+15=10

020*35/80+25+45

=78.75

),( ii pw

Page 30: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3.3 贪心法

2. 贪心法的基本要素 ① 贪心选择性质 ② 最优子结构性质

3. 贪心法与动态规划法的区别

Page 31: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

4. 最小堆 贪心选择策略最简单的应用是求最小值。 public class MinHeap<T extends

java.lang.Comparable<T>>// 最小堆类 { Comparable [] element;// 最小堆元素数组 int len; // 最小堆元素个数 Comparator comparator=null; // 比较器}

Page 32: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

图 10-6 最小堆插入和删除元素 4

31 11

49 90 99 47

87

(a)在最小堆最后添加元素16

最小堆 {4, 31, 11, 49, 90, 99, 47, 87}

0

1 2

3 4 5 6

716

8

4

16 11

31 90 99 47

87

(b)自下而上调整元素16所在的多棵子二叉树为最小堆

最小堆 {4, 16, 11, 31, 90, 99, 47, 87, 49}

0

1 2

3 4 5 6

749

8

49

16 11

31 90 99 47

87

(c)删除最小值元素4,将堆最后元素移到根,再调整二叉树为最小堆

0

1 2

3 4 5 6

7

11

16 47

31 90 99 49

87

(d)最小堆 {11, 16, 47, 31, 90, 99, 49, 87}

0

1 2

3 4 5 6

7

Page 33: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

5. 贪心策略应用 Prim 算法

(a)带权无向图

B

A

E F

DC

(b)选择边(A,D)

18

3 8

5

4

6

7

16

15

26

B

A

E F

DC

5

B

A

E F

DC

8

5

B

A

E F

DC

8

5

4

B

A

E F

DC

8

5

4

6

B

A

E F

DC

3 8

5

4

6

(c)扩充边(D,F)

(d)扩充边(C,F) (e)扩充边(E,F) (f)扩充边(B,E)

Page 34: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

Dijkstra 算法采用贪心 选择策略逐步扩充顶点 A 的单源最短路径

Page 35: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

Huffman 算法采用贪心选择策略逐步合并森林构造 Huffman

Page 36: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

6. Kruskal 算法实现

(a)带权无向图

B

A

E F

DC

18

3 8

5

4

6

7

16

15

26

(b)选择权值最小的边(B,E),合并{B}和{E}森林

B

A

E F

DC

3

B

A

E F

DC

3 4

B

A

E F

DC

3

5

4

B

A

E F

DC

3

5

4

6

B

A

E F

DC

3 8

5

4

6

(c)选择边(C,F),合并{C}和{F}森林

(d)选择边(A,D),合并{A}和{D}森林

(e)选择边(E,F),合并{B,E}和{C,F}森林

(f)选择边(D,F),合并{A,D}和{B,C,E,F}森林,不能选择边(B,C)

7

Page 37: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

( 1 )最小生成树类 public class MinSpanTree { Edge[] mst; // 边集合 int cost=0; // 代价 public MinSpanTree(int n, Edge[] edges,

Comparator<Edge> comparator)

{ MinHeap<Edge> minheap = new

MinHeap<Edge>(edges, comparator); …… }}

Page 38: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

例 10.4 以 Kruskal 算法构造带权无向图的最小生成树。

图 10-10 的所有边按权值构造的最小堆

最小堆:(1,4,3), (2,5,4), (2,3,15), (0,3,5), (4,5,6), (0,1,16), (2,4,26), (0,2,18), (3,5,8), (1,2,7))

0

1 2

3 4 5 6

(1,4,3)

(2,5,4) (2,3,15)

(0,1,16) (2,4,26)(0,3,5) (4,5,6)

7 8(0,2,18) (3,5,8)

9(1,2,7)

Page 39: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

( 2 )并查集类

Page 40: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

( 2 )并查集类

Page 41: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

图 10-13 查找集合元素时采用折叠规则压缩路径

A

-6 1 01 1 1

1 2 30 4 5 B

E F

D

C

1

2

3

0 4 5ufset.parent

Page 42: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.3.4 回溯法回溯法( backtracking )在问题的解空

间中,以深度优先策略搜索满足约束条件的一个解或所有解。二叉树、树和图的深度优先搜索遍历算法采用的是回溯法。

用回溯法解题通常包含以下三个步骤:<1> 定义所求问题的解空间。<2> 构造易于搜索的解空间结构。<3> 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

Page 43: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

1. 问题的解空间及解空间树

0-1背包问题( n=3 )解空间是 {(0,0,0) , (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1)}

图10-14 0-1背包问题的解空间二叉树

C

B

C C

B

C

A10

10 1 0

(0,0,0)

0 1 0 1 0 1 0 1

(0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1)

Page 44: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

图 10-15 穷举法求解 0-1 背包问题

B

C

A09

6 0

(1,1,0,0)26

D

0

背包重量

(1,0,1,1)28

0

C

DD

4 0

2 0 2 0

4

13 11 91515

B

C

6 0

DD

0

2 0 2 0

C

DD

4 0

2 0 2 0

12 10 8 6 6 24 0

可用解背包价值

D

4

2 0

21 19

2

17

Page 45: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

2. 约束集的完备性

若一个 i( 1≤i≤n )元组 违反涉及到 元素的一个约束条件,则以 为前缀的任何n 元组 一定也违反相应的约束条件。

),,,( 110 ixxx

110 ,,, ixxx

),,,( 110 ixxx

),,,,,( 1110 ni xxxx

Page 46: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

3. 回溯策略

1. 深度优先搜索 2. 剪枝:约束剪枝,限界剪枝 3. 递归回溯与迭代回溯

Page 47: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

0-1 背包问题按背包重量的约束剪枝

B

C

A09

6 0

(1,1,0,0)26

D

0

背包重量

(1,0,1,1)28

0

C

DD

4 0

2 0 2 0

4

(?,?,?,?)

(1,?,?,?)

(1,1,?,?)

13 11 91515

(0,?,?,?)

(0,1,?,?)

B

C

6 0

DD

0

2 0 2 0

C

DD

4 0

2 0 2 0

12 10 8 6 6 24 0

(0,0,?,?)

可用解背包价值

Page 48: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

0-1 背包问题按背包重量的限界剪枝

B

C

A9

6 0

D

0

0

C

D

4

2

1515

(1,1,0,0)26

(1,0,1,1)28

可用解背包价值

背包重量

Page 49: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

例 10.5 回溯法求解 0-1 背包问题。

1. 物品按重量降序排列2. 物品按单位重量价值降序排列

图 10-18 0-1背包问题物品按单位重量价值降序排列的解空间树

Page 50: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

【例 10.6 】 回溯法求解八皇后问题。

①八皇后问题的解空间 八皇后问题的显约束是 ( 0≤i≤7 ),解

空间由 个 8 元组构成,范围是 (0,0,0,0,0,0,0,0)~ (7,7,7,7,7,7,7,7) ,解空间树是一棵满八叉树。隐约束是任意两个皇后不在同一列或同一斜线上。

88}7,,1,0{ ii Sx

Page 51: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

② 用回溯法求解四皇后问题的解空间树

Page 52: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

③ 判断隐约束条件 任意两个皇后不在同一列上。若 i≠j ,有

。意为元素各不相同,确定 (0,0,?,?)等不是解。

任意两个皇后不在同一斜线上。若 i≠j ,有 。由此约束确定 (0,1,?,?)、(0,2,1,?)、 (0,3,1,0) 等不是解。

ji xx

jixx ji

Page 53: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

1. 用回溯法求解八皇后问题程序 2. 迭代回溯

Page 54: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

【例 10.7 】 预见算法解骑士游历问题。1. 骑士游历问题的解空间

马到达该格的步数自然数马未到达过0

xyc

一次不成功游历路径

Page 55: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

② 预见算法 方向 下一位置 可通方向 可通路数1 (2,4) 1,2,3,4,6,7,8 7

2 (3,5) 1,2,3,4,5,7,8 7

3 (5,5) 1,2,3,4,5,6,8 7

4 (6,4) 1,2,3,6,7 5

5 (6,2) 2,3,6,7,8 5

6 (5,1) 1,3,4,5,8 5

7 (3,1) 1,2,4,5,8 5

8 (2,2) 1,2,3,5,6,7,8 7

Page 56: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

骑士游历算法流程

满n×n步?

初始位置p = new Position(x, y);

direction=0?

成功,输出

选择一个方向direction = select(p);

无路可通

步数加1向所选方向前进一步

p = goaStep(p, direction);

true

false

true

false

Page 57: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

10.4 课程设计的目的、要求和选题

数据结构课程设计的目的是,深入理解数据结构的基本理论,掌握对数据结构各种操作的算法设计方法,增强对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力,在实践中培养独立分析问题和解决问题的作风和能力。

Page 58: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

数据结构课程设计的要求综合运用数据结构的基础知识和算法设计的

基本原则,独立编制一个具有中等规模的、一定难度的、解决实际问题的应用程序;通过题意分析、选择数据结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,完善算法并提高程序性能。

Page 59: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

具体要求 ① 选题与数据结构课程内容相关,体现基本的数据

结构和算法设计原则。② 算法有明确的思路,模块结构合理,表述清楚,

算法完整,考虑各种可能情况。③ 采用 Java语言和面向对象程序设计思想实现。④ 程序必须运行通过,对于各种输入数据,有明确

的不同的输出结果。程序运行有错误时,必须采取各种调试手段排除错误。

Page 60: 第10章  综合应用设计(java版)

《数据结构( Java 版)(第 3 版)》

⑤ 课程设计报告

包括:课程设计目的、题目说明、题意分析、设计方案、功能说明、实现技术和手段、程序流程、源程序清单、运行结果及结果分析、设计经验和教训总结、存在问题及解决方案等。