文档库 最新最全的文档下载
当前位置:文档库 › 数据结构复习资料java数据结构期末考试

数据结构复习资料java数据结构期末考试

数据结构复习资料java数据结构期末考试
数据结构复习资料java数据结构期末考试

第二章算法分析

1.算法分析是计算机科学的基础

2.增长函数表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。增长函数表示与该问题大小相对应的时间或空间的使用

3.渐进复杂度:随着n的增加时增长函数的一般性质,这一特性基于该表达式的主项,即n 增加时表达式中增长最快的那一项。

4.渐进复杂度称为算法的阶次,算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出来的。算法的阶次为增长函数提供了一个上界。

5.渐进复杂度:增长函数的界限,由增长函数的主项确定的。渐进复杂度类似的函数,归为相同类型的函数。

6.只有可运行的语句才会增加时间复杂度。

7. O() 或者大O记法:与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复

8.所有具有相同阶次的算法,从运行效率的角度来说都是等价的。

9.如果算法的运行效率低,从长远来说,使用更快的处理器也无济于事。

10.要分析循环运行,首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。(n 表示的是问题的大小)

11.分析嵌套循环的复杂度时,必须将内层和外层循环都考虑进来。

12.方法调用的复杂度分析:

如:public void printsum(int count){

int sum = 0 ;

for (int I = 1 ; I < count ; I++)

sum += I ;

System.out.println(sun);

}

printsum方法的复杂度为O(n),计算调用该方法的初始循环的时间复杂度,只需把printsum方法的复杂度乘以该循环运行的次数即可。所以调用上面实现的printsum方法的复

杂度为O(n2)。

13指数函数增长> 幂函数增长> 对数函数增长

第三章集合概述——栈

1.集合是一种聚集、组织了其他对象的对象。它定义了一种特定的方式,可以访问、管理所包含的对象(称为该集合的元素)。集合的使用者——通常是软件系统中的另一个类或对象——只能通过这些预定的方式与该集合进行交互。

2.集合可分为线性集合和非线性集合。线性集合是一种元素按直线方式组织的集合。非线性集合是一种元素按某种非直线方式组织的集合,例如按层次组织或按网状组织。从这种意义上来说,非线性集合也许根本就没有任何组织形式。

3.集合中的元素通常是按照它们添加到集合的顺序,或者是按元素之间的某种内在关系来组织的。

4.抽象能隐藏某些细节。

5.集合是一种隐藏了实现细节的抽象。

6.对象是用于创建集合一种完美机制,因为只要设计正确,对象的内部工作对系统其他部分而言是被封装的。几乎在所有情况下,在类中定义的实例变量的可见性都应声明为私有的(private)。因此,只有该类的方法才可以访问和修改这些变量。用户与对象的唯一交互只能通过其公用方法。公用方法表示了对象所能提供的服务。

7.数据类型是一组值及作用于这些数值上的各种操作。

8.抽象数据类型(ADT)是一种在程序设计语言中尚未定义其值和操作的数据类型。ADT 的抽象性体现在,ADT必须对其实现细节进行定义,且对这些用户是不可见的。因此,集合是一种抽象数据类型。

9.数据结构是一种用于实现集合的基本编程结构。

10.Java集合API(应用程序编程接口)是一个类集,表示了一些特定类型的集合,这些类的实现方式各不相同。

11.栈的元素是按照后进先出(LIFO)的方式进行处理的,最后进入栈中的元素最先被移出。栈是一种线性集合,元素的添加和删除都在同一端进行。在科学计算中,栈的基本使用就是用于颠倒顺序(如一个取消操作)。

12.通常垂直的绘制栈,栈的末端称为栈的顶部,元素的添加和删除在顶部进行。

13.如果pop或者peek可作用于空栈,那么栈的任何实现都要抛出一个异常。集合的作用不是去确定如何处理这个异常,而是把它报告给使用该栈的应用程序。在栈中没有满栈的概念,应由栈来管理它自己的存储空间。

14.栈的toString()操作可以在不修改栈的情况下遍历和现实栈的内容,对调试非常有用。

15.类型兼容性是指把一个对象赋给引用的特定赋值是否合法。

16.继承就是通过某个现有类派生出一个新类的过程。多态:使得一个引用可以多次指向相关但不同的对象类型,且其中调用的方法是在运行时与代码。多态引用是一个引用变量,它可以在不同地点引用不同类型的对象。继承可用于创建一个类层次,其中,一个引用变量可用于只想与之相关的任意对象。类层次:通过继承创建的类之间的关系,某个类的子类可以成为其他类的父类

17.一个Object引用可用于引用任意对象,因为所有类最终都是从Object类派生而来的。

18.泛型,用泛型定义类:使这个类能存储、操作和管理在实例化之前没有指定是何种类型的对象。

19.泛型不能被实例化。它只是一个占位符,允许我们去定义管理特定类型的对象的类,且只有当该类被实例化时,才创建该类的对象。

20.计算后缀表达式:从左到右扫描,把每个操作符应用到其之前的两个紧邻操作数,并用该计算结果代替该操作符。

21.栈是用于计算后缀表达式的理想数据结构。

22.用栈计算后缀表达式时,操作数是作为一个Integer对象而不是作为一个int基本数值被压入栈中的,这是因为栈被设计为存储对象的。注意:第一个弹出的操作数是表达式的第二个操作数,第二个弹出的操作数是表达式的第一个操作数。

23.Javadoc注释以/** 开始,以*/ 结束。Javadoc标签用于标识特定类型的信息。@auther 标签用于标识编写代码的程序员。@version标签用于制定代码的版本号。@return标签用于表明该方法的返回值。@param标签用于标识传递给该方法的每个参数。

24.异常就是一个对象,它被定义了一种非正常或错误的情况。异常由程序或运行时环境抛出,可以按预期的被捕获或被正确处理。错误与一场异常类似,只不过错误往往表示一种无法恢复的情况,且不必去捕获它。

25.接口的命名:用集合名+ADT来为集合接口命名。

26.取消操作通常是使用一种名为drop-out的栈来实现。它与栈唯一的不同是,它对存储元素的数量有限制,一旦达到限制,如果有新元素要压入,那么栈底的元素将从栈中被丢弃。

27.数组一旦创建好,其容量是不能改变的。

28.处于运行效率的考虑,给予数组的栈实现总是使栈底位于数组的索引0处。

