码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构复习2

时间:2015-08-27 00:01:48      阅读:687      评论:0      收藏:0      [点我收藏+]

标签:

1 一个非空广义表的表尾(只能是子表)

解析:(1)《数据结构》对广义表的表头和表尾是这样定义的:  
如果广义表LS=a1,a2...an)非空,则 a1LS的表头,其余元素组成的表(a2,a3,..an)是称为LS的表尾。  
根据定义,非空广义表的 表头是一个元素,它 可以是原子也可以是一个子表, 而表尾则必定是子表。例如:LS=(a,b),表头为a,表尾是(b)而不是b.另外:LS=a)的表头为a,表尾为空表(). 
2)非空广义表,除表头外,其余元素构成的表称为表尾,所以非空广义表尾一定是个表

 

2Which statement declares a variable a which is suitable for referring to an array of 50 string objects?

Achar a[][];

(B)String a[];

(C)String[]a;

(D)Object a[50];

(E)String a[50];

(F)Object a[];

解析:BCF。在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度,因此BCF对、DE错。然而二维数组不能像A那样声明,需要指定低维长度。

 

332系统,函数void Func(char str[100]){}中sizeof(str)=

解析:数组名做形参,下标没有作用,传入的就是地址,通常可以写成指针char* str,指针的大小在32位系统中为4字节。倘若是64位则是8字节。

 

4、有一个100*90的稀疏矩阵,0元素有10,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()

解析:每个元素要用行号,列号,元素值来表示,在用三元组表示稀疏矩阵,还要三个成员来记住,矩阵的行数列数,总的元素数,所以所需的字节数是10*1+1+1*2+3*2=66

 

5、下列数组定义及赋值,错误的是

(A) int intArray[ ];

(B) int *Array=new int[3]; intArray[1]=1; intArray[2]=2;

(C) int a[ ]={1, 2, 3, 4, 5};

(D) int a[ ] [ ]=new int[2] [ ]; a[0]=new int[3]; a[1]=new int[3];

解析:A错了,这样子定义是不行的,声明可以,或者作为形参时可以;

 

6、Which statement is true for the class java.util.ArrayList?

(A) The elements in the collection are ordered.

(B) The collection is guaranteed to be immutable.

(C) The elements in the collection are guaranteed to be unique.

(D) The elements in the collection are accessed using a unique key.

(E) The elements in the collections are guaranteed to be synchronized.

解析:ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 

   1> 动态的增加和减少元素; 

   2> 实现了ICollectionIList接口; 

   3> 灵活的设置数组的大小

Synchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。

如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步;

附:vector表示一段连续的内存区域,随机访问效率很高,因为每次访问离起始处的位移都是固定的,但是在随意位置插入删除元素效率很低,因为它需要将后面的元素复制一遍。 list表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历。在list的任意位置插入和删除元素的效率都很高:指针必须被重新赋值,但不需要用拷贝元素来实现移动。他对随机访问支持不好,需要遍历中间的元素。每个元素有两个指针的额外空间开销。 deque(双端队列,发音为‘deck‘)也表示一段连续的内存区域,但是他支持高效的在其首部插入和删除元素。 选择顺序容器类型的一些准则: 如果我们需要随机访问一个容器,则vector要比List好得多。 如果我们一直要存储元素的个数,则vector又是一个比list好的选择。 如果我们需要的不只是在容器两端插入和删除元素,则list显然比vector好。 除非我们需要在容其首部插入和删除元素,否则vector要比deque好。

C++ STL 的实现:

1vector  底层数据结构为数组 ,支持快速随机访问

(2)list    底层数据结构为双向链表,支持快速增删

(3)deque   底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问

(4)stack   底层一般用(2)(3)实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

(5)queue   底层一般用(2)(3)实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

(6)(4)和(5)是适配器,而不叫容器,因为是对容器的再封装

(7)priority_queue 的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

(8)set       底层数据结构为红黑树,有序,不重复

(9)multiset  底层数据结构为红黑树,有序,可重复 

10)map      底层数据结构为红黑树,有序,不重复

11)multimap 底层数据结构为红黑树,有序,可重复

12)hash_set 底层数据结构为hash表,无序,不重复

13)hash_multiset 底层数据结构为hash表,无序,可重复 

14)hash_map      底层数据结构为hash表,无序,不重复

15)hash_multimap 底层数据结构为hash表,无序,可重复 

数据结构复习2

标签:

原文地址:http://www.cnblogs.com/hbiner/p/4761927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!