数据结构5-数组答案

合集下载

数据结构(c语言版)第五章答案

数据结构(c语言版)第五章答案

数据结构(c语言版)第五章答案第五章1、设二维数组A【8】【10】是一个按行优先顺序存储在内存中的数组,已知A【0】【0】的起始存储位置为1000,每个数组元素占用4个存储单元,求:(1)A【4】【5】的起始存储位置。

A【4】【5】的起始存储位置为1000+(10*4+5)*4=1180;(2)起始存储位置为1184的数组元素的下标。

起始存储位置为1184的数组元素的下标为4(行下标)、6(列下标)。

2、画出下列广义表D=((c),(e),(a,(b,c,d)))的图形表示和它们的存储表示。

略,参考第5·2节应用题第5题分析与解答。

3、已知A为稀疏矩阵,试从时间和空间角度比较采用两种不同的存储结构(二维数组和三元组表)实现求∑a(i,j)运算的优缺点。

稀疏矩阵A采用二维数组存储时,需要n*n个存储单元,完成求∑ii a(1≤i≤n)时,由于a【i】【i】随机存取,速度快。

但采用三元组表时,若非零元素个数为t,需3t+3个存储单元(t个分量存各非零元素的行值、列值、元素值),同时还需要三个存储单元存储存稀疏矩阵A的行数、列数和非零元素个数,比二维数组节省存储单元;但在求∑ii a(1≤i≤n)时,要扫描整个三元组表,以便找到行列值相等的非零元素求和,其时间性能比采用二维数组时差。

4、利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间?当m行n列稀疏矩阵中非零元素个数为t,当满足关系3*t<m*n 时,利用三元组存储稀疏数组时,才能节省存储空间。

< bdsfid="74" p=""></m*n时,利用三元组存储稀疏数组时,才能节省存储空间。

<>5、求下列各广义表的操作结果。

(1)GetHead((a,(b,c),d))GetHead((a,(b,c),d))=a(2)GetTail((a,(b,c),d))GetTail((a,(b,c),d))=((b,c),d)(3)GetHead(GetTail((a,(b,c),d)))GetHead(GetTail((a,(b,c),d)))=(b,c)(4)GetTail(GetHead((a,(b,c),d)))GetTail(GetHead((a,(b,c),d)))=()第六章1、已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法画出此树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶结点?(3)哪个是g的双亲?(4)哪些是g的祖先?(5)哪些是g的孩子?(6)哪些是e的子孙?(7)哪些是e的兄弟?哪些是f的兄弟?(8)结点b和n的层次号分别是什么?(9)树的深度是多少?(10)以结点c为根的子树的深度是多少?(11)树的度数是多少?略。

数据结构 5数组和广义表A