29.ArrayStack类有两个构造函数,一个使用的是默认容量,一个使用的是制定容量。

30.构造函数与成员方法的区别:

a)构造函数是初始化一个类的对象时调用,无返回值。名字与类名相同

b)成员函数由类对象主动调用,使用点操作符(“.”),又返回值。

31. private T[] stack;

Stack = (T[]) ( new Object[DEFAULT_CAPACITY]);

由于不能实例化一个泛型对象,这里实例化了一个Object数组,然后将它转换为一个泛型数组。

32.push()

public void push(T element) {

if(size()==stack.length)

expandCapacity();

stack[top]= element;

top++;

}

33.pop()

public T pop() throws EmptyCollectionException

{

if (isEmpty())

throw new EmptyCollectionException("Stack");

top--;

T result=stack[top];

stack[top]=null;

return result;

}

34.peek()

public T peek()throws EmptyCollectionException {

if(isEmpty())

throw new EmptyCollectionException("Stack");

return stack[top-1];}

35.private void expandCapacity(){

T[]larger = (T[])(new Object[stack.length*2]);

for (int index=0; index

larger[index]=stack[index];

stack = larger;

}

第四章链式结构——栈

1.对象引用变量可以用来创建链式结构。链式结构是一种数据结构,它使用对象引用变量来创建对象之间链接。链式结构是基于数组的集合实现的主要替代方案。

2.对象引用变量存放的是对象的地址,表示该对象在内存中的存储位置。我们通常并不是显示地址,而是把引用变量描绘成一种“指向”对象的名字,这种引用变量又称为指针。

3.链表由一些对象构成,是一种链式结构,其中的一个对象可以指向另一个对象,从而在链表中创建一个对象的线性次序。链表中存储的对象通常泛称为该链表的结点。

4.需要一个单独的引用变量来表示链表的首结点。链表终止于其next引用为空的结点。

5.链表只是链式结构的一种。如果建立的类含有多个指向对象的引用,就可以创建更复杂的链式结构。链接的管理方式表明了这种链式结构的特定组织形式。

6.链表会按需动态增长,因此在本质上,它没有容量限制(在不考虑计算机本身的内存限制下)。

7.链表的大小可以按需伸缩以容纳要存储的元素数量,因此链表被认定为是一种动态结构。在java语言中,所有动态创建的对象都来自于一个名为系统堆或自由存储的内存区。

8.对于链表来说,访问链表的元素的唯一方式是,从第一个元素开始,顺着该链表往下进行。

9.结点可以被插入到链表的任意位置。在链表前端架结点时,需重新设置指向整个链表的引用:

a)新添加结点的next引用被设置为指向链表的当前首结点;

b)指向链表前端的引用重新设置为指向这个新结点。

如果颠倒顺序,即先重新设置front引用,那么就失去了那个唯一指向现有链表的引用,于是再也检索不到该链表了。

10.改变引用顺序是维护链表的关键。

11.链表的任一结点都可被删除。要删除链表的首结点,需要重置指向链表前端的引用,使其指向链表当前的次。如果其他地方需要这个被删除的结点,那么在重制front引用之前,必须创建一个指向被删除结点的单独引用。

12.链表的一个关键特征:必须把链表结构的细节内容与链表所储存的元素区分开来

13.存储在集合中的对象不应该含有基本数据结构的任何实现细节。

14.节点类含有两个引用:一个引用指向链表的下一结点,另一个引用指向将存储到链表中的那个元素。这时,链表中所存储的实际元素是使用结点对象中单独引用来访问的。

15.双向链表中,需维护两个引用:一个指向链表的首结点,一个指向链表的末结点。链表中的每个结点都存有两个引用:一个指向下一元素,一个指向上一元素。

16.哨兵结点或哑结点:位于链表前端或末端的结点,起标记符作用,不表示链表中的某个元素。如果要在双向链表中使用哑结点,那么就得在链表的两端都放置哑结点。

17.递归使用了程序栈的概念,程序栈又称运行时栈,用于跟踪被调用的方法。每调用一个方法时,就会创建一个表示该调用的调用记录,并压入到程序栈中。因此,栈中的元素表示的是在一个正在运行程序中,到达某个位置时所调用的方法系列。

18.程序运行出现异常时,可检查调用跟踪栈,来发现问题出自于哪个方法。

19.可以使用栈来模拟递归处理,以便跟踪恰当的数据。

20.用链表实现栈:

a)Push:

public void push(T element){

LinearNode temp = new LinearNode(element);

temp.setNext(top);

top = temp;

count++;

}

b) Pop:

public T pop() throws EmptyCollectionException {

i f(isEmpty())

throw new EmptyCollectionException("stack");

T result = top.getElement();

top = top.getNext();

count--;

r eturn result;

}

第五章队列

1.队列是一种线性集合,其元素从一端加入,另一端删除。因此,队列元素是按先进先出(FIFO)方式处理的。从队列中删除元素的次序,与往队列中放置元素的次序是一样的。元素都是从队列末端(rear)进入,从队列前端(front)退出。

2.用链表实现栈:

a)队列和栈的主要区别在于,队列中我们必须要操作链表的两端。因此需要两个引用

分别指向链表的首、末元素。

b)对于单向链表,可选择从末端入列,从前端出列。

c)双向链表可以解决需要遍历链表的问题,因此在双向链表实现中,无所谓在哪端入

列和出列。

d)对于一个空队列,head和tail引用都为null,count为0。队列中只有一个元素时,

head和tail引用都会指向这个对象。

e)Enqueue:将新元素放到链表末端

public void enqueue(T element) {

LinearNode node = new LinearNode(element);

if(isEmpty())

head = node;

else

tail.setNext(node);

tail = node;

count++;

}

f)Dequeue

public T dequeue() throws EmptyCollectionException {

if(isEmpty())

throw new EmptyCollectionException("queue");

T result = head.getElement();

head = head.getNext();

count--;

if(isEmpty())

tail = null;

return result;

}

3.用数组实现队列:

a)由于队列操作会修改集合的两端,因此将一端固定于索引0出要求移动元素。

b)非环形数组实现的元素位移,将产生O(n)的复杂度。

c)把数组看作是环形的,可以除去在队列的数组实现中元素的移位需要。

d)环形数组:如果数组的最后一个索引后面跟的是第一个索引,那么该数组就可用作

