第5章 数组习题
第5章《数组》复习题

第5章数组一、选择题1、下列关于数组的描述正确是:()A) 数组的长度是固定的,而其中元素的数据类型可以不同B) 数组的长度是固定的,而其中元素的数据类型必须相同C) 数组的长度是可变的,而其中元素的数据类型可以不同D) 数组的长度是可变的,而其中元素的数据类型必须相同2、在C++语言中引用数组元素时,下面关于数组下标数据类型的说法错误的是:()A) 整型常量 B) 整型表达式C) 整型常量或整型表达式 D) 任何类型的表达式3、要定义数组A,使得其中每个元素的数据分别依次为:3、9、4、8、0、0、0,错误的定义语句是:()A) int A[]={3,9,4,8,0,0,0}; B) int A[9]={3,9,4,8,0,0,0};C) int A[]={3,9,4,8}; D) int A[8]={3,9,4,8};4、有如下数组声明:int value[30];,下标值引用错误的是:()A) value[30] B) value[0] C) value[10] D) value[20]5、以下叙述中错误的是:()A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统自动扩展数组长度D)可以通过赋初值的方式确定数组元素的个数6、在C++语言中,一维数组的定义方法为:()。
类型说明符数组名A)[常量表达式] B)[整型常量] C)[整型变量] D)[整型常量]或[整型表达式]7、对以下说明语句的正确理解是()。
int a[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5] B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确8、假定short类型变量占用两个字节,其有定义:short x[10]={0,2,4};,则数组x在内存中所占字节数是()。
第五章,,华工数据结构试卷资料,电信学院,

第五章,,华⼯数据结构试卷资料,电信学院,习题5.1 选择题1、⼀维数组和线性表的区别是( A )。
A、前者长度固定,后者长度可变B、后者长度固定,前者长度可变C、两者长度均固定D、两者长度均可变2、设W为⼀个⼆维数组,其每个数据元素W ij占⽤6个字节,⾏下标i从0到8,列下标j从2到5,则⼆维数组W的数据元素共占⽤(C)个字节。
A、480 B、192 C、216 D、1443、在稀疏矩阵的⾏逻辑链式存储中,每个⾏单链表中的结点都具有相同的( A )。
A、⾏号B、列号C、元素值D、地址4、⼆维数组M的元素是4个字符(每个字符占⼀个存储单元)组成的串,⾏下标i的范围从0到4,列下标j的范围从0到5,M按⾏序存储时元素M[3][5]的起始地址与M按列序存储时的元素()的起始地址相同。
A 、M[2][4] B、M[3][4] C、M[3][5] D、M[4][4]5、稀疏矩阵⼀般的压缩存储⽅法有两种,即(C)。
A、⼆维数组和三维数组B、三元组和散列C、三元组和⼗字链表D、散列和⼗字链表5.2 填空题1、⼀维数组的逻辑结构是(线性表),存储结构是(顺序存储);对于⼆维或多维数组,分为按(⾏序)和(列序)两种不同的⽅式存储。
2、对于⼀个⼆维数组A[m][n],若按⾏序为主序存储,则任⼀元素A[i][j]相对于A[0][0]的地址为(A+(i*m+j)*每个元素所占字节数)。
3、已知⼴义表A=((a,b,c),(d,e,f)),则运算head(tail(tail(A)))=(e)。
4、三维数组R[c1‥d1,c2‥d2,c3‥d3]共含有((d1-c1+1)*(d2-c2+1)*(d3-c3+1))个元素。
(c1≤d1,c2≤d2,c3≤d3)5、⼆维数组A[10‥20][5‥10]以⾏序为主序存储,每个元素占4个存储单元,且A[10][5]的存储地址是1000,则A[18][9]的地址是(1368)。
5.3 应⽤题1、按⾏优先存储⽅式,写出三维数组A[3][2][4]在内存中的排列顺序及地址计算公式(假设每个数组元素占⽤L个字节的内存单元,a[0][0][0]的内存地址为Loc(a[0][0][0]))。
C语言第五章习题带答案