数据结构 5数组和广义表A
12
1 Status Locate(Array A,va_list ap,int &off) 2{ 3 //若ap指示的各下标值合法,则求出该元素在A中,相对地
址off
4 off=0; 5 for(i=0;i<A.dim;++i) 6 { 7 ind=va_arg(ap,int); 8 if(ind<0||ind>A.bounds[i]) return OVERFLOW; 9 off+=A.constants[i] *ind; 10 } 11 return OK; 12 }
行数 总列数,即 第2维长度 元素个数
ij
补充:计算二维数组元素地址的通式
设一般的二维数组是A[c1..d1, c2..d2],这里c1,c2不一定是0。
单个元素 长度
二维数组列优先存储的通式为: LOC(aij)=LOC(ac1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L
6
例1〖软考题〗:一个二维数组A[1..6, 0..7],每个数组元素
16
5.4
1、定义:
广义表的定义
广义表是线性表的推广,也称为列表(lists) 记为: LS = ( a1 , a2 , ……, an ) 广义表名 表头(Head) 表尾 (Tail) n是表长
在广义表中约定:
① 第一个元素是表头,而其余元素组成的表称为表尾; ② 用小写字母表示原子类型,用大写字母表示列表。
13
1 Status Value(Array A,ElemType &e,…){ 2 //A是n维数组,e为元素变量,随后是n个下标值,若各下
标不超界,则e赋值为所指定的A的元素值,即将指定元素值 读到e变量中。

国家开放大学《数据结构(本)》单元测试参考答案

国家开放大学《数据结构(本)》单元测试参考答案

31.顺序存储方式只能用于存储线性结构。(×) 32.顺序存储方式的有点是存储密度大,且插入、删除运算效率高。(×)
单元 3 栈和队列 1.一个顺序栈一旦被声明,其占用空间的大小( )。
A. 已固定 B. 动态变化 C. 可以改变 D. 不能固定 2.链栈和顺序栈相比,有一个比较明显的缺点,即( )。 A. 不会出现栈空的情况 B. 插入操作更加方便 C. 删除操作更加方便 D. 通常不会出现栈满的情况 3.用单链表表示的链式队列的队头在链表的( )位置。 A. 链头 B. 任意位置 C. 链尾 D. 链中 4.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓 冲区,主机将要输出的数据依次写入缓冲区中,而打印机则从缓冲区中取出数据 打印,该缓冲区应该是一个( )结构。 A. 数组 B. 堆栈 C. 队列 D. 线性表 5.循环队列 A[m] 存放其元素,用 front 和 rear 分别表示队头及队尾,则循环队 列满的条件是( )。
12.一个栈的进栈序列是 5,6,7,8,则栈的不可能的出栈序列是( )。(进 出栈操作可以交替进行)
A. 8,7,6,5 B. 7,6,8,5 C. 7,6,5,8 D. 5,8,6,7 13.栈的插入删除操作在( )进行。 A. 栈底 B. 栈顶 C. 指定位置 D. 任意位置 14.栈和队列的相同点是( )。 A. 逻辑结构与线性表相同,都是操作规则受到限制的线性表 B. 逻辑结构与线性表不同 C. 都是后进后出 D. 都是后进先出 15.以下说法正确的是( )。 A. 栈的特点是先进先出,队列的特点是先进后出 B. 栈和队列的特点都是先进后出
14.算法是在数据结构的基础上对特定问题求解步骤的一种描述,也是若干条指 令组成的优先序列(√)。 15.算法可以用不同的语言描述,如果用 C 语言等高级语言来描述,则算法实际 上就是程序了(×)。 16.程序一定是算法(×)。 17.数据的物理结构是指数据在计算机内的实际存储形式(√)。 18.数据结构中评价算法的两个重要指标是时间复杂度和空间复杂度(√)。 19.在顺序存储结构中,有时也存储数据结构中元素之间的关系(×)。

《数据结构》填空作业题(答案)

《数据结构》填空作业题(答案)

《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。

2.程序包括两个内容:数据结构和算法。

3. 数据结构的形式定义为:数据结构是一个二元组: Data Structure =(D,S)。

4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。

5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。

6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。

7. 在树形结构中,数据元素之间存在一对多的关系。

8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。

9. 数据的逻辑结构包括线性结构、树形结构和图形结构 3种类型,树型结构和有向图结构合称为非线性结构。

10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。

11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。

12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。

13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。

14. 数据结构在物理上可分为顺序存储结构和链式存储结构。

15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。

16. 数据元素可由若干个数据项组成。

17. 算法分析的两个主要方面是时间复杂度和空间复杂度。

18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。

19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。

20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。

数据结构第五章习题答案

数据结构第五章习题答案

1.二维数组A行下标i的范围从1到12,列下标j的范围从3到10,采用行序为主序存储,每个数据存储元素占用4个存储单元,该数组的首地址(既A[1][3]的地址)为1200,则A[6][5]的地址为(D)A.1400B.1404C.1372D.13682.有一个M*N的矩阵A,若采用行序为主序进行顺序存储,每个元素占用8个字节,则A ij (1≤i≤M,1≤i≤N)元素的相对字节地址(相对首元素地址而言)为(B)A.((i-1)*N+j)*8B.((i-1)*N+j-1)*8C.(i*N+j-1)*8D.((i-1)*N+j+1)*83.稀疏矩阵一般的压缩存储方法有两种,即(D)A.二维数组和三维数组B.三元组和散列C.散列和十字链表D.三元组和十字链表4.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(B)A.正确B.错误5.广义表((a,b),c,d)的表头是(C),表尾是(D)。

A.aB.bC.(a,b)D.(c,d)6.一个广义表的表头总是广义表,这个断言是(B)A.正确B.错误7.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是(326)8.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主存储,且A[0][0]=1),则A[4][3]的地址是(14)9.一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的长度为(5),深度为(3)10.广义表((a),((b),c),(((d))))的表头是((a)),表尾是((((b),c),(((d)))))11.已知广义表A=((a,b,c),(d,e,f)),则广义表运算head(tail(tail(A)))=(e)12.已知广义表GL=(a,(b,c,d),e),运用head和tail函数取出GL中的原子b的运算是(head(head(tail(GL))))13.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案

数据结构(C语言版)习题参考答案数据结构(C语言版)习题参考答案1. 数据结构简介数据结构是计算机科学中重要的概念之一,它关注如何组织和存储数据,以便有效地进行访问和操作。

C语言是一种广泛应用于数据结构实现的编程语言。

本文将提供一些常见数据结构习题的参考答案,帮助读者理解和掌握数据结构的基本概念与实现。

2. 数组数组是一种线性结构,存储具有相同数据类型的元素。

以下是一些数组习题的参考答案:2.1 统计数组中某个元素出现的次数```int countOccurrences(int arr[], int n, int x) {int count = 0;for (int i = 0; i < n; i++) {if (arr[i] == x) {count++;}}return count;}```2.2 查找数组中的最大值和最小值```void findMinMax(int arr[], int n, int* min, int* max) { *min = arr[0];*max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < *min) {*min = arr[i];}if (arr[i] > *max) {*max = arr[i];}}}```3. 链表链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。

以下是一些链表习题的参考答案:3.1 反转链表```Node* reverseLinkedList(Node* head) {Node* prev = NULL;Node* curr = head;while (curr != NULL) {Node* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}```3.2 合并两个有序链表```Node* mergeLists(Node* list1, Node* list2) {if (list1 == NULL) {return list2;}if (list2 == NULL) {return list1;}if (list1->data < list2->data) {list1->next = mergeLists(list1->next, list2);return list1;} else {list2->next = mergeLists(list1, list2->next);return list2;}}```4. 栈和队列栈和队列是两种重要的线性数据结构,栈支持后进先出(LIFO),队列支持先进先出(FIFO)。

数据结构(数组和广义表)习题与答案

数据结构(数组和广义表)习题与答案

1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。

A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。

A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。

A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。

如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。

A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。

如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。

A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。

A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。

A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。

A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。

数据结构第5章

数据结构第5章

第5章:数组和广义表 1. 了解数组的定义;填空题:1、假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B ;末尾元素A 57的第一个字节地址为 1282 。

2、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。

2. 理解数组的顺序表示方法会计算数组元素顺序存储的地址;填空题:1、已知A 的起始存储位置(基地址)为1000,若按行存储时,元素A 14的第一个字节地址为 (8+4)×6+1000=1072 ;若按列存储时,元素A 47的第一个字节地址为 (6×7+4)×6+1000)=1276 。