环形数组。

e)用两个整数值表示队列的前端和末端。front的值表示的是队列的首元素存储的位

置,rear的值表示的是数组下一个可用单元(不是最后一个元素储存的位置),此

时rear的值不在表示队列元素的数目了。

f)Enqueue:

public void enqueue(T element) {

if(size() == queue.length)

expendCapacity();

queue[rear] = element;

rear = (rear + 1) % queue.length;

count++;

} Array注意:环形增加

rear

e) Dequeue:

public T dequeue() throws EmptyCollectionException { if(isEmpty())

throw new EmptyCollectionException("queue");

T result = queue[front];

queue[rear] = null;

front = (front + 1)%queue.length;

count--;

return result;

}

4.队列是一种可存储重复编码密钥的便利集合。

5.队列的链表实现中,head和tail引用相等的情况:

a)队列为空:head和tail都为null

b)队列中只有一个元素

6.队列的环形数组实现中,front和rear引用相等的情况:

a)队列为空

b)队列为满

7.dequeue操作复杂度为O(n)的非环形数组实现的时间复杂度最差

8.环形数组和非环形数组都会因未填充元素而浪费空间。链表实现中的每个存储元素都会占用更多的空间。

第六章列表

1.链表和列表集合之间的差别:

a)链表是一种实现策略,使用引用来在对象之间创建链接,如前面用链表来实现了栈

和队列集合。

b)列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行组织。就像

栈和队列一样,列表也可以使用链表或数组来实现。

2.列表集合没有内在的容量大小,它可以随着需要增大。

3.栈和队列都是线性结构,可以像列表那样进行思考,但元素只能在末端添加和删除。列表集合更一般化,可以在列表的中间和末端添加和删除元素。In other words,栈和队列都属于列表,列表可任意操作。

4.列表可分为:

a)有序列表:其元素按照元素的某种内在特性进行排序;

b)无序列表:其元素间不具有内在顺序,元素按照它们在列表中的位置进行排序。

c)索引列表:其元素可以用数字索引来引用。

5.有序列表是基于列表中元素的某种内在特征的。列表基于某个关键值排序。对于任何已添加到有序列表中的元素,只要给定了元素的关键值,同时已经定义了元素的所有关键值,那么它在列表中就会有一个固定的位置。

6.无序列表中各元素的位置并不基于元素的任何内在特性。但列表中的元素是按照特殊顺序放置着,只不过这种顺序与元素本身无关。列表的使用者会决定元素的顺序。无序列表的新元素可以加到列表的前端、后端,或者插到某个特定元素之后。

7.索引列表与无序列表类似,各元素间也不存在能够决定它们在列表中的顺序的内在关系。列表的使用者决定了元素的顺序。除此之外,索引列表的每个元素都能够从一个数字索引值得到引用,该索引值从列表头开始从0连续增加直到列表末端。索引列表的新元素可以加到列表的任一位置,包括列表的前端和后端。每当列表发生改变,索引值就相应调整以保持顺序和连续性。索引列表为它的元素维护一段连续的数字索引值。

8.索引列表和数组的根本区别在于:索引列表的索引值总是连续的。如果删除了一个元素,其他元素的位置会像“坍塌”了一样消除产生的空隙。当插入一个元素时,其他元素的索引将进行位移以腾出位置。

9.列表有可能既是有序列表,又是索引列表,但这种设计没有什么意义。

10.Java集合API中的列表:

a)Java集合API提供的列表类只要是支持索引列表。在一定程度上,这些类与无序

列表是重叠的。

i.注意:java API并没有任何类能直接实现以上描述的有序列表。

b) List接口:

11.数组实现列表:使用环形数组方法,但当从列表中间插入或者删除元素时,仍需移动元素。

a)Remove操作:

public T remove(T element) throws ElementNotFoundException{ T result;

int index = find(element);

if(index == NOT_FOUND)

throw new ElementNotFoundException("ArrayList");

result = list[index];

rear--;

for(int scan=index;scan

list[scan]=list[scan+1];

list[rear]=null;

return result;

}

注意:

程序中的for循环,当循环结束后,scan等于rear。因为当scan==rear-1时,最后运行一次list[scan]=list[scan+1],然后scan++,不满足scan

退出循环。

复杂度为O(n)。

b) find方法:

private int find(T target){

int scan = 0;

int result = NOT_FOUND;

if(!isEmpty())

while (result == NOT_FOUND && scan < rear) {

if(target.equals(list[scan]))

result = scan;

else

scan++;

}

return result;

}

注意:find方法依靠equals方法来判断目标元素是否已找到。

c) contains操作

public boolean contains(T target){

return (find(target)!=NOT_FOUND);

}

如果没有找到目标元素,contains方法将返回false。如果找到了,返回true。由于该方法执行的是列表的线性查找,因此最坏的情况是所查找的元素不

在列表中。在这种情况下需要n个比较操作。因此该方法平均需要n/2次比较操

作,因而其复杂度为O(n)。

d)有序列表的add操作:

public void add(T element) {

if(size()==list.length)

expandCapacity();

Comparable temp =(Comparable)element;

int scan =0;

while(scan0)

scan++;

for(int scan2=rear; scan2>scan;scan2--)

list[scan2]=list[scan2-1];

list[scan]=element;

rear++;

}

注意:

复杂度为O(n)。

只有Comparable对象才能存储在有序列表中。

e) Comparable接口定义了compareTo方法,当执行对象为小于、等于或者大于传入参数时,该方法将分别返回一个负整数、0或者一个正整数。

无序列表和索引列表不要求它们所存储的元素是Comparable的。

f)无序列表的操作

public void addAfter(T element,T target) {

if(size()==list.length)

expandCapacity();

int scan=0;

while(scan

scan++;

if(scan==rear)

throw new NoSuchElementException();

for(int i=rear;i>scan+1;i--)

list[i]=list[i-1];

list[scan+1]=element;

rear++;

}

public void addToFront(T element) {

if(size()==list.length)

expandCapacity();

for(int i=rear;i<0;i--)

list[i]=list[i-1];

list[0]=element;

rear++;

}

public void addToRear(T element) {

if(size()==list.length)

expandCapacity();

list[rear]=element;

rear++;

}

注意:addToFront操作的复杂度为O(n),addToRear的为O(1)

addAfter的为O(n)。

12.用链表实现列表

a)Remove操作:

4种情况:

要删除的元素是唯一元素;

是首元素;

是末元素;

处于列表中间的元素。

最坏的情况下,仍需进行n次比较,以确定目标元素不在列表中。因此remove操作的复杂度是O(n)。

public T remove(T targetElement) throws ElementNotFoundException,

EmptyCollectionException { if (isEmpty())

throw new EmptyCollectionException("List");

boolean found = false;

LinearNode previous = null;

LinearNode current = head;

while(current !=null &&!found)

if(targetElement.equals(current.getElement()))

found = true;

else

{ previous = current;

current = current.getNext();

}

if(!found)

throw new ElementNotFoundException("List");

if(size()==1)

head=tail=null;

else if(current.equals(head))

head=current.getNext();

else if(current.equals(tail))

{ tail = previous;

tail.setNext(null);

}

else

previous.setNext(current.getNext());

count--;

return current.getElement();

}

b)有序列表的add操作(仅供参考)

public class LinkedOrderedList42

super T>> extends LinkedList42 implements

OrderedListADT{

@Override

public void add(T element) {

LinearNode node = new LinearNode(element);

LinearNode temp = head;

LinearNode temp0 = temp;

if(isEmpty()){

head = tail = node;

count++;

}

else{

if(size()==1){

if(head.getElement().compareTo(element)>0){

node.setNext(head);

head = node;

count++;

}else{

head.setNext(node);

tail = node;

count ++;

}

}else if(head.getElement().compareTo(element)>=0){ node.setNext(head);

head = node;

count++;

}

else{

while(temp !=tail &&

temp.getElement().compareTo(element)<0){

temp0 = temp;

temp = temp.getNext();

}

if(temp == tail){

if(temp.getElement().compareTo(element)<0){

temp.setNext(node);

tail = node;

count++;

}else{

node.setNext(temp);

temp0.setNext(node);

count++;

}

}else{

node.setNext(temp);

temp0.setNext(node);

count++;

}

}

}

}

}

c)无序列表的操作

public class LinkedUnorderedList42 extends LinkedList42 implements UnorderedListADT{

@Override

public void addToFront(T element) {

LinearNode New = new LinearNode(element);

if(count == 0){

tail = New;

head = New;

count ++;

}

else{

New.setNext(head);

head = New;

count ++;

}

}

@Override

public void addToRear(T element) {

LinearNode New = new LinearNode(element);

if(count == 0){

tail = New;

}else{

tail.setNext(New);

tail = New;

}

count ++;

}

@Override

public void addAfter(T element, T target) {

LinearNode New = new LinearNode(element);

LinearNode current=head;

if(contains(target)){

while(!target.equals(current.getElement())){

current = current.getNext();

}

New.setNext(current.getNext());

current.setNext(New);

current = New;

if(New.getNext().equals(null))

tail = New;

count ++;

}else

return;

}

}

13.许多共有的操作可以定义给所有的列表类型。列表之间的区别在于如何添加元素。

14.迭代器是一个对象,它提供了在一个集合上进行迭代操作的手段。

15.接口也可以用来派生其他接口。子接口包含父接口的所有抽象方法。

16.接口名可以用来声明一个对象引用变量。一个接口引用可以用来引用实现了该接口的任意类的任意对象。

17.接口允许我们创建多态引用,其中被调用的方法是基于被引用的特定对象的。

18.Josephus问题(当列表中的事件不是按顺序取出而是按每隔i个元素提取,直到一个不剩时,如何找到这些事件的顺序)是一个典型的适用于索引列表来求解的计算问题。

19.访问索引列表的基本方法

a)通过访问列表的特定索引位置

b)通过访问列表的末端

c)通过值来访问列表中的对象

第七章迭代器

1.迭代器是一个对象,允许用户每次获得和使用集合中的一个元素。它与某个集合一同使用,但它是一个单独的对象。迭代器是有助于实现某个集合的一种机制。

2.Iterator接口的方法

a)boolean hasNext():如果迭代器中还有更多元素,返回true

b) E next():返回迭代器的下一个元素

c)void remove():从基本集合中返回最后删除的元素。

3.toString的迭代器实现(仅供参考):

String result = “”;

while(I.hasNext())

result += I.next() + “→”;

result += “null”;

4.数组实现迭代器:

5.链表实现迭代器:

第八章递归

1.概念

2.两个基本前提

第九章怕uxuyuchazhao

数据结构-第六章-图-练习题及答案详细解析(精华版)

图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度

⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。

面试时的Java数据结构与算法

精心整理面试时的Java数据结构与算法 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是 对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6,3.这样一次冒泡就完了,把最小的数3排到最前面了。对剩下的序列依次冒泡就会得到一个有序序列。冒泡排序的时间复杂度为O(n^2)。 实现代码:

/** *@Description:冒泡排序算法实现*@author王旭 */ publicclassBubbleSort{ } } } } arr[i]=arr[j]; arr[j]=temp; } } 选择排序

