知识大全 第5章数组与广义表习题练习答案
Posted 元素
篇首语:努力尽今夕,少年犹可夸。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 第5章数组与广义表习题练习答案相关的知识,希望对你有一定的参考价值。
请按行及按列优先顺序列出四维数组A * * * 的所有元素在内存中的存储次序 开始结点为a 解 按行优先的顺序排列时 先变化右边的下标 也就是右到左依次变化 这个四维数组的排列是这样的 (将这个排列分行写出以便与阅读 只要按从左到右的顺序存放就是在内存中的排列位置) a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a 按列优先的顺序排列恰恰相反 变化最快的是左边的下标 然后向右变化 所以这个四维数组的排列将是这样的 (这里为了便于阅读 也将其书写为分行形式) a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
给出C语言的三维数组地址计算公式 解 因为C语言的数组下标下界是 所以 Loc(Amnp)=Loc(A )+((i*n*p)+k)*d 其中 Amnp表示三维数组 Loc(A )表示数组起始位置 i j k表示当前元素的下标 d表示每个元素所占单元数
设有三对角矩阵 An*n 将其三条对角线上的元素逐行地存储到向量B[ n ]中 使得B[k]=aij 求 ( )用i j 表示k的下标变换公式 ( )用 k 表示 i j 的下标变换公式 ( ) 解 要求i j 到k 的下标变换公式 就是要知道在k之前已有几个非零元素 这些非零元素的个数就是k的值 一个元素所在行为i 所在列为j 则在其前面已有的非零元素个数为 (i* )+j (i+ ) 其中 (i* )是这个元素前面所有行的非零元素个数 j (i+ )是它所在列前面的非零元素个数 化简可得 k= i+j; // c下标是从 开始的 ( ) 解 因为K和i j是一一对应的关系 因此这也不难算出 i=(k+ )/ //k+ 表示当前元素前有几个非零元素 被 整除就得到行号 j=(k+ )% +(k+ )/ //k+ 除以 的余数就是表示当前行中第几个非零元素 //加上前面的 元素所点列数就是当前列号
设二维数组A * 的每个元素占 个字节 已知Loc(a )= A共占多少个字节? A的终端结点a 的起始地位为何?按行和按列优先存储时 a 的起始地址分别为何?解 ( )因含 * = 个元素 因此A共占 * = 个字节 ( )a 的起始地址为 Loc(a )=Loc(a )+(i*n+j)*d= +( * + )* = ( )按行优先顺序排列时 a = +( * + )* = ( )按列优先顺序排列时 (二维数组可用行列下标互换来计算) a = +( * + )* =
特殊矩阵和稀疏矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答 后者在采用压缩存储后将会失去随机存储的功能 因为在这种矩阵中 非零元素的分布是没有规律的 为了压缩存储 就将每一个非零元素的值和它所在的行 列号做为一个结点存放在一起 这样的结点组成的线性表中叫三元组表 它已不是简单的向量 所以无法用下标直接存取矩阵中的元素
简述广义表和线性表的区别与联系 答: 广义表是线性表的推广 线性表是广义表的特例 当广义表中的元素都是原子时 即为线性表
画出下列广义表的图形表示 ( ) A(a B(b d) C(e B(b d) L(f g))) ( ) A(a B(b A))解: ( )这是一个再入表 ( )则是一个递归表
设广义表L=(() ()) 试问head(L) tail(L) L的长度 深度各为多少?解 ●head(L)=() ●tail(L)=(()) ●L的长度为 ●L的深度为
求下列广义表运算的结果 ( )head ((p h w)); ( )tail((b k p h)); ( ) head (((a b) (c d))); ( )tail(((a b) (c d))); ( )head(tail(((a b) (c d)))); ( )tailhead)(((a b) (c d)))) 答 ( )head ((p h w))=p; ( )tail((b k p h))=(k p h); ( )head (((a b) (c d)))=(a b); ( )tail(((a b) (c d)))=((c d)); ( )head(tail(((a b) (c d))))=(c d); ( )tail(head(((a b) (c d))))=(b)
当三角矩阵采用题 所述的压缩存储时 写一算法求三对角矩阵在这种压缩存储表示下的转置矩阵 解 转置矩阵就是将矩阵元素的行号与列号互换 根据已知的三对角矩阵的特点 其转置矩阵对角线元素不变 非零的非对角线元素aij与aji互换位置 又知元素的下标和存放一维数组空间位置的关系 k= i+j 我们可以设计出这个矩阵的转置算法 #define N //矩阵行 列数 #define Length ( *N )//压缩矩阵的长度 typedef struct int data[Length]; DiaMatrix; void TransMatrix(DiaMatrix * C) //压缩三对角矩阵转置 int i j; int t; for(i= ; i<N;i++) for(j=i; j<N; j++) if(i j<= &&i j>= ) //将对应于行列号的压缩矩阵内的元素互换 t=C >data[ *i+j]; C >data[ *i+j]=C >data[ *j+i]; C >data[ *j+i]=t; //endif //end
相关参考
试描述头指针头结点开始结点的区别并说明头指针和头结点的作用答 开始结点是指链表中的第一个结点也就是没有直接前趋的那个结点 链表的头指
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法以单链表作为存储结构实现直接插入排序算法 设计一算法使得在尽可能少的时间内重排数组将所有取负值的关键字放在所有取非负值的关键
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法解 重写的算法如下 voidInsertSort(SeqListR) //对顺序表中记录
第五章多维数组和广义表 多维数组 一般用顺序存储的方式表示数组常用方式有)行优先顺序将数组元素按行向量排列;)列优先顺序将数组元素按列向量排列 计算地址的函数LOC(Aij)=LOC(Acc
一基础知识题试描述头指针头结点开始结点的区别并说明头指针和头结点的作用何时选用顺序表何时选用链表作为线性表的存储结构为宜?在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因
对含有n个互不相同元素的集合同时找最大元和最小元至少需进行多少次比较? 若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找试在下述两种情况下分别讨论两者在等概率时的平均查找长度&n
知识大全 严蔚敏《数据结构(c语言版)习题集》算法设计题第五章答案
第五章数组和广义表 voidRSh(intA[n]intk)//把数组A的元素循环右移k位只用一个辅助存储空间 for(i=;i<=k;i++) if(n%i==&&a
常见的文件组织方式有哪几种?各有何特点?文件上的操作有哪几种?如何评价文件组织的效率?答 常用的文件组织方式有顺序文件索引文件散列文件和多关键字文件 ●顺序文件的
对含有n个互不相同元素的集合同时找最大元和最小元至少需进行多少次比较? 答 设变量max和min用于存放最大元和最小元(的位置)第一次取两个元素进行比较大的放入max小的放入min从第次开
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些