(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A 57可知,是从0行0列开始!) 2、设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 8950 。

答:不考虑0行0列,利用列优先公式: LOC(a ij )=LOC(a c 1,c 2)+[(j-c 2)*(d 1-c 1+1)+i-c 1)]*L 得:LOC(a 32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=8950选择题:( A )1、假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。

(无第0行第0列元素)A .16902B .16904C .14454D .答案A, B, C 均不对 答:此题(57列×60行+31行)×2字节+10000=16902( B )2、设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素a i,j (i ≤j), 在一维数组B 中下标k 的值是:A .i(i-1)/2+j-1B .i(i-1)/2+jC .i(i+1)/2+j-1D .i(i+1)/2+j3、从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。

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

即 Am*n=((a11 a12 ...a1n),(a21 a22 ...a2n),...,(am1 am2 ...amn)) 或由n个列向量组成,记作: a11 a21 am1 a12 a22 am2 a1n a2n amn
Amxn=
3.三维数组是一个定长线性表( 1,2,...,p )。 其中: k=( 1,2,...,m )为定长二维数组,1≤k≤p 例 三维数组A[1..3,1..4,1..2], p=3, m=4, n=2
例2 #define m 4 #define n 5 int a[m]; char b[m][n]; 例3 #define #define typedef typedef ara a; arb b;
//定义符号常量m //定义符号常量n //m个整数的一维数组 //m行n列个字符的二维数组 //定义符号常量m //定义符号常量n //一维数组类型ara //二维数组类型arb //ara类型的变量a //arb类型的变量b
2
a111 a112 a121 a122 a131 a132 a211 a212 a221 a222 a231 a232 3 4 5 6 7 逻辑结构 8
A3*4*2 =
a111 a121 a131 a141
a112 a122 a132 a142
a211 a221 a231 a241
a212 a222 a232 a242
a311 a321 a331 a341
a312 a322 a332 a342
第3页
第2页
第1页
5.1.2 数组的类型定义和变量说明: 例1 int a[10]; //10个整数的一维数组 char b[4][5]; //4行5列个字符的二维数组 float c[3][4][2]; //3*4*2个实数的三维数组
5.2数组的顺序表示和实现 5.2.1顺序表示(顺序存储结构) 1.以行序为主序的顺序存储方式 左边的下标后变化,右边的下标先变化 2.以列序为主序的顺序存储方式 左边的下标先变化,右边的下标后变化 例1 二维数组a[1..3,1..2],b是首地址,s是元素所占的单元数
序号 内存 地址 a11 a12 a21 a22 a31 a32 1 a11 2 a12 3 a21 4 a22 5 a31 6 a32 b b+s 序号 内存 地址 1 a11 2 a21 b b+s
第五章
数组和广义表
引言: 线性表:L=(a1,a2,...,an),ai是同类型的元素,1≤i≤n 数组: A=(a1,a2,...,an) 若ai是同类型的元素,A是一维数组,1≤i≤n 若ai是同类型的定长线性表,A是多维数组,1≤i≤n 广义表:Ls=(a1,a,...,an) ai可以是同类型的元素或不定长的线性表,1≤i≤n 5.1 数组及其操作 简单地说,向量和矩阵称为数组。 5.1.1 数组的递归定义 1.一维数组是一个定长线性表(a1,a2,...,an )。 其中:ai为元素,i为下标/序号,1≤i≤n (a1,a2,...,an )又称为向量。
2.二维数组是一个定长线性表(1,2,...,m), 其中: i=(ai1,ai2,...,ain)为行向量,1≤i≤m 由m个行向量组成,记作: ( a11 a12 ... a1n ) Am*n=
( a21 a22 ... a2n )
............ ( am1 am2 ... amn )
0 1 2 3 4 5 6
//生成一维数组a //输入元素
//输出元素的平方
例2 生成动态的10个整数的一维数组 int *pa; pa=(int *)malloc(10*sizeof(int)); pa →
0 1 2 3 4 5 6 7 8 9
//指针变量pa //动态数组pa*
main() { int i,n,*pa; scanf(”%d”,&n); //动态输入n pa=(int *)malloc(n*sizeof(int));//生成动态数组*pa for (i=0;i<n;i++) *(pa+i)=2*i; //指针法引用数组元素,赋值 for (i=0;i<n;i++) printf(“%d,”,*(pa+i)); //输出数组元素0,2,4,6,... for (i=0;i<n;i++) scanf(“%d”,&pa[i]); //下标法引用数组元素, 输入 for (i=0;i<n;i++) printf("%d,",pa[i]); //输出数组元素 free(pa); //释放(销毁)数组空间 }
m 4 n 5 int ara[m]; char arb[m][n];
C语言中定义静态数组时,元素数目必须是常量 错例1 int m=4,n=5; int a[m][n]; //m,n是变量 错例2 int p; scanf(”%d”,&p); in一个数组: int a[7];//生成静态一维数组(存储结构) 2.销毁一个数组 3.赋值/修改 a a[1]=15;(a[1])++; 0 1 2 3 4 5 6 4.取元素的值: a[0]=a[1]*2; a 32 16 5.1.4 程序设计举例 例1 main() { int i,a[10]; for (i=0;i<10;i++) scanf(”%d”,&a[i]); for (i=0;i<10;i++) printf(”%d ”,a[i]*a[i]); }
b+2*s
b+3*s b+4*s
逻辑结构
3 a31 4 a12
5 a22 6 a32
b+2*s
b+3*s b+4*s
b+5*s
b+5*s
以行序为主序
以列序为主序
例2 三维数组a[1..2,1..3,1..2]
序号 内存 地址 1 a111 a112 b b+s b+2*s b+3*s b+4*s 序号 内存 地址 1 a111 b 2 3 4 5 a211 b+s a121 b+2*s a221 b+3*s a131 b+4*s
相关文档
最新文档