第5章 数据结构及常用算法.docx

上传人:b****8 文档编号:9712872 上传时间:2023-02-06 格式:DOCX 页数:25 大小:194.70KB
下载 相关 举报
第5章 数据结构及常用算法.docx_第1页
第1页 / 共25页
第5章 数据结构及常用算法.docx_第2页
第2页 / 共25页
第5章 数据结构及常用算法.docx_第3页
第3页 / 共25页
第5章 数据结构及常用算法.docx_第4页
第4页 / 共25页
第5章 数据结构及常用算法.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

第5章 数据结构及常用算法.docx

《第5章 数据结构及常用算法.docx》由会员分享,可在线阅读,更多相关《第5章 数据结构及常用算法.docx(25页珍藏版)》请在冰豆网上搜索。

第5章 数据结构及常用算法.docx

第5章数据结构及常用算法

第五章数据结构及常用算法

本章内容:

常用集合元素有:

向量(Vector),枚举(Enumeration),散列表(哈希表)(Hashtable)和属性(Properties)﹑数据结构中的接口﹑堆栈﹑链表﹑数据排序算法﹑数据查找算法.

教学目标:

学生通过本章学习应掌握Java常用集合元素﹑堆栈﹑链表﹑数据排序算法﹑数据查找算法的应用

一、重点与难点:

Java语法基础及Java面向对象特性,掌握常用的集合元素及常用的结合接口,熟练使用常用集合元素,数据排序算法﹑数据查找算法。

二、教具:

可进行广播的教学或多媒体计算机局域网,投影仪及相关的软硬件.

三、教学方法:

理论与实训相结合。

四、教学时数:

第8-9周6小时

五、作业及上机练习:

P.139--1.3.4.6.7.8.

5.1向量(Vector)

向量(Vector)是常见的数据结构,向量对象由java.util包中的Vector类来创建.它类似数组结构,但不要求每个元素的类型相同,向量中可以混合多种数据类型.向量元素可动态增加.Vector类中的对象不但可以顺序存储数据,还封装了一些方法来处理和操作向量中的数据,使用非常方便.

5.1.1创建向量对象:

(1)Vectorstu=newVector();//使用无参数构造函数创建向量对象,不给出向量大小

(2)带参数的构造函数

PublicVector(intCapacity,intIncreament);//形参intCapacity–容量(初始化向量元素多少);intIncreament–追加元素个数,如:

Vectorstu=newVector(40,5);//容量为40个元素,一次可添加5个元素.

5.1.2向量对象的常用方法:

1.添加元素方法

(1)publicvoidadd(Objecto):

将新对象o添加到向量末尾.

(2)publicvoidadd(intindex,Objecto):

将新对象o添加到向量的指定索引位置.

(3)publicvoidinsertElement(Objecto,intindex):

将新对象o插入到向量的指定索引位置.

(4)publicvoidaddElement(Objecto,intindex):

将新对象o添加到向量指定索引位置.

2.修改和删除向量元素

(1)publicvoidset(Objecto,intindex):

将指定索引位置的对象设置为o,覆盖原来的对象.

(2)publicvoidsetElement(Objecto,intindex):

将指定索引位置的对象设置为o,覆盖原来的对象元素.

(3)publicbooleanremoveElement(Objecto):

将向量序列中第一次出现的对象o删除,同时将后面元素移补上前删除空位.

(4)publicvoidremoveALLElement():

将向量序列中所有对象删除.

(5)publicObjectremove(intindex):

将向量序列中指定索引位置的对象元素删除,并返回该对象.

(6)publicObjectElementAt(intindex):

获取向量序列中指定索引位置的对象.

(7)publicObjectget(intindex):

获取向量序列中指定索引位置的对象.

(8)publicObjectfirstElement():

获取向量序列中的第一个对象.

(9)publicObjectlastElement():

获取向量序列中在的最后一个对象.

(10)publicEnumerationElement():

获取向量序列中的一个枚举对象.

