数据结构习题 下载本文

(A) front=front+1 (B) front=(front+1)%(m-1) (C) front=(front-1)%m (D) front=(front+1)%m

20. 栈和队列与线性表的逻辑结构相同。( 对 ) 21. 栈只能在栈顶进行插入和删除。( 对 )

22. 队列只能在队首进行删除,在队尾进行插入。( 对 ) 23. 队列只能在队尾进行删除,在队首进行插入。( 错 )

第四章

1. 通常采用【顺序 】存储结构来存放数组 。对二维数组可有两种存储方法:一种是以【 行 】为主序的存储方式,另一种是以【 列 】为主序的存储方式。

2. 已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为LOC(a1),那么,LOC(ai)= 【loc(a1)+(i+1)*k 】。 3. 在C语言中定义的二维数组int M[10][20],每个元素(整数)占两个存储单元,数组的起始地址为2000, M[8][19]的存储值为【 2358 】。元素M[5][10]的存储位置为【 2220 】。 4. 假设有6行8列的二维数组A,每个元素占用6个字节,存储器按字节编址。已知A的基地址为1000,那么元素A[3,6]在按行存储时的地址是【 1126 】,按列存储时的地址是【 1192 】。

5. 对称方阵采用压缩存储, 即为每一对对称位置元素只分配一个存储空间 ,则可将n2个元素压缩存储到【 n*(n+1)/2 】个元素的存储空间中。 6. 有一个10阶对称矩阵A[10][10],采用压缩存储方式以行序为主存储,A[0][0]的位置是1,则A[8][5]的位置是【 42 】。 7. 三元组表是【稀疏矩阵 】的【 顺序 】存储结构。 8. 字符串S=“Computer”中,以p为首字符的子串有【 5 】个。 9. TAIL[HEAD[((a,b),(c,d))]]运算的结果是【 (b) 】。 10. 广义表L=((x,a),(x,a,(b,c)),y)的长度是【 3 】。

11. 设广义表A=(a,b),B=(c,d),求head( (A, B) )的值为【 (a,b)】。 12. 有如下稀疏矩阵,请写出它的三元组表:m=6 n=6 t=9 13. 串是( D )。

(A)一些符号构成的序列 (B)有限个字母构成的序列 (C)一个以上的字符构成的序列 (D)有限个字符构成的序列

14. 已知函数Sub(s,i,j)的功能是返回串s中从第i个字符起长度为j的子串,函数Scopy(s,t)的功能为复制串t到s。若字符串S=“SCIENCESTUDY”,则调用函数Scopy(P,Sub(S,1,7)后得到(A )。 (A)P=“SCIENCE” (B)P=“STUDY” (C)S=“SCIENCE ” (D)S=“STUDY” 15. 设有一个二维数组A[6][8],假设A[0][0]存放位置在1000,每个元素占6个空间,按行优先存储,则A[3][6]的存储位置是__B_ (A)1180 (B)1126 (C)126 (D)180

16. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第五个元素的地址是_______B_______。

(A)110 (B)108 (C)100 (D)120

17. 为了节省存储空间,将n阶对称矩阵A(下标从1开始)中包括主对角线元素在内的下三角部分的所有元素按照行序为主序方式存放在一维数组B[1:n(n+1)/2]中,对任意下三角部分的元素aij(i≥j)在数组B的下标k是______B________。 (A)i(i-1)/2+j-1 (B)i(i-1)/2+j (C)i(i+1)/2+j-1 (D)i(i+1)/2+j

18. 基于三元组的稀疏矩阵,对每个非零元素aij,可以用一个( __B_ )唯一确定。 (A)非零元素 (B)三元组(i,j,aij) (C) aij (D) i,j

19. 广义表A=((),(a),(b,(c,(D)))的长度为_____B______。 (A)2 (B)3 (C)4 (D)5 20. 空串与由空格组成的串没有区别。( 错 )

21. 对称矩阵的压缩存储是指对矩阵中的值相同的元素只分配一个存储空间。( 对 ) 22. 对称矩阵的压缩存储是指对矩阵中的规律元素只分配一个存储空间。( 对 ) 23. N阶下三角矩阵压缩存储需要n*(n+1)/2个存储空间。( 对 ) 24. 三元组表是稀疏矩阵的顺序存储结构。( 对 )

第六章

1. 2. 3. 4.

在二叉树中,第i层的结点数最多为【2^(i-1)】; 深度为k的二叉树的结点总数最多为【 2^k-1 】。

对任何二叉树,若度为2的节点数为n2,则叶子数n0=【 n2+1 】。 在一棵完全二叉树中,若编号为i的结点有左孩子,则该左孩子结点的编号为【 2i 】;若编号为i的结点有右孩子,则该右孩子结点的编号为【2i+1 】。

5. 一棵深度为5的二叉树最多有【31 】 个结点。

6. 深度为h且有【 2^h-1 】个结点的二叉树称为满二叉树。(设根结点处在第1层)。

7. 具有n个结点的完全二叉树,若按层次从上到下、从左到右对其编号(根结点为1号),则编号最大的分支结点序号是【 n/2 】,编号最小的分支结点序号是【 1 】,编号最大的叶子结点序号是【 n】,编号最小的叶子结点序号是【n/2+1 】。

8. 在有n个结点的二叉树,采用二叉链表存放,空链域的个数为【n+1 】。 9. 二叉树通常有【 顺序 】存储结构和【二叉链表 】存储结构两类存储结构。

10. 给定二叉树的两种遍历序列,分别是:前序遍历序列:D,A,C,E,B,H,F,G,I; 中序遍历序列:D,C,B,E,H,A,G,I,F,试画出二叉树。题出错

11. 请对给定的二叉树的存储结构,将二叉树的中序遍历输出结点递归算法补充完整:

typedef struct node

{ char data; /*元素为字符型*/

struct node * Lchild,*Rchild; } *BiTree;

void Inorder(BiTree root ) { if ( root != NULL )

{ 【 Inorder(root->Lchild) 】;

【 Visit(root->data)】;

【 inorder(root->Rchild) 】; } }

12. 请对给定的二叉树的存储结构,将二叉树的先序遍历输出结点递归算法补充完整:

typedef struct node

{ char data; /*元素为字符型*/

struct node * Lchild,*Rchild; } BiTree;

void preorder(BiTree root ) { if ( root != NULL )

{ 【Visit(root->data) 】;

【 preorder(root->Lchild) 】;

【 preorder(root->Rchild) 】; } }

13. 以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句。

void countleaf(bitree *t,int *count)/*根指针为t,假定叶子数count的初值为0*/ {if(t!=NULL)

{if((t->lchild==NULL)&&(t->rchild==NULL)) 【 count=0 】;

countleaf(t->lchild,&count);

【 countleaf(t->rchild,&count) 】 } }

14. 哈夫曼树是带权路径长度【 最短 】的树,通常权值较大的结点离根【较近 】。 15. 有m个叶子结点的哈夫曼树,其结点总数为【2m-1 】。