数据结构数组学习笔记

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数组学习笔记

1、

java中的数据类型分类:

基本数据类型(或叫做原生类、内置类型)8种:

整数:byte,short,int,long(默认是int类型)

浮点类型:float,double(默认是double类型)

字符类型:char

布尔类型:boolean

引用数据类型3种:数组,类,接口

其中,基本数据类型之间除了boolean,其他数据类型之间可以任意的相互转换(强制转化或默认转换),这个与c++中有点区别。

数组是对象,int float char这些基本类型不是对象。关于如何判断基本类型和对象,

参考下面的:

行为:

基本类型只是一个值,没有任何行为

对象类型有自己的行为

内存分配:

基本类型在栈内分配

对象在堆内分配

对象引用保存在栈内

引用与值:

基本类型是值类型,仅表示一个值,保存在栈内

引用类型分两部分,对象引用保存在栈内,对象保存在堆内,

访问变量,是使用的引用找对象

2、

对一个排好序的数组进行查找,时间复杂度为()二分查找:n,n/2,n/4…令n/2*k=1. 得k=log2n(以2为为底的对数)

3、

short int : 2个字节

sizeof返回的值表示的含义如下(单位字节):

数组——编译时分配的数组空间大小;

指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该

为4);

类型——该类型所占的空间大小;

对象——对象的实际占用空间大小;

函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

short a[100] 空间100*2

4、

和顺序栈相比,链栈有一个比较明显的优势是通常不会出现栈满的情况

链栈存在于不连续的内存中,依靠节点指向后一个节点的指针进行地址查找

顺序栈就是数组,在内存中是连续的

5、

(1)《数据结构》对广义表的表头和表尾是这样定义的:

如果广义表LS=(a1,a2...an)非空,则a1是LS的表头,其余元素组成的表(a2,a3,..an)是称为LS的表尾。

根据定义,非空广义表的表头是一个元素,它可以是原子也可以是一个子表,而表尾则必定是子表。例如:LS=(a,b),表头为a,表尾是(b)而不是b.另外:LS=(a)的表头为a,表尾为空表().

(2)非空广义表,除表头外,其余元素构成的表称为表尾,所以非空广义表尾一定是个表。

广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。

广义表的长度:最大括号中的逗号数+1

广义表的深度:展开后含括号的层数。

广义表的特性:

广义表的元素可以是子表,而子表的元素还可以是子表。

广义表可为其他广义表所共享。

广义表可以是一个递归的表,即广义表也可以是其本身的一个子表

广义表(((a,b,c),d,e,f))的长度为4,4个元素分别为子表(a,b,c )和单元素d,e,f。

二维以上的数组其实是一种特殊的广义表

6、

假设以行优先顺序存储三维数组A[5][6][7],其中元素A[0][0][0]的地址为1100,且每个元素占2个存储单元,则A[4][3][2]的地址是()

三维比如说是x,y,z组成的立体,按行存储就是先存yz面,

三维数组a[m1][m2][m3]中若按行优先存储,设a[0][0][0]的起始地址为p,每个元素占n个单元,则a[i][j][k]的起始地址为:

loc(i,j,k)=loc(i,0,0)+(j*m3+k)*n=loc(i-1,0,0)+(m2*m3+j*m3+k)*n=loc(i-2,0,0)+(2*m2*m3+j* m3+k)*n=…=p+(i*m2*m3+j*m3+k)*n

则loc(4,3,2)=1100+(4*6*7+3*7+2)*2=1482。

7、

从逻辑结构上看,n维数组的每个元素均属于n个向量,像2为数组的每个元素属于2个向量Z(x,y),通俗的说,在Z中增加一维,也就是在每个元素增加一类属性,也就是增加一个向量,

此时Z中每个元素已经对应三种属性(向量).同理,n维数组的每个元素均属于n个向量.

8、

给定一个m行n列的整数矩阵(如图),每行从左到右和每列从上到下都是有序的。判断一个整数k是否在矩阵中出现的最优算法,在最坏情况下的时间复杂度是________。

杨氏矩阵查找算法:从矩阵的右上角开始,若右上角元素

大于所找,则可右上角元素所在的列的所有元素均大于所

找元素,下次查找忽略该列;若右上角元素小于所找,则

右上角元素所在行的所有元素均小于所找元素,下次查找,

忽略该行;若相等,结束查找;否则,由新形成的矩阵利

用上述方式继续查找。O(m+n).

8、

数组与指针的区别

(1)数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。

(2)用运算符sizeof 可以计算出数组的容量(字节数)

(3)指针可以随时指向任意类型的内存块。

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

char a[] = “hello”;

a[0] = …X‟;

char *p = “world”; // 注意p 指向常量字符串

p[0] = …X‟; // 编译器不能发现该错误,运行时错误

(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个

指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

char a[] = "hello world";

char *p = a;

cout<< sizeof(a) << endl; // 12 字节

cout<< sizeof(p) << endl; // 4 字节

计算数组和指针的内存容量

void Func(char a[100])

{

cout<< sizeof(a) << endl; // 4 字节而不是100 字节

}

9、

稀疏矩阵一般的压缩存储方法有两种,即三元组和十字链表

稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素。

相关文档
最新文档