选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。举个栗子,对5,3,8,6,4这个无序序列进行简单选择排序,首先要选择5以外的最小数来和5交换,也就是选择3和5交换,一次排序后就变成了3,5,8,6,4.对剩下的序列一次进行选择和交换,最终就会得到一个有序序列。其实选择排序可 /** */ minIndex=i; for(intj=i+1;j//从i+1开始比较,因为minIndex默认为i了,i就没必要比了。 if(arr[j]arr[minIndex]){ minIndex=j; }

数据结构复习资料,java数据结构期末考试

第二章算法分析 1.算法分析是计算机科学的基础 2.增长函数表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。增长函数表示与该问题大小相对应的时间或空间的使用 3.渐进复杂度:随着n的增加时增长函数的一般性质,这一特性基于该表达式的主项,即n 增加时表达式中增长最快的那一项。 4.渐进复杂度称为算法的阶次,算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出来的。算法的阶次为增长函数提供了一个上界。 5.渐进复杂度:增长函数的界限,由增长函数的主项确定的。渐进复杂度类似的函数,归为相同类型的函数。 6.只有可运行的语句才会增加时间复杂度。 7. O() 或者大O记法:与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复杂度。 增长函数阶次 t(n)=17 O(1) t(n)=3log n O(log n) t(n)=20n-4 O(n) t(n)=12n log n + 100n O(n log n) t(n)=3n2+ 5n - 2 O(n2) t(n)=8n3+ 3n2O(n3) t(n)=2n+ 18n2+3n O(2n) 8.所有具有相同阶次的算法,从运行效率的角度来说都是等价的。 9.如果算法的运行效率低,从长远来说,使用更快的处理器也无济于事。 10.要分析循环运行,首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。(n 表示的是问题的大小) 11.分析嵌套循环的复杂度时,必须将内层和外层循环都考虑进来。 12.方法调用的复杂度分析: 如:public void printsum(int count){ int sum = 0 ; for (int I = 1 ; I < count ; I++) sum += I ; System.out.println(sun); } printsum方法的复杂度为O(n),计算调用该方法的初始循环的时间复杂度,只需把printsum方法的复杂度乘以该循环运行的次数即可。所以调用上面实现的printsum方法的复 杂度为O(n2)。 13指数函数增长> 幂函数增长> 对数函数增长

数据结构选择题集锦

单项选择 ( B ) 1. 通常所说的主机是指∶ A) CPU B) CPU和内存C) CPU、内存与外存D) CPU、内存与硬盘 ( C )2. 在计算机内部,一切信息的存取、处理和传送的形式是∶ A) ACSII码B) BCD码C)二进制D)十六进制 ( D )3. 软件与程序的区别是∶ A)程序价格便宜、软件价格昂贵; B)程序是用户自己编写的,而软件是由厂家提供的; C) 程序是用高级语言编写的,而软件是由机器语言编写的; D) 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。 ( C )4. 所谓“裸机”是指∶ A) 单片机B)单板机C) 不装备任何软件的计算机D) 只装备操作系统的计算机 ( D )5. 应用软件是指∶ A)所有能够使用的软件B) 能被各应用单位共同使用的某种软件 C)所有微机上都应使用的基本软件D) 专门为某一应用目的而编制的软件 (A)6. C语言中的常量可分为整型常量、实型常量、字符型常量及(枚举)四种。 (A)符号常量(B)长整型常量(C)逻辑常量(D)二进制整数 ( C )7. 编译程序的功能是∶ A)发现源程序中的语法错误B)改正源程序中的语法错误 C)将源程序编译成目标程序D)将某一高级语言程序翻译成另一种高级语言程序 (A)8. 系统软件中最重要的是∶ A) 操作系统B) 语言处理系统C) 工具软件D) 数据库管理系统 ( C )9. 可移植性最好的计算机语言是∶ A) 机器语言B)汇编语言C) 高级语言D) 自然语言

( B )10. 非线性结构是数据元素之间存在一种: A)一对多关系B)多对多关系C)多对一关系D)一对一关系 ( C )11. 数据结构中,与所使用的计算机无关的是数据的结构; A) 存储B) 物理C) 逻辑D) 物理和存储 ( C )12. 算法分析的目的是: A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系 C) 分析算法的效率以求改进D) 分析算法的易懂性和文档性 (A)13. 算法分析的两个主要方面是: A) 空间复杂性和时间复杂性B) 正确性和简明性 C) 可读性和文档性D) 数据复杂性和程序复杂性 ( C )14. 计算机算法指的是: A) 计算方法B) 排序方法C) 解决问题的有限运算序列D) 调度方法 ( B )15. 计算机算法必须具备输入、输出和等5个特性。 A) 可行性、可移植性和可扩充性B) 可行性、确定性和有穷性 C) 确定性、有穷性和稳定性D) 易读性、稳定性和安全性 ( C )16.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为: (A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构 ( B )17.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是 (A)110 (B)108 (C)100 (D)120 (A)18. 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:(A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) (B)在第i个结点后插入一个新结点(1≤i≤n) (C)删除第i个结点(1≤i≤n) (D)将n个结点从小到大排序 ( B )19. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素 (A)8 (B)63.5 (C)63 (D)7 (A)20. 链接存储的存储结构所占存储空间: (A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针

《数据结构》期末考试题及答案

2011-2012学年第一学期期末考查 《数据结构》试卷 (答案一律写在答题纸上,在本试卷上做答无效) 一、选择(每题1分,共10分) 1.长度为n的线性表采用顺序存储结构,一个在其第i个位置插入新元素的算法时间复杂度为(D) A.O(0) B.O(1) C.O(n) D.O(n2) 2.六个元素按照6,5,4,3,2,1的顺序入栈,下列哪一个是合法的出栈序列?(D) A.543612 B.453126 C.346512 D.234156 3.设树的度为4,其中度为1、2、3、4的结点个数分别是4、2、1、2,则树中叶子个数为(B ) A.8 B.9 C.10 D.11 4.设森林F对应的二叉树B有m个结点,B的右子树结点个数为n,森林F中第一棵树的结点个数是( B ) A. m-n B.m-n-1 C.n+1 D.m+n 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B) A.9 B.11 C.15 D.不确定 6.下列哪一个方法可以判断出一个有向图是否有环。(A) A.深度优先遍历 B.拓扑排序 C.求最短路径 D.求关键路径 7.第7层有10个叶子结点的完全二叉树不可能有(B )个结点。 A.73 B.234 C.235 D.236 8.分别用以下序列构造二叉排序树,与用其他三个序列构造的结果不同的是(B) A.(100,80,90,60,120,110,130) B.(100, 120, 110,130,80, 60,90) C.(100,60,80,90,120,110,130) D.(100,80, 60,90, 120, 130,110) 9.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序过程中变化如下:(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47(4)15 21 25 47 84则采用的排序方法是(B ) A.选择排序 B.起泡排序 C.快速排序 D.插入排序 10.对线性表进行折半查找时,要求线性表必须(D) A.以顺序方式存储 B.以顺序方式存储,且数据元素有序

数据结构(java)复习题及答案

一、选择题 1、数据结构在计算机内存中的表示是指____A__ A.数据的存储结构 B.数据结构 C. 数据的逻辑结构 D.数据元素之间的关系 2、若一个算法的时间复杂度用T(n)表示,其中n的含义是( A )A.问题规模 B.语句条数 C.循环层数 D.函数数量 3、下列选项中与数据存储结构无关的术语是( D ) A.顺序表 B.链表 C.链队列 D.栈 4、已知循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下一个位置,则向队列中插入新元素时,修改指针的操作是( D ) =(rear-1)%m; =(front+1)%m; =(front-1)%m; =(rear+1)%m; 5、栈和队列的共同点是__C______ A.都是先进后出 B.都是先进先出 C.只允许在端点处插入和删除元素 D.没有共同点 6、已知一堆栈的进栈序列为1234,则下列哪个序列为不可能的出栈序列______D__ 7、具有线性结构的数据结构是( C ) A.树 B.图 C.栈和队列 D.广义表 8、假设以数组A[60]存放循环队列的元素,其头指针是front=47,当前队列有50个元素,则队列的尾指针值为( B ) A.3 B.37 C.50 D.97

9、若栈采用链式存储结构,则下列说法中正确的是( B ) A.需要判断栈满且需要判断栈空 B.不需要判断栈满但需要判断栈空 C.需要判断栈满但不需要判断栈空 D.不需要判断栈满也不需要判断栈空 10、若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一定是( C ) A.结点均无左孩子的二叉树 B.结点均无右孩子的二叉树 C.高度为n的二叉树 D.存在度为2的结点的二叉树 11、若一棵二叉树中度为l的结点个数是3,度为2的结点个数是4,则该二叉树叶子结点的个数是( B ) 12、在n个结点的线索二叉树中,线索的数目为_C_______ A.n-1 B. n +1 13、一棵完全二叉树有1001个结点,其中有____B_____叶子结点 15、一个有n个顶点的无向图最多有___C____条边。 A. n B. n(n-1) C. n(n-1)/2 D. 2n 16、以v1为起始结点对下图进行深度优先遍历,正确的遍历序列是( D )

2015年数据结构期末考试题及答案

2012年数据结构期末考试题及答案 一、选择题 1.在数据结构中,从逻辑上可以把数据结构分为C。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指A。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的A结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储C。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑A。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是D。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是C,算法分析的两个主要方面是A。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2)。

s =0; for(I =0;i<n;i++) for(j=0;j<n;j++) s +=B[i][j]; sum =s ; 9.下面程序段的时间复杂度是O(n*m)。 for(i =0;i<n;i++) for(j=0;j<m;j++) A[i][j] =0; 10.下面程序段的时间复杂度是O(log3n)。 i =0; while(i<=n) i =i * 3; 11.在以下的叙述中,正确的是B。 A.线性表的顺序存储结构优于链表存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 12.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着B 。 A.数据元素具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 13.链表不具备的特点是A。 A.可随机访问任一结点B.插入删除不需要移动元素 C.不必事先估计存储空间D.所需空间与其长度成正比 14.不带头结点的单链表head为空的判定条件是A。

数据结构选择题集锦

数据结构选择题集锦

单项选择 ( B ) 1. 通常所说的主机是指∶ A) CPU B) CPU和内存C) CPU、内存与外存D) CPU、内存与硬盘 ( C )2. 在计算机内部,一切信息的存取、处理和传送的形式是∶ A) ACSII码B) BCD码C) 二进制D)十六进制 ( D )3. 软件与程序的区别是∶ A)程序价格便宜、软件价格昂贵; B)程序是用户自己编写的,而软件是由厂家提供的; C) 程序是用高级语言编写的,而软件是由机器语言编写的; D) 软件是程序以及开发、使用和维护所需要的所有文档的总称,而程序只是软件的一部分。