练习5-1答案一、选择题1.合法的数组说明语句是( B )。
A.int a[]="string"; B.int a[]={0,1,2,3,4,5};C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a的说明正确的选项是( D )。
A.int a(10); B.int n=10, a[n]; C.int n; D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.:int a[10];,那么对a数组元素的正确引用是( D )。
A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是( C )。
A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};C.int a[]={0}; D.int a[2]={10, 9, 8};5.对以下说明语句的正确理解是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确二、填空题6.求所有不超过200的N值,N的平方是具有对称性质的回文数。
所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。
例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio.h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③ ) printf("%2d:%10d %10d\n", ++count, n, n*n);}}那么①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案一.填空题1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
5. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
6. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)7. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89508. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
9.求下列广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号(2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ;(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ;(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d);10.C语言规定,字符串常量按_字符数组_____处理,它的值在程序的执行过程中是不能改变的。
C语言程序设计(第3版)第5章习题参考答案

printf(" 4: insert 5:delete 6:exit \n");
while(1)
{ printf("\nplease input a menu option:");
scanf("%d",&iMenu);
switch(iMenu)
break;
case 4: printf("\nplease input the data to be inserted:");
scanf("%d",&iInsert);
for(i=0;i<10;i++)
{
if(iInsert>iScore[i])
{
iFlag=i;
break;
}
}
for(i=10;i>iFlag;i--)
{
if(iScore[j]<iScore[j+1])
{
iTemp = iScore[j];
iScore[j] = iScore[j+1];
iScore[j+1] = iTemp;
}
}
}
printf("\nthe sorted datas :");
for(i=0;i<10;i++)
printf("%d ",iScore[i]);
printf("%d\t",s[i][0]);
for(j=1;j<=i;j++)
数据结构第五章习题答案

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.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。
数据结构第五章数组习题

第五章数组习题1、假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。
A、808B、818C、1010D、10202、数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。
A、1175B、1180C、1205D、12103、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i<j)的位置k的关系为( )。
A、i*(i-1)/2+jB、j*(j-1)/2+iC、i*(i+1)/2+jD、j*(j+1)/2+i4、对稀疏矩阵进行压缩存储目的是()。
A、便于进行矩阵运算B、便于输入和输出C、节省存储空间D、降低运算的时间复杂度5、已知广义表L=((x,y,z), a, (u,t,w)),从L表中取出原子项t的运算是()。
A、head(tail(tail(L)))B、tail(head(head(tail(L))))C、head(tail(head(tail(L))))D、head(tail(head(tail(tail(L)))))6、已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。
A、head(tail(LS))B、tail(head(LS))C、head(tail(head(tail(LS)))D、head(tail(tail(head(LS))))7、多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为()。
A、数组的元素处在行和列两个关系中B、数组的元素必须从左到右顺序排列C、数组的元素之间存在次序关系D、数组是多维结构,内存是一维结构8、二维数组M[0..7,0..9]的元素是由4个字符组成的串(每个字符占用1个存储单元),存放M需要存储单元数为()。
C语言程序设计教程第五章练习题题目

单选题1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是()A.arr[10]B.arr[6.3]C.arr(6)D.arr[0]3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()4、若int arr[5] = {1,2,3}; 则arr[2]的值为()5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};7、阅读下列程序段:char s[18] = "a book!";printf("%.4s\n", s);其输出结果为()A.a book!B.a bookC.a bo8、阅读下列程序:int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()9、阅读下面程序:int i;int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for (i = 0; i<4; i++)printf("%3d", x[i][3 - i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13B.1 6 11 16C.4 7 10 13D.4 8 12 1610、下列描述中不正确的是()。
《数据结构》第五章习题参考答案

《数据结构》第五章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、知道一颗树的先序序列和后序序列可唯一确定这颗树。
( ×)2、二叉树的左右子树可任意交换。
(×)3、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。
(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。
( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。
(×)8、度为2的树就是二叉树。
(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。
A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。
A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。
该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。
①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。
A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。
A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。
2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。
数据结构-第5章--数组练习题

数据结构-第5章--数组练习题第5章数组一、选择题3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(A)。
A.BA+141B.BA+180C.BA+222D.BA+2254.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(A)。
A.808B.818C.1010D.10205.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是()。
1195A.1175B.1180C.1205D.12107.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
供选择的答案:A.198B.195C.1972+64某3=19410.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(iA.i某(i-1)/2+jB.j某(j-1)/2+iC.i某(i+1)/2+jD.j某(j+1)/2+i11.设A是n某n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为(C)。
A.i(i-l)/2+jB.j(j-l)/2+iC.j(j-l)/2+i-1D.i(i-l)/2+j-112.A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(AB)。
《数据结构》第五章 数组 习题

《数据结构》第五章 数组 习题基本概念题:5-1 分别写出一维数组和二维数组的存储映象公式。
5-2 什么叫二维数组的行序优先存储?什么叫二维数组的列序优先存储?C 语言采用的是行序优先存储还是列序优先存储?5-3 什么叫随机存储结构?为什么说数组是一种随机存储结构?5-4 动态数组和静态数组在使用方法上有什么不同?5-5 什么样的矩阵叫特殊矩阵?特殊矩阵压缩存储的基本思想是什么?5-6 什么样的矩阵叫稀疏矩阵?稀疏矩阵压缩存储的基本思想是什么?5-7 什么叫稀疏矩阵的三元组?什么叫稀疏矩阵的三元组线性表?5-8 稀疏矩阵主要有哪些压缩存储结构?复杂概念题:5-9 设一个系统中二维数组采用以行序为主的存储方式存储,已知二维数组a[n][m]中每个数据元素占k 个存储单元,且第一个数据元素的存储地址是Loc(a[0][0]),求数据元素a[i][j](0≤i≤n -1, 0≤j≤m -1)的存储地址。
5-10 设一个系统中二维数组采用以行序为主的存储方式存储,已知二维数组a[10][8]中每个数据元素占4个存储单元,且第一个数据元素的存储地址是1000,求数据元素a[4][5]的存储地址。
5-11 画出一个3行3列二维动态数组存储结构示意图。
5-12 对于如下所示的稀疏矩阵A(1)写出该稀疏矩阵的三元组线性表;(2)画出稀疏矩阵A 的三元组顺序表结构;(3)画出稀疏矩阵A 的带头结点单链表结构;(4)画出稀疏矩阵A 的行指针数组链表结构;(5)画出稀疏矩阵A 的三元组十字链表结构。
算法设计题:5-13 为节省内存,n 阶对称矩阵采用压缩存储,要求:(1)编写实现C = A + B 操作的函数。
设矩阵A 、矩阵B 和矩阵C 均采用压缩存储方式存储,矩阵元素均为整数类型。
(2)编写一个采用压缩存储的n 阶对称矩阵的输出函数,要求输出显示成矩阵形式,设矩阵元素均为整数类型。
(3)设矩阵A 和矩阵B 为如下所示的矩阵,编写一个用矩阵A 和矩阵B 作为测试例子的测试上述函数的主程序。
vb课后练习答案习题解答 (5).

第5章数组与记录5.1 填空题1.若要定义一个包含10个字符串元素,且下界为1的一维数组s,则数组说明语句为(。
答案:Dim s(1 To 10 As String2.若要定义一个元素为整型数据的二维数组a,且第一维的下标从0到5,第二维下标从-3到6,则数组说明语句为(。
答案:Dim a(0 To 5,-3 To 6 As Integer3.如果数组元素的下标值为实数,则VB系统会按(进行处理。
答案:四舍五入原则4.数组元素个数可以改变的数组称为(;数组元素可以存放不同类型数据的数组称为(。
答案:可调数组、可变类型数组5.数组刷新语句用于(。
若被刷新的数组是数值数组,则把所有元素置(;若被刷新的数组为字符串数组,则把所有元素置(。
答案:清除指定数组内容、0、空字符串10.控件数组是由一组类型和(相同的控件组成,共享(。
答案:名字、同一个事件过程11.控件数组中的每一个控件都有唯一的下标,下标值由(属性指定。
答案:Index12.建立控件数组有两种方法:(和(。
答案:在设计阶段通过相同Name属性值来建立、在程序代码中使用Load方法5.2 选择题1.下列一维数组说明语句错误的是(。
a Dim b(100 AS Doubleb Dim b(-5 To 0 AS Bytec Dim b(-10 To –20 AS Integerd Dim b(5 To 5 AS String答案:c2.若有数组说明语句为:Dim a(-3 To 8,则数组a包含元素的个数是(。
a 5b 8c 11d 12答案:d3.设有数组说明语句:Dim c(1 To 10,则下面表示数组c的元素选项中(是错误的。
a c(i-1b c(5+0.5c c(0d c(10答案:c4.下列数组说明语句中正确的是(。
a Dim a(-1 To 5,8AS Stringb Dim a(n,nAS Integerc Dim a(0 To 8,5 To –1AS Singled Dim a(10,-10AS Double答案:a5.设有数组说明语句:Dim b(-1To2,-2To2,则数组b中元素的个数是(。
C语言程序设计(第3版)第5章补充习题及答案

第5章补充习题及答案习题5.1 选择题(1)对定义语句int iArr[2]; 的正确描述是:()A. 定义一维数组iArr,其中包含iArr[1]和iArr[2]两个元素B. 定义一维数组iArr,其中包含iArr[0]和iArr[1]两个元素C. 定义一维数组iArr,其中包含iArr[0]、iArr[1]和iArr[2]三个元素D. 定义一维数组iArr,其中包含iArr(0)、iArr(1)和iArr[2]三个元素(2)以下关于数组的说法,不正确的是:()A. C语言中可以通过通过数组名对数值型数组进行整体的输入或输出B. 数组中的各元素依次占据内存中连续的存储空间C. 同一数组中的元素具有相同的名称和类型D. 在使用数组前必须先对其进行定义(3)有以下程序()#include “stdio.h”void main( ){ int iArr[3]={1,2,3},i;for(i=3; i>=1; i++) printf(“ %d ” , iArr[i] );}则程序运行后的输出结果是:A. 1 2 3B. 不确定的值C. 编译出错D. 3 2 1(4)执行以下程序段后,iArr[2]的值是:()int iArr[10]={1,2,3,4,5,6,7,8,9,10},i,j,t; i = 0 ; j = 9;while( i < j){ t= iArr[i] ; iArr[i] = iArr[j]; iArr[j]=t;i++; j--; }A. 8B. 2C. 3D. 9(5)有以下程序:#include “stdio.h”void main(){ char chA[10]=”abcdef”, chB[5]=”AB\0c”;strcpy(chA,chB);printf(“%c”, chA[3]);}则程序的运行结果是:()A. dB. cC. \0D. 05.2 填空题(1)对于二维数组iA[5][10],判断下列对数组元素的引用正确的是。
李春葆《数据结构教程》(C++语言描述)课后习题(第5~8章)【圣才出品】

三、算法设计题 (1)设定二维整数数组 B[0..m-1,0..n-1]的数据在行、列方向上都按从小到大的顺序 排序,且整型变量 x 中的数据在 B 中存在。试设计一个算法,找出一对满足 B[i,j]=x 的 i、 j 值,要求比较次数不超过 m+n。 答: void FindX(int &a,int x) {
(4)一个稀疏矩阵经过压缩后,和直接采用二维数组存储相比会失去______特性。 A.顺序存储 B.随机存取 C.输入/输出 D.以上都不对 【答案】B 【解析】稀疏矩阵可以采用三元组顺序表或是十字链表压缩存储,无论采取哪种方式, 均会使稀疏矩阵不再具有随机存取功能,答案为 B 项。
(5)当 m 行 n 列的稀疏矩阵采用十字链表表示时,其中单链表的个数为______。
(3)简述广义表、数组和线性表之间的异同。 答:一维数组可以看做是一个线性表,类似的也可以采用链式存储和顺序存储结构,但 是在计算机中直接将其视为连续的存储单元集合,二维数组同理可以视为每一个元素都是相 同类型的线性表的线性表,以此类推,任何多维数组都可以看做是线性表,其中每一个数据 元素也是一个线性表,所以说多维数组是线性表的推广。 广义表也是线性表的推广,其一般表示业余线性表相同,只不过其每一个元素既可以是 一个线性表,也可以是一个单个数据元素(原子),而线性表中的每一个元素只能是单个的 数据,这也就使得广义表一般只能用链式结构来表示,二线性表可以用顺序结构和链式结构 表示。
答:下三角矩阵的示意图如下图所示:
4 / 73
圣才电子书
十万种考研考证电子书、题库视频学习平台
a00 a10a11 a20a31a32 aij a 1 ij
在 A[i,j]之前共有 i 行,每行元素个数递增,同时此行有 j 个元素在其之前,因此其前
第5章 数据结构与算法 习题与答案

第五章习题(1)复习题1、试述数据和数据结构的概念及其区别。
数据是对客观事物的符号表示,是信息的载体;数据结构则是指互相之间存在着一种或多种关系的数据元素的集合。
(P113)2、列出算法的五个重要特征并对其进行说明。
算法具有以下五个重要的特征:有穷性:一个算法必须保证执行有限步之后结束。
确切性:算法的每一步骤必须有确切的定义。
输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件。
输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
没有输出的算法没有实际意义。
可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
(P115)3、算法的优劣用什么来衡量?试述如何设计出优秀的算法。
时间复杂度空间复杂度(P117)4、线性和非线性结构各包含哪些种类的数据结构?线性结构和非线性结构各有什么特点?线性结构用于描述一对一的相互关系,即结构中元素之间只有最基本的联系,线性结构的特点是逻辑结构简单。
所谓非线性结构是指,在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱(或直接后继)元素。
树型和图型结构就是其中十分重要的非线性结构,可以用来描述客观世界中广泛存在的层次结构和网状结构的关系。
(P118 P122)5、简述树与二叉树的区别;简述树与图的区别。
树用来描述层次结构,是一对多或多对一的关系;二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。
图也称做网,是一种比树形结构更复杂的非线性结构。
在图中,任意两个节点之间都可能相关,即节点之间的邻接关系可以是任意的,图表示的多对多的关系。
(P121-P124)6、请举出遍历算法在实际中使用的例子。
提示:根据实际生活中需要逐个访问处理的情况举例。
数据结构第五章数组和广义表

第五章数组和广义表:习题习题一、选择题1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。
A. 808B. 818C. 1010D. 10202.同一数组中的元素( )。
A. 长度可以不同 B.不限 C.类型相同 D. 长度不限3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。
从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。
(1)存放A至少需要( )个字节。
(2)A的第8列和第5行共占( )个字节。
(3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址一致。
供选择的答案:(1)A. 90 B. 180 C. 240 D. 270(2) A. 108 B. 114 C. 54 D. 60(3)[8][5] B. A[3][10] [5][8] [O][9]4.数组与一般线性表的区别主要是( )。
A.存储方面B.元素类型方面C.逻辑结构方面D.不能进行插入和删除运算5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。
A. (i-l)×n+jB. (i-l)×n+j-lC.i×(j-l) D. j×m+i-l6.所谓稀疏矩阵指的是( )。
A.零元素个数较多的矩阵B.零元素个数占矩阵元素中总个数一半的矩阵C.零元素个数远远多于非零元素个数且分布没有规律的矩阵D.包含有零元素的矩阵7.对稀疏矩阵进行压缩存储的目的是( )。
A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D. 降低运算的时间复杂度8.稀疏矩阵一般的压缩存储方法有两种,即( )。
A.二维数组和三维数组B.三元组和散列C.三元组和十字链表D.散列和十字链表9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。
数据结构 数组和广义表习题

第五章数组和广义表习题一、选择题1.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e运算是。
A.head(tail(LS))B.tail (head(LS))C.head(tail(head(tail(LS))))D. head(tail(tail(head(LS))))2.若广义表A满足head(A)= tail(A),则A为。
A.()B.(())C.((),())D.((),(),())3.广义表A=(a,b,(c,d),(e,(f,g))),则下面式子Head(Tail(Head(Tail(Tail(A)))))的值为。
A.()B.(d)C.cD.d4.稀疏矩阵一般的压缩存储方法有 两种。
A.二维数组和三维数组B.三元组和散列表C.三元组和十字链表D.散列表和十字链表5.已知矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行优先存放在一维数组B[1…n(n-1)/2]中,对下三角部分中任一元素aij(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+j6.已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子u的运算是。
A.head(tail(tail(L)))B.tail(head(head(tail(L))))C.head(tail(head(tail(L))))D.head(head(tail(tail(L))))7.广义表L=((a,b,c)),则L的长度和深度分别为。
A.1和1B.1和3C.1和2D.2和38. tail (head(((a,b,c,d,e))))= 。
A.aB.c,dC.D.(b,c,d,e)9.二维数组A[10…20,5…10]采用列序方式存储,每个数据元素占4个存储单元,且A[10,5]的存储地址是1000,则A[20,9]的地址是。
c语言第五章习题

第五章练习题一、选择题1、判断字符串a和b是否相等,应当使用()A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))2、以下正确的定义语句是()A、int a[1][4]={1,2,3,4,5};B、float x[3][]={{1},{2},{3}};C、long b[2][3]={{1},{1,2},{1,2,3}};D、double y[][3]={0};3、以下各组选项中,均能正确定义二维实型数组a的选项是()A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}};D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()#include "stdio.h"main(){ char str[]="SSSWLIA",c;int k;for(k=2;(c=str[k]!='\0');k++){ switch(c){case 'I':++k;break;case 'L':continue;default:putchar(c);continue;}putchar('*');}}A、SSW*B、SW*C、SW*AD、SW5、下面程序段是输出两个字符串中对应相等的字符。
横线处应填入()char x[]="programming";char y[]="Fortran";int i=0;while(x[i]!='\0'&&y[i]!='\0')if(x[i]==y[i]) printf("%c",《1》);A、x[i++]B、y[++i]C、x[i]D、y[i]6、有下面的程序段,则()char a[3],b[]="china";a=b;printf("%s",a);A、运行后将输出ChinaB、运行后将输出ChC、运行后将输出ChiD、编译出错7、下面程序的运行结果是()main(){ char ch[7]={"12ab56"};int i,s=0;for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)s=10*s+ch[i]-'0';printf("%d\n",s);}A、1B、1256C、12ab56D、12568、定义如下变量和数组:则下面语句的输出结果是()int k;int a[3][3]={1,2,3,4,5,6,7,8,9,};for(k=0;k<3;k++)printf("%d",a[k][2-k]);A、3 5 7B、3 6 9C、1 5 9D、1 4 79、下面程序段的运行结果是()char c[5]={'a','b','\0','c','\0'};printf("%s",c);A、'a''b'B、abC、ab cD、abc10、若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()A、2B、3C、4D、无确定值11、下面程序的运行结果是()main()for(i=1;i<6;i++){ a[i]=9*(i-2+4*(i>3))%5;printf("%2d",a[i]);}}A、-4 0 4 0 4B、-4 0 4 0 3C、-4 0 4 4 3D、-4 0 4 4 012、下面程序的运行结果是()main(){int a[6][6],i,j;for(i=1;i<6;i++)for(j=1;j<6;j++)a[i][j]=(i/j)*(j/i);for(i=1;i<6;i++){ for(j=1;j<6;j++)printf("%2d",a[i][j]);printf("\n");}}A、1 1 1 1 1B、0 0 0 0 1C、1 0 0 0 0D、1 0 0 0 11 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 01 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 01 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 01 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 113、下述对C语言字符数组的描述中错误的是()A、字符数组可以存放字符串。
数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000。
计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。
问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。
试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。
答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。
(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 5 章数组和广义表
一、选择题
2. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址,
那么这个数组的体积是(①)个字节。
假设存储数组元素A[1,0]的第一个字节的地址是0,
则存储数组A的最后一个元素的第一个字节的地址是(②)。
若按行存储,则A[2,4]的第
一个字节的地址是(③)。
若按列存储,则A[5,7]的第一个字节的地址是(④)。
就一般情
况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。
供选择的
答案:
①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120
G. 156 H. 234 I. 276 J. 282 K. 283 L. 288
⑤: A.行与列的上界相同 B. 行与列的下界相同
C. 行与列的上、下界都相同
D. 行的元素个数与列的元素个数相同
3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,
数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。
A. BA+141
B. BA+180
C. BA+222
D. BA+225
4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存
储单元,基地址为10,则LOC[5,5]=()。
A. 808
B. 818
C. 1010
D. 1020
5. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000
的内存单元中,则元素A[5,5]的地址是( )。
A. 1175
B. 1180
C. 1205
D. 1210
6. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,
假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字
节的地址是(①)。
若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②)
和(③)。
若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④)和(⑤)。
①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176
I.184 J.188
13. 设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数
组元素A[i,j]在一维数组B中的下标为( )。
A.(i-1)*n+j
B.(i-1)*n+j-1
C. i*(j-1)
D. j*m+i-1
15. 数组A[0..4,-1..-3,5..7]中含有元素的个数()。
【中山大学 1998 二、5(2分)】
A. 55
B. 45
C. 36
D. 16
二、判断题
1.数组不适合作为任何二叉树的存储结构。
(×)
2. 从逻辑结构上看,n维数组的每个元素均属于n个向量。
(√)
4. 数组是同类型值的集合。
(×)
5. 数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。
(×)
三、填空题
1. 数组的存储结构采用_______存储方式。
2. 设二维数组A[-20..30,-30..20], 每个元素占有4 个存储单元, 存储起始地址为200.如按行优先顺序存储,则元素 A[25,18]的存储地址为__(1)_;如按列优先顺序存储,则元素A[-18,-25]的存储地址为__(2)_。
3. 设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[45,68]的存储地址为_(1)_;若以列序为主序顺序存储,则元素a[45,68]的存储地址为_(2)_。
4. 将整型数组A[1..8,1..8]按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[7,3]的地址是:_______。
5. 二维数组a[4][5][6](下标从0开始计,a有4*5*6个元素),每个元素的长度是2,则a[2][3][4]的地址是____。
(设a[0][0][0]的地址是1000,数据以行为主方式存储)
6. 设有二维数组A[0..9,0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按列优先顺序存储,则元素A[6,6]存储地址为_______。
7. 已知数组A[0..9,0..9]的每个元素占5个存储单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[6,8]的地址为_______。
8. 已知二维数组A[1..10,0..9]中每个元素占4个单元,在按行优先方式将其存储到起始地址为1000的连续存储区域时,A[5,9]的地址是:_______。
10. 设数组A[0..8,1..10],数组中任一元素A[i,j]均占内存48个二进制位,从首地址2000开始连续存放在主内存里,主内存字长为16位,那么
(l)存放该数组至少需要的单元数是_______;
(2)存放数组的第8列的所有元素至少需要的单元数是_______;
(3)数组按列存储时,元素A[5,8]的起始地址是_______。
38. 完善下列程序,每小题在PASCAL语言(a)和C语言(b)中任选一题。
下面的程序将数列1,2,3,…,n*n,依次按蛇型方式存放在二维数组A[1..n,1..n]中。
即 (示意圖编者略)。
(a)算法的PASCAL 语言程序描述(编者略):(b)算法的C语言程序描述:
#define NMAX 10
#include “stdio.h”
main()
{ int i,j,n,k,p,q,m;
int a [NMAX][NMAX];
scanf(“%d”,&n);
m=1;
for(k=1;(1) ;k++)
{if(k<n) q=k; else(2) __;
for(p=1;p<=q;p++)
{if(3) {i=q-p+1;j=p;}
else{i=p;j=q-p+1;}
if(4) {i=i+n-q;j=j+n-q;}
a[i][j]=m;(5) _;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(“%4d”,a[i][j]);printf(“\n”);
}
}
}
四应用题
1. 数组A[1..8,-
2..6,0..6]以行为主序存储,设第一个元素的首地址是78,每个元素的长度为4,试求元素A[4,2,3]的存储首地址。
2. 已知b对角矩阵(a ij)n*n,以行主序将b条对角线上的非零元存储在一维数组中,每个数据元素占L个存储单元,存储基地址为S,请用i,j 表示出 a ij的存储位置。
3. 数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。
求:
(1)存放该数组所需多少单元?
(2)存放数组第4列所有元素至少需多少单元?
(3)数组按行存放时,元素A[7,4]的起始地址是多少?
(4)数组按列存放时,元素A[4,7]的起始地址是多少?
4.假设按低下标优先存储整型数组A(-3:8,3:5,-4:0,0:7)时,第一个元素的字节存储地址是100,每个整数占4个字节,问A(0,4,-2,5)的存储地址是什么?
5.设有三维数组A[-2:4,0:3,-5:1]按列序存放,数组的起始地址为1210,试求A(1,3,-2)所在的地址。
6. 三维数组A[1..10,-2..6,2..8]的每个元素的长度为4个字节,试问该数组要占多少个字节的存储空间?如果数组元素以行优先的顺序存贮,设第一个元素的首地址是100,试求元素A[5,0,7] 的存贮首地址。
8.数组A[0..8, 1..10] 的元素是6 个字符组成的串,则存放A至少需要多少个字节? A 的第8列和第5行共占多少个字节?若A 按行优先方式存储,元素A[8,5]的起始地址与当A 按列优先方式存储时的哪个元素的起始地址一致?
13. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,那么存储数组的最后一个元素的第一个字节的地址是多少?若按行存储,则A[3,5]和A[5,3]的第一个字节的地址是多少?若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是多少?
19. 给出数组 A∶ARRAY[3..8,2..6] OF INTEGER;当它在内存中按行存放和按列存放时,分别写出数组元素A[i,j]地址计算公式(设每个元素占两个存储单元)。
五算法设计题
9. 编写算法,将自然数1~n按“蛇形”填入n×n矩阵中。
例(1~4)如图所示:(用
13410
25911
681215
7131416。