(11)publicindexindexOf(Objecto):

获取对象o在向量序列中首次出现的位置.

(12)publicindexlastIndexOf(Objecto):

获取对象o在向量序列中最后出现的位置.

(13)publicindexlastIndexOf(Objecto,intindex):

获取向量序列中在向量位置之前出现的最后位置.

(3)publicbooleancontains(Objecto):

判断对象o是否是向量成员.

例5-1TestVector1.java-使用向量

importjava.util.*;

publicclassTestVector1

{

publicstaticvoidmain(Stringargs[])

{

Stringnames[]={"Merry","Martin","Bob","David"};

intnamesLen=names.length;//获取数组长度

Vectorstu=newVector();//创建向量对象实例

for(inti=0;i

stu.addElement(names[i]);//将数组元素值添加到向量对象末尾.

}

intstuLen1=stu.size();//获取向量对象长度(元素大小)

for(inti=0;i

System.out.println(stu.elementAt(i));//输出向量对象元素

}

}

}

例5-2TestVector2.java-使用向量依次存储不同数据类型

importjava.util.*;

classTestVector2

{publicstaticvoidmain(Stringargs[]){

Vectorvector=newVector();

Datedate=newDate();

vector.add(newInteger(18));//依次添加整数对象18到向量对象末尾,以下依次类推.

vector.add(newFloat(99.9f));

vector.add(newDouble(100.08));

vector.add(newBoolean(true));

vector.add(date);

System.out.println("向量的总长度:

"+vector.size());

System.out.println("向量的第1个元素:

"+vector.firstElement());//输出向量中元素对象

System.out.println("向量的第2个元素:

"+vector.elementAt

(1));

System.out.println("向量的第3个元素:

"+vector.get

(2));

System.out.println("向量的第4个元素:

"+vector.get(3));

System.out.println("向量的第5个元素:

"+vector.lastElement());

if(vector.contains(date))//如果向量中包含日期对象

{vector.addElement(newString("verygood!

"));//添加字符串对象到向量对象末尾

System.out.println("向量的最后一个元素:

"+vector.lastElement());

}

}

}

【例13.12】向量随机排列

importjava.util.Vector;

publicclassExample13_12

{publicstaticvoidmain(Stringargs[])

{Vectorvector=newVector();//创建向量对象

inta[]={1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4};

System.out.println("随机排列之前的数组:

");

for(inti=0;i

{System.out.print(""+a[i]);//输出数组元素

}

System.out.println("");

for(inti=0;i

{vector.add(newInteger(a[i]));//将数组对象元素添加到向量对象中

}

intk=0;

while(vector.size()>0)

{intindex=(int)(Math.random()*vector.size());//产生16个随机整数索引

intnumber=((Integer)vector.get(index)).intValue();//取得索引对应值

a[k]=number;//存入数组

k++;

vector.removeElementAt(index);//删除向量中对应索引的元素

}

System.out.println("随机排列之后的数组:

");

for(inti=0;i

{System.out.print(""+a[i]);//输出经随机排列的数组元素

}

System.out.println();}

}

5.1.3枚举(Enumeration)–Vector类也可以用枚举器来列举和存放许多元素。

Vector类的Enumeration()方法可返回一个Enumeration接口,该接口有两个常用方法:

(1)hasMoreElements()//判断是否还有元素

(2)nextElement()//下一个元素

使用方法如下:

例5-3TestEnumeration

importjava.util.*;

publicclassTestEnumeration

{

publicstaticvoidmain(Stringargs[])

{

Stringnames[]={"dog","cat","fish","bird"};//创建字符串数组对象并初始化数组

intnamesLen=names.length;//取得数组长度

Vectoranimal=newVector();//创建向量对象

for(inti=0;i

animal.addElement(names[i]);

}

Enumerationenum1=animal.elements();//用向量对象的elements()方法获取一个枚举对象

Stringname=null;

//while循环枚举对象中判断是否还有元素,如果有取出枚举中的元素并输出

while(enum1.hasMoreElements())

{

name=(String)enum1.nextElement();//下一个元素

System.out.println(name);//输出枚举对象中的元素

}

}

}

5.2散列表(Hashtable-哈希表)

数组,向量提供了集合内容的顺序访问,哈希表可以对集合内容进行随机访问。

哈希表是使用关键字查找被存储的数据项的一种数据结构,可以通过键(名)-值对应集合内容进行随机访问,是Map接口的主要实现类.

5.2.1创建哈希表对象–用java.util包中Hashtable类的构造函数来创建,其Hashtable类的构造函数如下:

(1)publicHashtable();创建具有默认容量和装载因子为0.75的散列表

(2)publicHashtable(intintialCapacity);创建具有指定容量和装载因子为0.75的散列表.

(3)publicHashtable(intintialCapacity,floatloadFactor);创建具有指定容量和指定装载因子的散列表.如:

Hashtabletable1=newHashtable();

5.2.2哈希表主要方法如下:

(1)publicvoidput(Objectkey,Objectvalue)--加进对象(键/值)关键字/数值对.

(2)publicObjectget(Objectkey)—取得一个关键字的值.

(3)publicObjectremove(Objectkey)---删除一个元素

(4)publicintsize()---取得哈希表中关键字的数目

(5)publicBooleanempty()---判断哈希表是否为空

(6)publicEnumerationkeys()---取得所有关键字设置

(7)publicEnumerationelements()---取得所有数值的设置,两者都返回Enumeration.

例5-4TestHarsh.java

importjava.util.*;

publicclassTestHarsh

{

publicstaticvoidmain(Stringargs[])

{

Stringsubject[]={"语文","数学","英语","政治"};//创建字符串科目数组代表键(名)

Stringscore[]={"88","99","96","92"};//创建字符串分数数组代表键(名)对应值

Hashtablehash=newHashtable();//创建哈希表对象

for(inti=0;i

hash.put(subject[i],score[i]);//将科目数组和分数数组加进hash对象中(键/值)对

}

//取得hash表中所有关键字并赋给枚举对象元素(返回枚举类型Enumeration.)

Enumerationenum1=hash.keys();

Objectobj;//声明引用对象变量

//判断枚举对象是否还有元素,如果有while循环输出键值对

while(enum1.hasMoreElements()){

//枚举对象的nextElement()方法取得下一个枚举元素值(键/值)

obj=enum1.nextElement();

System.out.println(obj+":

"+hash.get(obj));//输出取得的关键字和枚举元素值(键/值)

}

}

}

5.3数据结构中的接口

Java2数据结构提供了4种重要接口:

Collection﹑List﹑Set﹑Iterator接口,用于描述不同类型的数据结构.

5.3.1Collection接口

Collection接口是任何对象组的集合,对象的存放没有一定的顺序,并且允许重复,可以存放几个相同的对象.Collection接口的常用方法如下:

(1)publicbooleanadd(objecto)–向集合添加对象.

(2)publicbooleanremove(objecto)–从集合删除对象.

(3)publicbooleancontains(objecto)–判断是否包含对象.

(4)publicbooleanequals(objecto)–比教两个对象是否相同

例5-5TestCollection.java–使用Collection接口

importjava.util.*;

publicclassTestCollection{

publicstaticvoidmain(Stringargs[]){

StringstrNumber[]={"one","two","three","one","four","five","six","seven","eight"};

intstrlen=strNumber.length;//获得数组长度

CollectionNumbers=newVector();//创建向量对象使用Collection接口的变量引用

for(inti=0;i

Numbers.add(strNumber[i]);//添加数组元素值到Collection接口集合对象中

}

Objects[]=Numbers.toArray();//将集合对象转换为数组

for(inti=0;i

System.out.println(s[i].toString());//

}

}

}

5.3.2Set接口

集合是由不重复元素组成的.Set集合接口中的元素不重复,且至多包含一个null元素.

例5-6TestSet.java使用Set接口(对象无序存放)

importjava.util.*;

classTestSet{

publicstaticvoidmain(String[]args){

HashSeth=newHashSet();//创建哈希Set集合接口对象

h.add("1st");//向集合添加对象

h.add("2nd");

h.add(newInteger(3));

h.add(newDouble(4.0));

h.add("2nd");//重复元素,未被加入

h.add(newInteger(3));//重复元素,未被加入

m1(h);//调用m1(h)方法输出集合

}

publicstaticvoidm1(Sets){//m1方法形式参数为Set无序集合接口

System.out.println(s);//输出集合

}

}

5.3.3List接口

List接口是一种可含有重复元素的,有序的数据集合,也称序列.用户可以控制向序列中插入元素的位置,并可按元素的位序(加入顺序)来进行访问,位序从0开设.

5-7TestList.java使用List接口(可存储重复元素)

importjava.util.*;

classTestList{

publicstaticvoidmain(String[]args){

ArrayListh=newArrayList();//创建List接口对象

h.add("one");//在List接口对象中添加不同类型的对象元素

h.add("two");

h.add(newInteger(111));

h.add(newDouble(2.22));

h.add("one");//加入重复元素

h.add(newInteger(111));//加入重复元素

m1(h);

}

publicstaticvoidm1(Lists){//m1方法参数为List有序集合接口

System.out.println(s);//输出List接口对象中的对象元素

}

}

5.3.4Iterator接口

可以通过任何Collection接口中定义的iterator()方法获得一个Iterator对象.List接口中声明了三种方法hasNext(),next(),remove().Set对象对应的Iterator仍然是无序的.

例5-8TestIterator.java使用Iterator接口

importjava.util.*;

classTestIterator{

publicstaticvoidmain(String[]args){

ArrayListh=newArrayList();//创建List接口对象

h.add("one");//在List接口对象中添加不同类型的对象元素

h.add("two");

h.add(newInteger(111));

h.add(newDouble(2.22));

Iteratorit=h.iterator();//用List接口对象集合的方法iterator()获得一个Iterator接口对象

while(it.hasNext()){//判断Iterator接口对象中是否有对象元素

System.out.println(it.next());//输出对象元素

}

}

}

5.4堆栈

堆栈(Stack)是一种遵循:

”后进先出”原则的重要线性数据结构,只允许在一端输入和输出线性的顺序表.堆栈把一个输入的数据放在最底下,把后面放入的数据放在已有数据的顶上,最后输入的数据在堆栈的最上面.这样堆栈就有一个固定的栈底和一个浮动的栈顶.允许输入和输出的一端称为栈顶(top),另一端称为栈底(bottom).

向堆栈中压入数据的操作称为”压栈”;从堆栈中输出数据的操作称为”弹栈”.由于堆栈总是在栈顶进行数据的输入输出操作,所以弹栈总是先输出最后压入堆栈中的数据,这就是后进先出的原理.

在Java中,使用jsva.util包中的Stack类来创建堆栈对象.如:

Stackperson=newstack();//Stack()是Stack类唯一的构造函数

Stack类是向量Vector类的子类,所以Stack类不但具有Vector类的所以方法,同时还有自己操作堆栈对象的方法,主要方法如下.

PublicObjectpush(Objecto)--将对象压入(输入)堆栈的操作.

Pubilcobjectpop(Objecto)--将栈顶对象弹出(输出)堆栈的操作.

PublicBooleanempty()--判断堆栈是否还有数据,若有数据,返回false;否则返回true.

PublicObjectpeek():

--查看并返回堆栈顶端数据,但不删除.

Publicintsearch(Objecto);查看数据在堆栈中的位置,最顶端的位置1,向下依次增加,如果堆栈不含该数,则返回-1.

例5-9TestStack.java-堆栈类的使用

importjava.util.*;

classTestStack

{publicstaticvoidmain(Stringargs

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1