( C )4. 所谓“裸机”是指∶ A) 单片机B)单板机C) 不装备任何软件的计算机D) 只装备操作系统的计算机 ( D )5. 应用软件是指∶ A)所有能够使用的软件 B) 能被各应用单位共同使用的某种软件 C)所有微机上都应使用的基本软件D) 专门为某一应用目的而编制的软件 ( A )6. C语言中的常量可分为整型常量、实型常量、字符型常量及(枚举)四种。 (A)符号常量(B)长整型常量 (C)逻辑常量(D)二进制整数 ( C )7. 编译程序的功能是∶ A)发现源程序中的语法错误 B)改正源程序中的语法错误 C)将源程序编译成目标程序 D)将某一高级语言程序翻译成另一种高级语言

程序 ( A )8. 系统软件中最重要的是∶ A) 操作系统B) 语言处理系统 C) 工具软件D) 数据库管理系统 ( C )9. 可移植性最好的计算机语言是∶ A) 机器语言B)汇编语言C) 高级语言D) 自然语言 ( B )10. 非线性结构是数据元素之间存在一种: A)一对多关系B)多对多关系C)多对一关系D)一对一关系 ( C )11. 数据结构中,与所使用的计算机无关的是数据的结构; A) 存储B) 物理C) 逻辑D) 物理和存储

java笔试题目及答案分析

Java上市公司笔试题目及答案分析 一、选择题(不定项选题) 1下面说法正确的是( C ) A.Java中包的主要作用是实现跨平台功能 B.package语句只能放在import语句后 C.包(package)是由一组类(class) 和接口(inter'face)组成 D.无 2不能用来修饰interface的有(ACD ) Aprivate Bpublic Cprotected Dstatic 3在Java语言中,下列关于字符编码和国际化的叙述,哪些是正确的(CD) A每个中文字符占用2个字节,每个英文字符占用1个字节 B假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。 CJava的char类型,通常以UTF-16 Big Endian的方式保存一个字符。 D实现国际化应用常用的手段是利用ResourceBundle类 解析: 1.不同的编码格式,字符所占用的字节数是不一样的。如GBK中每个中文占用2个字 节,UTF-8中则是变长编码,可能占用3个字节或者4个字节。因此A不正确。 2.不同的编码方式之间是可以转换的,如果数据库GBK编码,页面上可以使用任意 支持汉字编码的编码方式显示都可以,只要在向页面传输的数据过程中进行编码的转换即可。如:数据库是GBK,页面上是UTF-8,那么可以这样转换:实例代码以java语法编写 4下面代码的执行结果是(C ) public class TestDemo { public static void main(String[] args) { System.out.println(test1());

数据结构复习题及答案(12级).

一、选择题。(每小题2分,共40分) (1) 计算机识别.存储和加工处理的对象被统称为____A____。 A.数据 B.数据元素 C.数据结构 D.数据类型 (2) 数据结构通常是研究数据的____ A _____及它们之间的联系。 A.存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想与逻辑 (3) 不是数据的逻辑结构是____ A ______。 A.散列结构 B.线性结构 C.树结构 D.图结构 (4) 数据结构被形式地定义为,其中D是____ B _____的有限集,R是____ C _____的有限集。 A.算法 B.数据元素 C.数据操作 D.逻辑结构 (5) 组成数据的基本单位是____ A ______。 A.数据项 B.数据类型 C.数据元素 D.数据变量 (6) 设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是____ A ______。 A.线性结构 B.树型结构 C.图型结构 D.集合 (7) 数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为___ C ____。 A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构 (8) 在数据结构的讨论中把数据结构从逻辑上分为___ A ____。 A.内部结构与外部结构 B.静态结构与动态结构 C.线性结构与非线性结构 D.紧凑结构与非紧凑结构 (9) 对一个算法的评价,不包括如下____ B _____方面的内容。 A.健壮性和可读性 B.并行性 C.正确性 D.时空复杂度 (10) 算法分析的两个方面是__ A ____。 A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 (11) 线性表是具有n个___ C _____的有限序列(n≠0)。 A.表元素 B.字符 C.数据元素 D.数据项 (12) 线性表的存储结构是一种____ B ____的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.HASH存取

JAVA数据结构习题及解答(英)

Questions These questions are intended as a self-test for readers.Answers to the questions may be found in Appendix C. 1.In many data structures you can________a single record,_________it,and _______it. 2.Rearranging the contents of a data structure into a certain order is called _________. 30CHAPTER1Overview 3.In a database,a field is a.a specific data item. b.a specific object. c.part of a recor d. d.part of an algorithm. 4.The field used when searching for a particular record is the______________. 5.In object-oriented programming,an object a.is a class. b.may contain data and methods. c.is a program. d.may contain classes. 6.A class a.is a blueprint for many objects. b.represents a specific real-world object. c.will hold specific values in its fields. d.specifies the type of a method. 7.In Java,a class specification a.creates objects. b.requires the keyword new. c.creates references. d.none of the abov e. 8.When an object wants to do something,it uses a________. 9.In Java,accessing an object’s methods requires the_____operator. 10.In Java,boolean and byte are_____________. (There are no experiments or programming projects for Chapter1.) Questions31 Chapter1,Overview Answers to Questions 1.insert,search for,delete 2.sorting 3.c 4.search key 5.b 6.a 7.d 8.method

《数据结构》期末考试试题及答案

《数据结构》期末考试试题及答案 (2003-2004学年第2学期) 单项选择题1、C 2、D 3、A 4、D 5、C 6、D 7、A 8、B 9、C 10、C 一、 1.对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为( c)。 (A)、正确性(B). 可行性(C). 健壮性(D). 输入性 2.设S为C语言的语句,计算机执行下面算法时,算法的时间复杂度为(d )。 for(i=n-1;i>=0;i--) for(j=0;jnext; p->next= Q.front->next; (B)、p=Q.front->next; Q.front->next=p->next; (C)、p=Q.rear->next; p->next= Q.rear->next; (D)、p=Q->next; Q->next=p->next; 9. Huffman树的带权路径长度WPL等于( c ) (A)、除根结点之外的所有结点权值之和(B)、所有结点权值之和 (C)、各叶子结点的带权路径长度之和(D)、根结点的值

数据结构试题及答案

好风光好感动1、线性表的逻辑顺序与物理顺序总是一致的。( x ) 2、线性表的顺序存储表示优于链式存储表示。( X ) 3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。( v ) 4、二维数组是其数组元素为线性表的线性表。( v ) 5、每种数据结构都应具备三种基本运算:插入、删除和搜索。( x ) 6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个 方面。( v ) 7、线性表中的每个结点最多只有一个前驱和一个后继。(x ) 8、线性的数据结构可以顺序存储,也可以存储。非线性的数据结构只能存储。(x ) 9、栈和队列逻辑上都是线性表。(v ) 10、单链表从任何一个结点出发,都能访问到所有结点(v ) 11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。(x ) 12、快速排序是排序算法中最快的一种。(x ) 13、多维数组是向量的推广。(x) 14、一般树和二叉树的结点数目都可以为0。(v) 15、直接选择排序是一种不稳定的排序方法。(x ) 16、98、对一个堆按层次遍历,不一定能得到一个有序序列。(v ) 17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。(x ) 18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。(x ) 19、堆栈在数据中的存储原则是先进先出。(x ) 20、队列在数据中的存储原则是后进先出。(x ) 21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。(x ) 22、哈夫曼树一定是满二叉树。(x ) 23、程序是用计算机语言表述的算法。(v) 24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。(v ) 25、用一组地址连续的存储单元存放的元素一定构成线性表。(v ) 26、堆栈、队列和数组的逻辑结构都是线性表结构。(v ) 27、给定一组权值,可以唯一构造出一棵哈夫曼树。(x ) 28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。(v ) 29、希尔排序在较率上较直接接入排序有较大的改进。但是不稳定的。(v )

数据结构试题及答案(10套最新)

一、单选题(每题 2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C.正确性D.时空复杂度 2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结 点,则执行(A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3. 3.对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是 ( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 5. 5.AOV网是一种(D )。 A.有向图B.无向图C.无向无环图D.有向无环图 6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度(B)。 A.低于链接法处理冲突 B. 高于链接法处理冲突 C.与链接法处理冲突相同D.高于二分查找 7.7.若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。 A.值B.函数C.指针D.引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具 有相同的( A )。 A.行号B.列号C.元素值D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为(D )。 A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C )。 A. O(n) B. O(1) C. O(log2n) D. O(n2) 二、运算题(每题 6 分,共24分) 1. 1.数据结构是指数据及其相互之间的______________。当结点之间存在M 对N(M:N)的联系时,称这种结构为_____________________。 2. 2.队列的插入操作是在队列的_ _尾______进行,删除操作是在队列的____ 首______进行。 3. 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则 表示栈满的条件是___top==0___(要超出才为满)_______________。 4. 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度 为_________,在表尾插入元素的时间复杂度为____________。

2009Java数据结构考题

一、单选题(每题2分,共30分) 1.以下数据结构中,()是非线性数据结构。 A.树 B.字符串 C.队 D.栈 2.下面算法的时间复杂度为() int f(int n) if (n==0 || n==1) return 1; else return n * f(n-1); A.O(1) B.O(n) C.O(n的平方) D.O(n!) 3.下述哪一条是Array这种数据结构的优点?() A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示 4.下面关于字符串的叙述中,哪一个是不正确的?() A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是字符串的一种重要运算 D.串既可以采用顺序存储,也可采用链式存储5.在无序数组中,允许重复会导致()。 A.所有操作时间都会增加 B.总会增加插入时间 C.在某些情况下查找时间的增加 D.有时会减少插入时间 6.若某数据结构最常用的操作是存取任一指定序号的元素和在尾部进行插入和删除运算,则利用()存储方式最节省时间。 A.Array B.双链表 C.带头结点的双循环链表 D.单循环链表 7.非空的循环单链表的尾结点p满足()。 A.p.next==first B.p.next == null C.p == null D.p == first 8.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:() A.p.next = s; s.next = p.next; B.s.next = p.next;p.next = s; C.p.next = s; p.next = s.next; D.p.next = s.next; p.next = s; 9.有六个元素6,5,4,3,2,1.顺序进栈。问下列哪一个不是合法的出栈序列?() A.5 4 3 6 1 2 B.4 5 3 1 2 6 C.3 4 6 5 2 1 D.2 3 4 1 5 6 10.在Hanoi塔问题中,若A塔上有3片圆盘。都要搬到C塔上去。则下列语句()是错误的。 11.归并排序的主要缺点是()。 A.没有递归 B.使用更多的存储空间 C.尽管比插入算法快,但是它比快速排序慢得多 D.需要7次才能完成工作 12.树最适合用来表示() A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 13.引入二叉树的主要目的是() A.加快查找结点的前驱或后继的速度 B.能较快地进行插入与删除 C.为了能方便的找到双亲 D.使遍历的结果唯一 14.要连通具有N个顶点的有向图,至少需要()条边。 A.n-1 B.n C.n+1 D.2n

十套数据结构试题及答案

数据结构试卷(一) 二、填空题(每空1分,共26分) 1.通常从四个方面评价算法的质量:_________、_________、_________和_________。 2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。 3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数 为__________个,树的深度为___________,树的度为_________。 4.后缀算式9 2 3 +- 10 2 / -的值为__________。中缀算式(3+4X)-2Y/3对应的后缀算式 为_______________________________。 5.若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指 针。在这种存储结构中,n个结点的二叉树共有________个指针域,其中有________个指针域是存放了地址,有________________个指针是空指针。 6.对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点 分别有_______个和________个。 7.AOV网是一种___________________的图。 8.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有 向完全图中,包含有________条边。 9.假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元 素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。 10.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度 ___________。 11.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序 过程的时间复杂度为________。 12.在快速排序、堆排序、归并排序中,_________排序是稳定的。 三、计算题(每题6 分,共24分) 1.在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。 A 0 1 2 3 4 5 6 7 data 60 50 78 90 34 40 next 3 5 7 2 0 4 1 2.请画出下图的邻接矩阵和邻接表。 3.已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7}; E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15, (3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25}; 用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。 4.画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。 四、阅读算法(每题7分,共14分) 1.LinkList mynote(LinkList L) {//L是不带头结点的单链表的头指针 if(L&&L->next){ q=L;L=L->next;p=L; S1:while(p->next) p=p->next;

数据结构总复习题(JAVA)

一、填空题 1. 栈和队列的共同特点是(只允许在端点处插入和删除元素)。 2. 在深度为5的满二叉树中,叶子结点的个数为(31) 3. 算法分析的目的是(分析算法的效率以求改进)。 4. 由两个栈共享一个存储空间的好处是(节省存储空间,降低上溢发生的机率)。 5.串的长度是(串中所含字符的个数)。 6.设有两个串p和q,求q在p中首次出现位置的运算称做(模式匹配) 7. N个顶点的连通图中边的条数至少为(N-1)。 8.N个顶点的强连通图的边数至少有(N)。 9.对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(N)。P259 10.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为(n(n-1)/2)。P292 11. 在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 12. 在具有n个单元的循环队列中,队满时共有n-1 个元素。 13. 有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的出度。 14. 用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度递增的次序来得到最短路径的。 15. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。

16.在一个循环队列中,队首指针指向队首元素的前一个位置。17.在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。 18. 线性表中结点的集合是有限的,结点间的关系是一对一的。 19.数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。 20. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 21. 一个算法的效率可分为时间效率和空间效率。 22. 在顺序表中访问任意一结点的时间复杂度均为O(1) ,因此,顺序表也称为随机存取的数据结构。 23. 在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。 24. 在具有n个单元的循环队列中,队满时共有n-1 个元素。 25. 对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。 26. 一棵深度为6的满二叉树有n1+n2=0+ n2= n0-1=31 个分支结点和26-1 =32 个叶子。 27. 有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的出度。

《数据结构》题库及答案

《数据结构》题库及答案 一、选择题 1.线性表的顺序存储结构是一种的存储结构,线性表的链式存储结构是一种的存储结构。 a.随机存储; b.顺序存储; c. 索引存取; d. HASH存取 2.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是。 a. edcba; b. decba; c. dceab; 3.一个队列的入队序列是1,2,3,4,则队列的输出序列是。 a. 4,3,2,1; b. 1,2,3,4; c. 1,4,3,2; ,2,4,1 ¥ 4.在一个单链表中,已知p结点是q结点的直接前驱结点,若在p和q之间插入结点s,则执行的操作是。 a.s->nxet=p->next; p->next=s; b.p->next=s->next; s->next=p; c.q->next=s; s->next=p; d.p->next=s; s->next=q; 5.设有两个串p,q,求q在p中首次出现的位置的运算称作。 a.联接 b.模式匹配 c.求子串 d.求串长 6.二维数组M的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到8,列下标j 的范围从1到10,则存放M至少需要个字节。 a.、 b.90 7.在线索二叉树中,结点p没有左子树的充要条件是。 a.p->lch==NULL b.p->ltag==1 c.p->ltag==1且p->lch=NULL d.以上都不对 8.在栈操作中,输入序列为(A,B,C,D),不可能得到的输出序列为:______ A、(A,B,C,D) B、(D,C,B,A) * C、(A,C,D,B) D、(C,A,B,D) 9.已知某二叉树的后序序列是dabec,中序序列是debac,则它的先序序列是。 A、acbed B、decab C、deabc D、cedba 10.设矩阵A是一个对称矩阵,为了节省存储空间,将其下三角部分(见下图)按行序存放在一维数组

相关文档
相关文档 最新文档