数据结构习题集及答案

第一章

一、填空题

1 数据元素是数据的基本单位,..数据项.......是具有独立含义的最小标识单位。

3 数据之间的关系(逻辑结构)有四种集合、线性结构、树形结构、网状结构或图状结构,可分为....................... ....、...................两大类。

4 数据的存储结构包括..顺序存储结构.....................、..链式存储结构..........................

二、问答题

1.什么是数据结构?什么是数据类型?

答:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

2.叙述算法的定义与特性。

答:算法是对待定问题求解步骤的一种描述,他是指令的有限序列,其中每一条指令表示一个或多个操作。

一个算法具有以下5个重要特性:

1)、有穷性 2)、确定性3)、可行性 4)、输入 5)、输出

3. 叙述算法的时间复杂度。

答:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时量度,记作T(n)=O(f(n))

他表示随着问题规模n的增大,算法执行时间增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。

三、判断题(在各题后填写“√”或“×”)

1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。(×)

2.下列几种数量级从小到大的排列顺序为:

O(1) 、O(logn)、O(n) 、O(nlogn) 、O(n2) 、O(n3 ) 、O(2n)。(√)

四、1.计算机执行下面的语句时,语句s的执行频度(重复执行的次数)为 _______ 。

FOR(i=l;i

FOR(j=n;j>=i;j--)

s;

2.有下列运行时间函数:

(1)T1 (n)=1000; (2)T2(n)=n2+1000n; (3)T3(n)=3n3+100n2+n+1;

分别写出相应的大O表示的运算时间。(1)_______ (2)_______ (3)_______

3. 设n为正整数,利用大O记号,将该程序段的执行时间表示为n的函数,则下列程序段的时间复杂度可表示为(1)( O (n.) ) (2)( O(n2 ) )

1)float sum1(int n){

/* 计算1!+2!+…+n! */

p=1; sum1=0;

for (i=1; i<=n; ++i){

p=p*i; sum1=sum1+p

}

}/* sum1 */

(2) float sum2(int n){

/* 计算1!+2!+…+n! */

sum2=0;

for (i=1; i<=n; ++i){

p=1;

for (j=1; j<=i; ++j) p=p*j;

sum2=sum2+p;}

}/* sum2 */

第二章

一、判断

1. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。(×)

2. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。(×)

二、填空

1.在单链表中,指针p所指结点为最后一个结点的条件是p->next=NULL。

2.在单链的循环链表中,指针p所指结点为最后一个结点的条件是p->next=头指针。

三、选择

1.、在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为( B )

A.O (n) B.O (1) C.O (n2 ) D.O (log2 n)

2.线性链表不具有的特点是(A )。

A.随机访问B.不必事先估计所需存储空间大小

C.插入与删除时不必移动元素D.所需空间与线性表长度成正比

3.线性表采用链式存储时,其地址( D )。

A 必须是连续的

B 一定是不连续的

C 部分地址必须是连续的

D 连续与否均可以.

4、下列哪一个程序片段是在链表中间插入一个结点。(假设新结点为NEW,欲插入在Pointer结点之后)( B )

A NEW->next=Pointer

B NEW->next=Pointer->next

Pointer=NEW Pointer->next=NEW

C Pointer->next=NEW->next

D 以上皆非

NEW->next=Pointer

5. 在单链表中,增加头结点的目的是( C ) A. 使单链表至少

有一结点 B. 标志表中首结点位置

C. 方便运算的实现

D.说明单链表是线性表的链式存储实现

6.线性表L在情况下适用于使用链式结构实现。(B)

(A)需经常修改L中的结点值(B)需不断对L进行删除插入

(C)L中含有大量的结点(D)L中结点结构复杂

7、向一个有127个元素原顺序表中插入一个新元素并保存原来顺序不变,平均要移动( B)个元素。

A、8

B、63.5

C、63

D、7

三、算法设计

1 设顺序表L中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。

1. Status Insert_SqList(SqList &va,int x)//把x插入递增有序表va中

{if(va.length+1>va.listsize) return ERROR;

va.length++;

for(i=va.length-1;va.elem[i]>x&&i>=0;i--)

va.elem[i+1]=va.elem[i];

va.elem[i+1]=x;

return OK;

}//Insert_SqList

2 分别写出算法将单链表和顺序表就地逆置(用尽可能少的附加空间在原存储出空间内将将线性表a1,a2,a3,…an 逆置为an…a3,a2,a1)。

2. 1

void reverse(SqList &A)//顺序表的就地逆置

{for(i=0,j=A.length-1;i

A.elem[i]<->A.elem[j];

}//reverse

2.2

void LinkList_reverse(Linklist &L)//链表的就地逆置;为简化算法,假设表长大于2

{p=L->next;q=p->next;s=q->next;p->next=NULL;

while(s->next)

{q->next=p;p=q;

q=s;s=s->next; //把L的元素逐个插入新表表头 }

q->next=p;s->next=q;L->next=s;

}//LinkList_reverse

分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.

*3删除元素递增排列的链表L中所有值相同的元素。

3. Status Delete_Equal(Linklist &L)//删除元素递增排列的链表L中所有值相同的元素

{

p=L->next;q=p->next; //p,q指向相邻两元素

while(p->next)

{if(p->data!=q->data)

{p=p->next;q=p->next; //当相邻两元素不相等时,p,q都向后推一步}

else

{ while(q->data==p->data)

{free(q);

q=q->next; }

p->next=q;p=q;q=p->next; //当相邻元素相等时删除多余元素

}//else

}//while

}//Delete_Equal

第三章作业

1.栈和队列都是特殊线性表,简述其相同点和差异处?

答:1)、相同点:栈和队列都是特殊线性表,对栈和队列的操作是对线性表操作的子集,他们是操作受限的线性表。

2)、不同点:栈是限定仅在表尾进行插入和删除操作的线性表;表尾端称为栈底,相应的表头端称为栈底:另外,栈的修改是按LIFO原则进行的。队列则是一种FIFO的线性表,它只允许在表的一端进行插入,而在表的另一端进行删除;允许插入的一端叫做队尾,允许删除的一端叫做队头。

2.在初始为空的队列中插入元素a,b,c,d以后,紧接着作了两次删除操作,此时的队尾元素是[ d ]

*3.对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。若在逻辑上看一个环,则队列中元素的个数为[ (4)]

(1).R-F ⑵.n+R-F ⑶.(R-F+1)mod n ⑷.(n+R-F)mod n

4. 若一个序列的进栈顺序为1,2,3,4, 那么不可能的出栈序列是 [ A ]

A. 4,2,3,1

B. 3,2,1,4

C. 4,3,2,1

D. 1,2,3,4

5、一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程( B )

A.较快B.较慢C.相同 D 不确定

6.简述以下算法的功能(栈和队列的元素类型均为int)

(1)V oid alog1(stack &S,int e)

{

Stack T; int d;

InitStack(T);

while(!StackEmpty(S)){

Pop(S,d) ; if (d!=e) Push(T,d); }

while(!StackEmpty(T)){

Pop(T,d);

Push(S,d); } }

//删除栈S中所有等于e的元素

(2)void proc_1(Stack S)

{ int i, n, A[255];

n=0;

while(!EmptyStack(S))

{n++; Pop(S, A[n]);}

for(i=1; i<=n; i++)

Push(S, A[i]);

//将栈S逆序

(3)void alog3(Queue &Q)

{Stack S; int d;

InitStack(S);

while(!QueueEmpty(Q)){

DeQueue(Q,d);Push(S,d); }

while(!StackEmpty(S)){

Pop(S,d); EnQueue(Q,d); }

}

//将队列Q逆序

*7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队和出队的算法。

解: typedef Linklist CLQuene;

int InitQueue (CLQueue *Q)

int EnterQueue (CLQueue Q,QueueElementType X)

int DeleteQuene (CLQueue Q,QueueElementType *X)

void InitCiQueue(CiQueue &Q)//初始化循环链表表示的队列Q

{

Q=(CiLNode*)malloc(sizeof(CiLNode));

Q->next=Q;

}//InitCiQueue

void EnCiQueue(CiQueue &Q,int x)//把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q->next指向头结

点,Q->next->next指向队头元素

{

p=(CiLNode*)malloc(sizeof(CiLNode));

p->data=x;

p->next=Q->next; //直接把p加在Q的后面

Q->next=p;

Q=p; //修改尾指针

}

Status DeCiQueue(CiQueue &Q,int x)//从循环链表表示的队列Q头部删除元素x

{

if(Q==Q->next) return ERROR;//队列已空

p=Q->next->next;

x=p->data;

Q->next->next=p->next;

free(p);

return OK;

}//DeCiQueue

1.简述空串与空格串、主串与子串每对术语的区别?

答:1) 、由一个或多个空格组成的串‘’称为空格串(blank string)他的长度为串中空格字符的个数。不含任何元素符号的串称为空串,用符号“Ф”表示,他的长度为0.

2)、串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串相应的称为主串。

2.两个字符串相等的充要条件是什么?

答:两个串相等 <=> 两个串的值相等。

两个串的值相等,也即,两个串的长度相等并且各个对于位置的字符都相等。

3.串有哪几种存储结构?

答:1)、定长顺序存储结构;

2)、堆分配存储结构;

3)、串的块链存储结构。

4.已知两个串:s1=”fg cdb cabcadr”, s2=”abc”, 试求两个串的长度,判断串s2是否是串s1的子串,并指出串s2在串s1中的位置。

答: s1的长度:14;

s2的长度:3;

串s2是串s1的子串,且s2在s1中的位置是9.

5.已知:s1=〃I’m a student〃,s2=〃student〃,s3=〃teacher〃,试求下列各运算的结果:

Index(s1,s2,1);SubString(sub,s,7,7);Strlength(s1);Concat(s2,s3);StrDelete (s1,4,10);

答:运算结果依次是:7;Sub=“student”;13;“student teacher”; s1=“I’m”.

6.编写算法, 统计串S中字符的种类和个数(定长顺序存储).

提示:用结构数组T存储统计结果

typedef struct {

char ch;

int num;

} mytype;

mytype T[MAXSIZE];

解: Void strAnalyze(stringtype S)

{ mytype T[MAXSIZE];

for(i=1;i<=s[0];i++)

{ c=s[i]; j=0;

While(T[j].ch&&T[j].ch!=c)

j++;

if(T[j].ch)

T[j].num++;

else T[j]={c,1}

}

for(j=0;T[j].ch;j++)

printf(“%c:%d\n”,T[j].ch,T[j].num);

} strAnalyze

一、选择题

5-1二维数组A[0..8,0..9],其每个元素占2字节,从首地址400开始,按行优先顺序存放,则元素A[8,5]的存储地址为 A 。

A) 570 B) 506 C) 410 D) 482

5-2设有下三角矩阵A[0..10,0..10],按行优先顺序存放其非零元素,每个非零元素占两个字节,存放的基地址为100,则元素A[5,5]的存放地址为(D )。

A) 110 B) 120 C) 130 D) 14

5-3如下是一个稀疏矩阵的三元组法存储表示和基于此表示所得出的相关叙述

行下标列下标值

1 1 3

1 4 5

2 3 2

3 2 6

3 4 5

3 3 3

I.该稀疏矩阵有5行II.该稀疏矩阵有4列

III.该稀疏矩阵有6个非0元素

这些叙述中 C 是正确的。

A)仅I B)I和II C)仅III D)全部

5-4按行优先顺序存储下三角矩阵的非零元素,则计算非零元素a ij(1≤j≤i≤n)的地址的公式为 D 。

A) LOC(a ij)=LOC(a11) +i×(i+1)/2+j

B) LOC(a ij)=LOC(a11)+i×(i+1)/2+ (j-1)

C) LOC(a ij)=LOC(a11) +i×(i-1)/2+j

D) LOC(a ij)=LOC(a11)+i×(i-1)/2+ (j-1)

5-5对矩阵压缩存储是为了( B )。

A)方便B)节省空间C)方便存储D)提高运算速度

5-6 广义表((a),a)的表头和表尾分别是( B )。

A) a ,((a)) B) (a) ,(a) C) b,(a) D) ((a)) ,a

5-7一个广义表为(a,(a,b),d,e,((i,j)k)),则该广义表的长度和深度分别是( A )。

A) 5,3 B)5,4 C)4,3 D)4,4

二、简答题

5-1 设有一个n⨯n的对称矩阵A,如图(a)所示。为了节约存储,可以只存对角线及对角线以上的元素,称为上三角矩阵。我们把它们按行存放于一个一维数组B中,如图(b)所示。并称之为对称矩阵A的压缩存储方式。试问:若在一维数组B中从0号位置开始存放,则如图(a)所示的对称矩阵中的任一元素a ij在只存上三角部分的情形下(图(b))应存于一维数组的什么下标位置?给出计算公式。

解:当i<j或i=j时

LOC[ a(i,j)]=LOC[ a(0,0)] + [(2n-i-1)*i/2 +j]L

LOC[ a(i,j)]=LOC[ a(1,1)] + [(2n-i)*(i-1)/2 +j]L

当i>j时只需交换i和j即可。

5-2在实际应用中经常遇到的稀疏矩阵是三对角矩阵,如图所示。在该矩阵中除主对角线及在主对角线上下最临近的两条对角线上的元素外,所有其它元素均为0。现在要将三对角矩阵A中三条对角线上的元素按行存放在一维数组B中,且a11存放于B[0]。试给出计算A在三条对角线上的元素a ij (1≤i≤n, i-1 ≤ j≤ i+1)在一维数组B 中的存放位置的计算公式。

解:当i=j时a(i ,j)=3i或3j

当i=j-1时a(i ,j)=3i+1或3j-2

当i=j+1时 a ( i , j )=3i-1或3j+2

三、应用题

5-1矩阵A m n中的某一元素A[i][j]是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵的一个鞍点。假设以二维数组存放矩阵,试编写一个函数,确定鞍点在数组中的位置(若鞍点存在时),并分析该函数的时间复杂度.

解:void Get_Saddle(int A[m][n])// 求矩阵A 中的马鞍点

{ for(i=0;i

{ for(min=A[i][0],j=0;j

if(A[i][j]

for(j=0;j

if(A[i][j]==min) // 判断这个( 些) 最小值是否鞍点

{ for(flag=1,k=0;k

if(min

if(min

if(flag)

printf("Found a saddle element!\nA[%d][%d]=%d",i,j,A[i][j]);}

}//for

}//Get_Saddle

一、选择题

5-1 设有一个二维数组A [ m ][ n ] ,假设A [0][0] 存放位置在644 (10) ,A [2][2] 存放位置在676 (10) ,每个元素占一个空间,问A [3][3] (10) 存放在什么位置()脚注(10) 表示用10 进制表示。

A )676

B )650

C )600

D )692

【解析】

设数组元素A[i][j] 存放在起始地址为Loc ( i, j ) 的存储单元中。

∵Loc ( 2, 2 ) = Loc ( 0, 0 ) + 2 * n + 2 = 644 + 2 * n + 2 = 676.

∴n = ( 676 - 2 - 644 ) / 2 = 15

∴Loc ( 3, 3 ) = Loc ( 0, 0 ) + 3 * 15 + 3 = 644 + 45 + 3 = 692.

【答案】D

5-2 如下是一个稀疏矩阵的三元组法存储表示和基于此表示所得出的相关叙述

I. 该稀疏矩阵有5 行II. 该稀疏矩阵有4 列

III. 该稀疏矩阵有6 个非0 元素

这些叙述中______ 是正确的。

A )仅I

B )I 和II

C )仅III

D )全部

【解析】本题考点是稀疏矩阵的三元组法存储。对稀疏矩阵的每一个非零元素,用一个三元组来描述。用线性表中的一个结点来对应稀疏矩阵的一个非零元素,每个结点包括三个域(行下标,列下标,值),结点之间的次序按矩阵的行优先顺列。

采用线性表的顺序存储结构来存储这些三元组,构成三元组表。

本题中,从该稀疏矩阵的三元组法存储表示中,只能判断该矩阵有6 个非0 元素,不能判断稀疏矩阵总的行数和列数。

【答案】C

5-3 设有下三角矩阵A [0..10,0..10 ],按行优先顺序存放其非零元素,每个非零元素占两个字节,存放的基地址为100 ,则元素A [ 5 , 5 ]的存放地址为()。

A) 110 B) 120 C) 130 D) 140

【解析】本题的考点是多维数组的顺序存储。按行优先顺序存储下三角矩阵A nn 的非零元素,可以得到如下的序列: a 00 ,a 10 ,a 11 ,a 20 ,a 21 ,a 22, ….., a n0 ,a n1 ,a n3 , ….,a nn ,将该序列顺序存储在内存中,第0 行到第i-1 行的元素个数为1 + 2 +…+(i )= i ′(i+1)/2 ,假设a 11 地址是Loc(a 11 ) ,每个元素

的长度为k ,非零a ij (1 ≤j ≤i ≤n) 的是第i 行的第j 个元素,因此其地址是:Loc(a ij )= Loc(a

00 )+(i ′(i+1)/2+j )×k 。因此A [5 ,5 ]的存放地址=100+ (5 ×6/2+5 )×2 =140 。

【答案】D

5-4 按行优先顺序存储下三角矩阵的非零元素,则计算非零元素a ij (1 ≤j ≤i ≤n) 的地址的公式为

______ 。

A) LOC(a ij )=LOC(a 11 ) +i×(i+1)/2+j

B) LOC(a ij )=LOC(a 11 )+i ×(i+1)/2+ (j-1)

C) LOC(a ij )=LOC(a 11 ) +i×(i-1)/2+j

D) LOC(a ij )=LOC(a 11 )+i ×(i-1)/2+ (j-1)

【解析】本题的考点是多维数组的顺序存储。按行优先顺序存储下三角矩阵A nn 的非零元素,可以得到如下的序列: a 11 ,a 21 ,a 22 ,a 31 ,a 32 ,a 33, ….., a n1 ,a n2 ,a n3 , ….,a nn ,将该序列顺序存储在内存中,第 1 行到第i-1 行的元素个数为1 + 2 +…+(i-1 )= i ′(i-1)/2 ,假设a 11 地址是Loc(a 11 ), 非零a ij (1 ≤j ≤i ≤n) 的是第i 行的第j 个元素,因此其地址是:Loc(a ij )= Loc(a 11 )+ i ′(i-1)/2+j-1 。

【答案】D

5-5 二维数组A[0..8,0..9] ,其每个元素占2 字节,从首地址400 开始,按行优先顺序存放,则元素A[8,5] 的存储地址为。

A) 570 B) 506 C ) 410 D) 482

【解析】本题的考点是二维数组的存储。二维数组采用顺序存储结构,按行优先顺序,且下标从0 开始,求数据元素的地址用下述公式:loc(a ij )=loc(a 11 )+ (i*n+j )* l ,其中,n 和m 分别为数组的每行和每列的元素个数,l 为每个数组元素所占用的存储空间单元个数。因此A[8,5] 的地址是400 +(8 ×10 +5 )× 2 =570 。

【答案】A

5-6 下面程序段的时间复杂度为( ).

Void mergesort(int i, int j)

{

int m;

if(i!=j){

m=(i+j)/2;

mergesort(i,m);

mergesort(m+1,j);

merge(i,j,m); }

}

A) O(n) B) O(n 2 ) C) O(nlogn) D) O(n!)

【解析】其中mergesort( ) 用于数组a[n] 的归并排序,调用方式为mergesort(0,n-1) ;merge( ) 用于两个有序子序列的合并,是非递归函数,它的时间复杂度为O(n) 。

【答案】A

二、简答题

5-1 设二维数组A5*6 的每个元素占4 个字节,已知Loc (a00 )=1000 ,A 共占多少个字节?A 的终端结点a 45 的起始地址为多少?按行和按列优先存储时,a 25 的起始地址分别为多少?

【解析】A 共占的字节数为:5*6*4=120

a 45 的起始地址为:Loc (a 00 )+ (4*6+5 )*4 =1000+116=1116

按行优先存储时, a 25 的起始地址为:Loc ( a 00 )+ (2*6+5 )*4=1000+68=1068

按列优先存储时, a 25 的起始地址为:Loc ( a 00 )+ (5*5+2 )*4=1000+108=10108

5-2 设有一个n ′n 的对称矩阵A 。为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。试问:存放对称矩阵A 上三角部分或下三角部分的一维数组B 有多少元素?

【解析】数组B 共有n + ( n - 1 ) + ? ? ? ? ? ? + 1= n * ( n+1 ) / 2 个元素。

5-3 设有一个n ′n 的对称矩阵A ,如图(a) 所示。为了节约存储,可以只存对角线及对角线以上的元素,称为上三角矩阵。我们把它们按行存放于一个一维数组B 中,如图(b) 所示。并称之为对称矩阵A 的压缩存储方式。试问:若在一维数组B 中从0 号位置开始存放,则如图(a) 所示的对称矩阵中的任一元素a ij 在只存上三角部分的情形下( 图(b)) 应存于一维数组的什么下标位置?给出计算公式。

【解析】只存上三角部分时,若i £j ,则数组元素A[i][j] 前面有i - 1 行( 1 ~ i - 1 ,第0 行第0 列不算) ,第 1 行有n 个元素,第2 行有n - 1 个元素,? ? ? ? ? ? ,第i - 1 行有n - i+2 个元素。在第i 行中,从对角线算起,第j 号元素排在第j - i+1 个元素位置(从 1 开始),因此,数组元素A[i][j] 在数组B 中的存放位置为

n + (n - 1) + (n - 2) + ? ? ? ? ? ? + (n - i+2) + j - i+1

= (2n - i+2) * (i - 1) / 2 + j - i+1

= (2n - i) * (i - 1) / 2 + j

若i > j ,数组元素A[i][j] 在数组 B 中没有存放,可以找它的对称元素A[j][i] 。在

数组B 的第(2n - j) * (j - 1) / 2 + i 位置中找到。

如果第0 行第0 列也计入,数组B 从0 号位置开始存放,则数组元素A[i][j] 在数组B 中的存放位置可以改为

当i £j 时,= (2n - i+1) * i / 2 + j - i = ( 2n - i - 1 ) * i / 2 + j

当i > j 时,= (2n - j - 1) * j / 2 + i

5-4 设有一个n ′n 的对称矩阵A ,如图(a) 所示。为了节约存储,可以只存对角线或对角线以下的元素,称为下三角矩阵。我们把它们按行存放于一个一维数组B 中,如图(c) 所示。并称之为对称矩阵A 的压缩存储方式。试问:若在一维数组B 中从0 号位置开始存放,则如图(a) 所示的对称矩阵中的任一元素a ij 在只存下三角部分的情形下( 图(c)) 应存于一维数组的什么下标位置?给出计算公式。

【解析】只存下三角部分时,若i 3 j ,则数组元素A[i][j] 前面有i - 1 行(1 ~ i - 1 ,第0 行第0 列不算) ,第 1 行有1 个元素,第2 行有2 个元素,? ? ? ? ? ? ,第i - 1 行有i - 1 个元素。在第i 行中,第j 号元素排在第j 个元素位置,因此,数组元素A[i][j] 在数组B 中的存放位置为

1 +

2 + ? ? ? ? ? ? + (i - 1) + j = ( i - 1)*i / 2 + j

若i < j ,数组元素A[i][j] 在数组 B 中没有存放,可以找它的对称元素A[j][i] 。在

数组B 的第(j - 1)*j / 2 + i 位置中找到。

如果第0 行第0 列也计入,数组B 从0 号位置开始存放,则数组元素A[i][j] 在数组 B 中的存放位置可以改为

当i 3 j 时,= i*(i+1) / 2 + j

当i < j 时,= j*(j+1) / 2 + i

5-5 设有一个二维数组A [ m ][ n ] ,假设A [0][0] 存放位置在644 (10) ,A [2][2] 存放位置在676 (10) ,每个元素占一个空间,问A [4][5] (10) 存放在什么位置?脚注(10) 表示用10 进制表示。

【解析】设数组元素A[i][j] 存放在起始地址为Loc ( i, j ) 的存储单元中。

∵Loc ( 2, 2 ) = Loc ( 0, 0 ) + 2 * n + 2 = 644 + 2 * n + 2 = 676.

∴n = ( 676 - 2 - 644 ) / 2 = 15

∴Loc ( 3, 3 ) = Loc ( 0, 0 ) + 4 * 15 + 5= 644 + 45 + 3 = 709

5-6 利用广义表的head 和tail 操作写出函数表达式,把以下各题中的单元素banana 从广义表中分离出来:

(1) L1(apple, pear, banana, orange)

(2) L2((apple, pear), (banana, orange))

(3) L3(((apple), (pear), (banana), (orange)))

(4) L4((((apple))), ((pear)), (banana), orange)

(5) L5((((apple), pear), banana), orange)

(6) L6(apple, (pear, (banana), orange))

【解析】

(1) Head (Tail (Tail (L1) ) )

(2) Head (Head (Tail (L2) ) )

(3) Head (Head (Tail (Tail (Head (L3) ) ) ) )

(4) Head (Head (Tail (Tail (L4) ) ) )

(5) Head (Tail (Head(L5) ) )

(6) Head (Head (Tail (Head (Tail (L6) ) ) ) )

5-7 画出下列广义表的图形表示和它们的存储表示:

(1) D(A(c), B(e), C(a, L(b, c, d)))

(2) J1(J2(J1, a, J3(J1)), J3(J1))

【解析】(1) D(A(c), B(e), C(a, L(b, c, d))) (2) J1(J2(J1, a, J3(J1)), J3(J1))

三、应用题

5-1 实现复制广义表的递归算法。

【解析】

void GList_Copy(GList A,GList &B)// 复制广义表的递归算法{ if(!A->tag) // 当结点为原子时, 直接复制

{ B->tag=0;

B->atom=A->atom;

B->atom=A->atom; }

else // 当结点为子表时

{ B->tag=1;

if(A->ptr.hp)

{ B->ptr.hp=malloc(sizeof(GLNode));

GList_Copy(A->ptr.hp,B->ptr.hp); } // 复制表头

if(A->ptr.tp)

{ B->ptr.tp=malloc(sizeof(GLNode));

GList_Copy(A->ptr.tp,B->ptr.tp);

} // 复制表尾}//else }//GList_Copy

5-2 如果矩阵A 中存在这样的一个元素A[i][j] 满足条件:A[i][j] 是第i 行中值最小的元素,且又是第j 列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个程序计算出m*n 的矩阵A 的所有马鞍点。

【解析】

void Get_Saddle(int A[m][n])// 求矩阵A 中的马鞍点

{ for(i=0;i

{ for(min=A[i][0],j=0;j

if(A[i][j]

for(j=0;j

if(A[i][j]==min) // 判断这个( 些) 最小值是否鞍点

{ for(flag=1,k=0;k

if(min

printf("Found a saddle element!\nA[%d][%d]=%d",i,j,A[i][j]);

} }//for }//Get_Saddle

5-3 求广义表深度的递归算法

【解析】

int GList_Getdeph(GList L)// 求广义表深度的递归算法

{

if(!L->tag) return 0; // 原子深度为0

else if(!L) return 1; // 空表深度为1

m=GList_Getdeph(L->ptr.hp)+1;

n=GList_Getdeph(L->ptr.tp);

return m>n?m:n;

}//GList_Getdeph

5-4 设A 和B 均为下三角矩阵,每一个都有n 行。因此在下三角区域中各有n ( n +1)/2 个元素。另设有一个二维数组C ,它有n 行n +1 列。试设计一个方案,将两个矩阵 A 和B 中的下三角区域元素存放于同一个C

中。要求将 A 的下三角区域中的元素存放于C 的下三角区域中,B 的下三角区域中的元素转置后存放于 C 的上三角区域中。并给出计算 A 的矩阵元素 a ij 和B 的矩阵元素b ij 在C 中的存放位置下标的公式。

5-5 假设稀疏矩阵A 采用三元组表示,编写一个函数计算其转置矩阵B ,要求B 也采用三元组表示。

【解析】

三元组表示中要求按行的顺序存放,所有转置过程不能直接将行下标和列下标转换,还必须使得列按顺序存放。因此在A 中首先找出第一列中的所有元素,它们是转置矩阵第一行的非0 元素,并把它们依次放在转置矩阵三元组数组B 中;然后依次找出第二列中的所有元素,把它们依次放在数组B 中;按照同样的方法逐列进行,直到找出第n 列的所有元素,并把它们依次放在数组B 中。实现本题功能的函数如下:

void transpose (A ,B )

smatrik A ,B ;/*A 是稀疏矩阵的三元组形式,B 是存放A 的转置矩阵的三元组数组*/

int m ,n ,p ,q ,t ,col ;

/*m 为A 中的行数;n 为A 中的列数;t 为A 中非0 元素个数*/

/*q 为B 的下一项位置;p 为A 的当前项*/

m=A[0][0] ;n=A[0][1] ;t=A[0][2] ;

B[0][0]=n ;B[0][1]=m ;B[0][2]=t ;/* 产生第0 行的结果*/

If (t>0 )/* 非0 矩阵才做转置*/

{ q=1 ;for (col=0 ;col

for (p=1 ;p<=t ;p++ )if (A[p][1]==col ){ B[q][0]=A[p][1] ;

B[q][1]=A[p][0] ;B[q][2]=A[p][2] ;q++ ; } } }

一、选择题

1.若不考虑结点的数据信息的组合情况,具有3个结点的树共有种(A )形态,而二叉树共有( D )种形态。

A.2

B.3

C.4

D.5

2.对任何一棵二叉树,若n0,n1,n2分别是度为0,1,2的结点的个数,则n0= ( C )

A.n1+1

B.n1+n2

C.n2+1

D.2n1+1

3.已知某非空二叉树采用顺序存储结构,树中结点的数据信息依次存放在一个一维数组中,即

ABC□DFE□□G□□H□□,该二叉树的中序遍历序列为( D )

A.G,D,B,A,F,H,C,E

B.G,B,D,A,F,H,C,E

C.B,D,G,A,F,H,C,E

D.B,G,D,A,F,H,C,E

4、具有65个结点的完全二叉树的高度为(B)。(根的层次号为1)

A.8 B.7 C.6 D.5

5、在有N个叶子结点的哈夫曼树中,其结点总数为( D )。

A 不确定

B 2N

C 2N+1

D 2N-1

6、以二叉链表作为二叉树存储结构,在有N个结点的二叉链表中,值为非空的链域的个数为( A )。

A N-1

B 2N-1

C N+1

D 2N+1 三、填空题。

1、对于一个具有N 个结点的二叉树,当它为一颗 完全 二叉树时,具有最小高度。

2、对于一颗具有N 个结点的二叉树,当进行链接存储时,其二叉链表中的指针域的总数为 2N 个, 其中 N-1 个用于链接孩子结点,N+1 个空闲着。

3、一颗深度为K 的满二叉树的结点总数为 2k -1 ,一颗深度为K 的完全二叉树的结点总数的最小值为 2k-1 ,最大值为 2k -1 。

4、已知一棵二叉树的前序序列为ABDFCE ,中序序列为DFBACE ,后序序列为 FDBECA 。 四、应用题。

1、9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为: 0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10 请为这8个字母设计哈夫曼编码。 解:仿照课本148页例 6-2。

2、已知一棵树二叉如下,请分别写出按前序、中序、后序遍历时得到的结点序列,并将该二叉树还原成森林。 解:参照课本137~139页。 先序遍历:ABCDEFGHIJ 中序遍历:BCDAFEHJIG 后序遍历:DCBFJIHG 五、算法设计题 1. 已知二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 解: int Leaf_Count (Bitree T)//求二叉树中叶子结点的数目

{if(!T) return 0; //空树没有叶子

else if(!T->lchild&&!T->rchild) return 1; //叶子结点

else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加上右子树的叶子数

}//Leaf_Count

2. 求二叉树中以值为x 的结点为根的子树深度。

解: int Get_Sub_Depth(Bitree T,int x)//求二叉树中以值为x 的结点为根的子树深度

{if(T->data==x)

{ printf("%d\n",Get_Depth(T)); //找到了值为x 的结点,求其深度 exit 1; } else

{if(T->lchild) Get_Sub_Depth(T->lchild,x);

if(T->rchild) Get_Sub_Depth(T->rchild,x); //在左右子树中继续寻找 }

}//Get_Sub_Depth

int Get_Depth(Bitree T)//求子树深度的递归算法 {if(!T) return 0; else

{m=Get_Depth(T->lchild); n=Get_Depth(T->rchild); return (m>n?m:n)+1; }

}//Get_Depth

*3. 已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。 第七章习题 一、选择题

A

B C D

E F

G H I J

7-1 关键路径是指AOE(Activity On Edge) 网中 C 。

A. 最长的回路

B. 最短的回路

C. 从源点到汇点( 结束顶点) 的最长路径

D. 从源点到汇点( 结束顶点) 的最短路径

7-2 已知AOE 网中顶点v1 ~v7 分别表示7 个事件,弧al ~a10 分别表示10 个活动,弧上的数值表示每个活动花费的时间,如下图所示。那么,该网的关键路径的长度为(1 )C ,活动a6 的活动的(最迟开始时间- 活动的最早开始时间)为( 2 )A 。

(1) A. 7 B. 9 C. 10 D. 11

(2) A. 3 B. 2 C. 1 D. 0

7-3任何一个无向连通图的最小生成树 A 。

A、只有一棵

B、有一棵或多棵

C、一定有多棵

D、可能不存在

7- 4下面关于图的存储的叙述中正确的是 A 。

A)邻接矩阵占用的存储空间只与图中结点个数有关,而与边数无关;

B)邻接矩阵占用的存储空间只与图中边数有关,而与结点个数无关;

C)邻接表占用的存储空间只与图中结点个数有关,而与边数无关;

D)邻接表占用的存储空间只与图中边数有关,而与结点个数无关。

7-5、在一个无向图中,所有顶点的度数之和等于所有边数的_ B___倍。

A.3 B.2 C.1 D.1/2

7.6. 在一个具有6个顶点的有向图中,所有顶点的入度数之和与所有顶点的出度数之和的差等于 B 。

A.1 B.0 C.12 D.6

二、简答题

7-1 给出如下图所示的无向图G 的邻接矩阵和邻接表两种存储结构。并写出按此邻接表由顶点1出发进行深度优先遍历时得到的顶点序列,进行广度优先遍历时得到的顶点序列。

7-2 使用普里姆算法和克鲁斯卡尔算法构造出如图3 所示的图G 的最小生成树。

解:普里姆算法:课本173~174页

克鲁姆算法:课本175~176页

7-3 有n 个顶点的无向连通图至少有多少条边?有n 个顶点的有向强连通图至少有多少条边?试举例说明。解:有n 个顶点的无向连通图至少有n-1条边;

有n 个顶点的有向强连通图至少有n 条边。

三算法题

*7.5 编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向图的邻接表。

第九章查找表

1.设有100个数据元素,采用折半搜索时,最大比较次数为__7__。

3、在含有n个元素的顺序表中,用顺序查找方法,查找成功的平均查找长度为( n+1)/2_。

4、对有14个数据元素的有序表R[0…13]进行折半搜索,搜索到R[3]的关键码等于给定值,此时元素比较顺序依次为(C )。

A.R[0],R[1],R[2],R[3] B.R[0],R[13],R[2],R[3]

C.R[6],R[2],R[4],R[3] D.R[6],R[4],R[2],R[3]

通常查找线性表数据元素的方法有二分法查找和顺序查找两种方法,其中二分法查找是一种只适合于顺序存储结构但效率更高的线性查找的方法;而顺序查找是一种对顺序和链式存储结构均适用的方法。

6散列法存储的基本思想是根据关键码值来决定存储地址,冲突指的是不同关键字对应到相同的存储地址,处理冲突的主要方法有开放定址法、链地址法、在哈希法、建立一个公共溢出区。

7 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。三次比较成功

的结点有哪些?。

8选取哈希函数H(k)= k%11,用线性探测再散列法(及链地址法)处理冲突。试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功的平均查找长度。

*9.写出折半查找的递归算法。

int Search_Bin1(SSTable ST,KeyType key,int low,int high)//递归

{ // 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为

// 该元素在表中的位置,否则为0。算法9.2

int mid;

// 置区间初值

if (low<=high)

{mid=(low+high)/2;

if EQ(key,ST.elem[mid].key) // 找到待查元素

return mid;

else if LT(key,ST.elem[mid].key)

return Search_Bin1( ST, key, low,mid-1); // 继续在前半区间进行查找

else

return Search_Bin1( ST, key, mid+1,high); // 继续在后半区间进行查找

}

return 0; // 顺序表中不存在待查元素

}

第十章排序

1.一个记录的关键字为(46,79,56,38,42,88),采用快速排序以第一个记录为基准得到的第一次划分结果为 [ C ]

A.(38,42,46,56,79,88)

B.(42,38,46,79,56,88)

C.(42,38,46,56,79,88)

D.( 38,42, 46, 79,56 ,88)

2.下列排序方法中,排序趟数与序列的原始状态有关的方法是 [ D ]

A. 选择排序

B. 希尔排序

C. 堆排序

D. 冒泡排序

3、对5个不同的数据元素进行直接插入排序,最多需要进行14 次比较。

4、简单选择排序算法在最好情况下所作的交换元素的次数为0 。

5、具有 n个记录的序列,采用冒泡排序,比较的次数最少是 n-1 次。

6.堆排序实际上是一种选择排序,它的一个基本问题是如何建堆;对含n个元素的序列进行排序时,其时间复杂度是 O(nlogn)。

7.快速排序在最坏情况下的时间复杂度是O(n2 )。

8.若对序列(49,38,27,13,97,76,50,65)采用泡排序法(按照值的大小从小到大)进行排序,请分别在下表中写出每一趟排序的结果。

原始序列49 38 27 13 97 76 50

第1趟的结果38 37 13 49 76 50

第2趟的结果37 13 38 49 50

第3趟的结果13 37 38 49 50

9、有一组关键字{50,52,85,22,96,17,,请用快速排序,写出第一趟结果。

解: { 36,17,22,50,96,85,52,55 }

10、设待排序序列为{10, 18, 4, 3, 6, 12, 1, 9, 15, 8},请给出用希尔排序每一趟的结果。增量序列取为5, 3, 2, 1。解:第一躺:{ 10,1,4,3,6,12,18,9,15,8 }

第二趟:{ 3,1,4,8,6,12,10,9,15,18 }

第三趟:{ 3,1,4,8,6,9,10,12,15,18 }

第四躺:{ 1,3,4,6,8,9,10,12,15,18 }

第二章

1 Status Insert_SqList(SqList &va,int x)//把x插入递增有序表va中

{

if(va.length+1>va.listsize) return ERROR;

va.length++;

for(i=va.length-1;va.elem[i]>x&&i>=0;i--)

va.elem[i+1]=va.elem[i];

va.elem[i+1]=x;

return OK;

}//Insert_SqList

2. 1 void reverse(SqList &A)//顺序表的就地逆置

{

for(i=0,j=A.length-1;i

A.elem[i]<->A.elem[j];

}//reverse

2.2 void LinkList_reverse(Linklist &L)//链表的就地逆置;为简化算法,假设表长大于2

{

p=L->next;q=p->next;s=q->next;p->next=NULL;

while(s->next)

{

q->next=p;p=q;

q=s;s=s->next; //把L的元素逐个插入新表表头

}

q->next=p;s->next=q;L->next=s;

}//LinkList_reverse

分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头.

3 Status Delete_Equal(Linklist &L)//删除元素递增排列的链表L中所有值相同的元素

{p=L->next;q=p->next; //p,q指向相邻两元素

while(p->next)

{if(p->data!=q->data)

{p=p->next;q=p->next; //当相邻两元素不相等时,p,q都向后推一步

}

else

{while(q->data==p->data)

{free(q);

q=q->next; }

p->next=q;p=q;q=p->next; //当相邻元素相等时删除多余元素

}//else

}//while

}//Delete_Equal

第三章

5 void InitCiQueue(CiQueue &Q)//初始化循环链表表示的队列Q

{Q=(CiLNode*)malloc(sizeof(CiLNode));

Q->next=Q;

}//InitCiQueue

void EnCiQueue(CiQueue &Q,int x)//把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队头元素

{p=(CiLNode*)malloc(sizeof(CiLNode));

p->data=x;

p->next=Q->next; //直接把p加在Q的后面

Q->next=p;

Q=p; //修改尾指针}

Status DeCiQueue(CiQueue &Q,int x)//从循环链表表示的队列Q头部删除元素x

{if(Q==Q->next) return ERROR;//队列已空

p=Q->next->next;

x=p->data;

Q->next->next=p->next;

《数据结构》课后习题答案(第2版)

《数据结构》课后习题答案(第2版)数据结构课后习题答案(第2版) 第一章:基本概念 1. 什么是数据结构?数据结构是指数据元素之间的关系,以及相应的操作。它研究如何组织、存储和管理数据,以及如何进行高效的数据操作。 2. 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、栈和队列;非线性结构包括树和图。 3. 什么是算法?算法是解决特定问题的一系列有序步骤。它描述了如何输入数据、处理数据,并产生期望的输出结果。 4. 算法的特性有哪些?算法具有确定性、有限性、输入、输出和可行性这五个特性。 5. 数据结构和算法之间的关系是什么?数据结构是算法的基础,算法操作的对象是数据结构。 第二章:线性表 1. 顺序表的两种实现方式是什么?顺序表可以通过静态分配或动态分配的方式实现。静态分配使用数组,动态分配使用指针和动态内存分配。

2. 单链表的特点是什么?单链表由节点组成,每个节点包含数据和 一个指向下一个节点的指针。它的插入和删除操作效率高,但是查找 效率较低。 3. 循环链表和双向链表分别是什么?循环链表是一种特殊的单链表,在尾节点的指针指向头节点。双向链表每个节点都有一个指向前一个 节点和后一个节点的指针。 4. 链表和顺序表的区别是什么?链表的插入和删除操作效率更高, 但是查找操作效率较低;顺序表的插入和删除操作效率较低,但是查 找操作效率较高。 第三章:栈和队列 1. 栈是什么?栈是一种特殊的线性表,只能在表的一端进行插入和 删除操作。后进先出(LIFO)是栈的特点。 2. 队列是什么?队列是一种特殊的线性表,只能在表的一端进行插 入操作,在另一端进行删除操作。先进先出(FIFO)是队列的特点。 3. 栈和队列的应用有哪些?栈和队列在计算机科学中有广泛的应用,例如浏览器的前进后退功能使用了栈,操作系统的进程调度使用了队列。 4. 栈和队列有哪些实现方式?栈和队列可以使用数组或链表来实现,还有更为复杂的如双端队列和优先队列。 第四章:树和二叉树

数据结构_习题集(含答案)

数据结构_习题集(含答案) 《数据结构》课程习题集 一、单选题 1.头结点为L的单循环链表为空的条件是() A、L==NULL B、L->next==NULL C、L->next==L D、L!==NULL 2.与线性表的链式存储结构特点不符的是:() A、便于插入、删除运算 B、查找操作费时 C、需要连续的地址空间 D、空间动态分配 3.采用邻接表存储的图,其深度优先遍历算法类似于二叉树的() A、先序遍历 B、中序遍历 C、后序遍历 D、按层遍历 4.对序列{1,5,7,10,12,15,19},采用折半查找1,需比较()次。 A、1 B、2 C、3 D、4 5.直接选择排序算法的时间复杂度为() A、O(n) B、O(n2) C、 O(n*log(n)) D、 O(1) 6.一个栈的入栈序列为1、2、3、4,则栈的不可能的输出序列是

() A、1 2 3 4 B、4 3 2 1 C、4 1 2 3 D、3 4 2 1 7.判定一个顺序栈S为空的条件为()。 A、S.top=0 B、S.base=0 C、S.top=S.base D、S.top>S.stacksize 8.设有两个串r和t,求r在t中首次出现位置的运算称作() A、求串长 B、连接 C、模式匹配 D、求子串 9.按二叉树的定义,具有3个结点的二叉树共有()种形态。 A、3 B、4 C、5 D、6 10.一个有n个顶点的完全无向图共有()条边。 A、n B、2n C、n*(n-1) D、n*(n-1)/2 11.对序列{5,7,12,19,20,30},采用折半查找19,需比较()次。 A、1 B、2 C、3

数据结构试题集[包含答案_完整版]

第一章概论 一、选择题 1、研究数据结构就是研究(D )。 A. 数据的逻辑结构 B. 数据的存储结构 C. 数据的逻辑结构和存储结构 D. 数据的逻辑结构、存储结构及其基本操作 2、算法分析的两个主要方面是( A )。 A. 空间复杂度和时间复杂度 B. 正确性和简单性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。 A. 图 B. 树 C. 广义表 D. 栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、(B )等5个特性。 A. 可执行性、可移植性和可扩充性 B. 可执行性、有穷性和确定性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i

A. 计算机程序 B. 解决问题的计算方法 C. 排序算法 D. 解决问题的有限运算序列 7、某算法的语句执行频度为(3n+nlog 2n+n 2+8),其时间复杂度表示( C )。 A. O(n) B. O(nlog 2n) C. O(n 2) D. O(log 2n) 8、下面程序段的时间复杂度为( C )。 i=1; while(i<=n) i=i*3; A. O(n) B. O(3n) C. O(log 3n) D. O(n 3) 9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的( B )和运算等的学科。 A. 结构 B. 关系 C. 运算 D. 算法 10、下面程序段的时间复杂度是(A )。 i=s=0; while(s

数据结构习题(包含全部答案解析)

数据结构习题集(自编) 第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。 A.结构B.关系 C.运算 D.算法 2.在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.逻辑结构和存储结构 3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。 A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。 A.找出算法的合理性 B.研究算法的输人与输出关系 C.分析算法的有效性以求改进 D.分析算法的易懂性 5. 算法的时间复杂度取决于() A.问题的规模B待处理数据的初态 C. A和B 6.一个算法应该是()。 A.程序B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 7. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法与为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.在下面的程序段中,对x的赋值语句的频度为() for(i=0;i

数据结构课后习题与答案

《 数据结构习题集答案 第1章绪论 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 ) 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: [ 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解:ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im

数据结构练习题(含答案)

数据结构练习题 习题1 绪论 1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①、数据信息在计算机中的②以及一组相关的运算等的课程。 ① A.操作对象B.计算方法C.逻辑结构D.数据映象 ② A.存储结构B.关系C.运算D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是①的有限集合,R是D上的②有限集合。 ① A.算法B.数据元素C.数据操作D.数据对象 ② A.操作B.映象C.存储D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 4. 算法分析的目的是①,算法分析的两个主要方面是②。 ① A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 5. 计算机算法指的是①,它必具备输入、输出和②等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个直接前驱结点,叶子结点没有结点,其余每个结点的直接后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , __ __ , _ ___。 7. 分析下面算法(程序段),给出最大语句频度,该算法的时间复杂度是__ __。 for (i=0;i

【数据结构习题集附答案】

【数据结构习题集附答案】 数据结构习题集附答案第一章绪论一、选择题1.组成数据的基本单位是()A.数据项B.数据类型C.数据元素D.数据变量2.数据结构是研究数据的()以及它们之间的相互关系。 A.理想结构,物理结构B.理想结构,抽象结构C.物理结构,逻辑结构D.抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①A.数据元素B.计算方法C.逻辑存储D.数据映像②A.结构B.关系C.运算D.算法5.算法分析的两个主要方面是()。 A.数据复杂性和程序复杂性B.正确性和简明性C.可读性和简明性D.空间复杂性和时间复杂性 6.算法分析的目的是()。 A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性7.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ①A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法②A.可执行性,可移植性和可扩充性B.可行性,确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。()3.数据元素是数据的最小单位。()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。()三、填空题1.数据逻辑结构包括________、________、________和________四种类型,其中树形结构和图形结构合称为________。

《数据结构》教材课后习题+答案

《数据结构》教材课后习题+答案数据结构 第一章介绍 数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。数据结构的选择对于算法的效率有着重要的影响。本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。下面是一些选定的习题及其答案,供读者参考。 第二章线性表 习题一: 给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。 答案一: 算法思路: 1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素 2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置 3. 当i>=j时,停止逆置 算法实现: ```python

def reverse_list(L): i, j = 0, len(L)-1 while i < j: L[i], L[j] = L[j], L[i] i += 1 j -= 1 ``` 习题二: 给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。 答案二: 算法思路: 1. 遍历线性表B中的每一个元素 2. 将B中的元素依次插入到A的末尾 算法实现: ```python def merge_lists(A, B): for element in B: A.append(element)

``` 第三章栈和队列 习题一: 编写一个算法,判断一个表达式中的括号是否匹配。表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。 答案一: 算法思路: 1. 遍历表达式中的每一个字符 2. 当遇到左括号时,将其推入栈中 3. 当遇到右括号时,判断栈顶元素是否与其匹配 4. 当遇到其他字符时,继续遍历下一个字符 5. 最后判断栈是否为空,若为空则表示括号匹配 算法实现: ```python def is_matching(expression): stack = [] for char in expression: if char in "([{":

数据结构(查找)习题与答案

一、单选题 1、对于查找表(13,27,38,49,50 ,65,76,97)采用顺序查找,在等概率情况下查找成功的平均查找长度是()。 A.4.5 B.9 C.4 D.8 正确答案:A 2、在关键字序列(10,20,30,40,50)中采用折半查找20,依次与()关键字进行了比较。 A.30,10,20 B.20 C.30,20 D.40,20 正确答案:A 3、在关键字序列(8,12,20,25,33)中,采用二分查找25,关键字之间比较需要()次。 A.2 B.1 C.3 D.4 正确答案:A 4、对于长度为11的有序表,按折半查找,在等概率情况下查找成功时,其平均查找长度是()。 A.3 B.4 C.1 D.2 正确答案:A

5、对于长度为11的有序表,按折半查找,在查找失败时,待查找值域表中关键字比较的次数是()。 A.3次或4次 B.2次或3次 C.4次或5次 D.1次或2次 正确答案:A 6、对于长度为n的有序表,按折半查找,在等概率情况下查找成功平均时间复杂度是()。 A.O(㏒n) B.O(n) C.O(1) D.O(n㏒n) 正确答案:A 7、索引顺序查找也叫分块查找,其查找过程分为是()个步骤。 A.1 B.3 C.4 D.2 正确答案:D 8、对于长度为n的关键字序列创建一颗二叉排序树,该树可能的最大高度是()。 A.n+1 B.n-1 C.㏒n D.n 正确答案:D

9、对于关键字序列(30,25,40,35,45),按序列次序创建一颗二叉排序树,在等概率情况下查找成功时,其平均查找长度是()。 A.8/3 B.11/5 C.8 D.11 正确答案:B 10、影响散列查找时间效率的主要因素()。 A.仅与散列表中实际元素个数相关 B.仅与散列表长相关 C.与散列表长和散列表中实际元素个数均相关 D.与散列表长和散列表中实际元素个数均不相关 正确答案:C 11、一组关键字序列为(27,17,9,19,16,43,53,8,63),用哈希函数 H(key)=key MOD 8和链地址法处理冲突,查找关键字43,与散列表中关键字进行了()次比较。 A.3 B.6 C.4 D.5 正确答案:A 12、设哈希表下标为0~15,哈希函数为H(key)=key MOD 13,其中key为关键字,MOD为取余数运算,处理冲突方法为线性探查法,对于关键字序列为(22,18,38,39,48,35,9,64,29),建立哈希表后,关键字9的在哈希表的位置是()。 A.13 B.9 C.11 D.15

数据结构各章习题及答案!

数据结构习题及解答 第1章 概述 【例1-1】分析以下程序段的时间复杂度。 for(i=0;i

log) 得:T(n)=O(n2 【例1-4】有如下递归函数fact(n),分析其时间复杂度。 fact(int n) { if(n<=1) return(1);① else return(n*fact(n-1));② } 解:设fact(n)的运行时间函数是T(n)。该函数中语句①的运行时间是O(1),语句②的运行时间是T(n-1)+ O(1),其中O(1)为常量运行时间。 由此可得fact(n)的时间复杂度为O(n)。 习题1 一、单项选择题 1.数据结构是指(1. A )。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为(2. C )。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3.树形结构是数据元素之间存在一种(3. D )。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4.设语句x++的时间是单位时间,则以下语句的时间复杂度为(4. B)。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2n) C.O(n) D.O(3n) 5.算法分析的目的是(5. C、),算法分析的两个主要方面是(A)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(6. C、),它具备输入,输出和(B)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要(7. B)。

数据结构练习题及参考答案

《数据结构》练习题 一、解答题(共50分) 1、(8分)假设用于通讯的电文字符集及其出现的频率如下表所示。 请为这8个字符设计哈夫曼编码,并画出其哈夫曼树,计算WPL 。 2. (8分)若一棵二叉树中序遍历和后序遍历序列分别为:DBEHGAFIC 和DHGEBIFCA 。试画出这棵二叉树,并写出其先序遍历和层序遍历序列。 3.(16分)以下无向网络以邻接表为存储结构(假设邻接表的顶点表按字母a 、b 、c 、d 、e 、f 、g 、h 的顺序依次存储,邻接表的边表结点按顶点的下标由小到大链接)。请画出其邻接表,并写出从顶点f 出发,分别进行深度和广度优先遍历的序列,写出用Prime 方法从顶点c 开始产生最小生成树的边的序列。 4.(8分)已知键值序列为(44,39,67,25, 52,59,43,84,54,58,15,26,12,73,92,69),取填充因子α=0.8,采用线性探查法处理冲突,试构造散列表。 ⒌(5分)已知一组记录为(67,88,15,12,60,37,7,31,45,81),用希尔排序方法进行排序,d1=5,d2=3,d3=1,则第二趟的排序结果是( )。 ⒍(5分)已知一组记录为(67,88,15,12,60,37,7,31,45,81) ,用堆(大根堆)排序方法进行排序,第一趟的排序结果是( )。 二、完善程序(共20分,每空2分) 1.假设一组递减有序的原始数据存储在数组r 中,存放元素的下标下限为low,下标上 字符 出现频率 a 0.05 b 0.03 c 0.24 d 0.16 e 0.08 f 0.24 g 0.18 h 0.02

数据结构试题集(含答案)

数据结构试题集(含答案)

程序复杂性 3、具有线性结构的数据结构是( D )。 A. 图 B. 树 C. 广义表 D. 栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。 A. 可执行性、可移植性和可扩充性 B. 可执行性、有穷性和确定性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 for(i=0;i=(y+1)*(y+1))

数据结构各章习题及答案

数据结构各章习题及答案 第一章绪论 一、选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ②(A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法 ②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。()

4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以 _________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、_______。 7.数据结构的三要素是指______、_______和________。 8.链式存储结构与顺序存储结构相比较,主要优点是 ________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度 参考答案: 一、选择题 1. C 2.C

经典数据结构习题集含答案

线性表 1.下列有关线性表的叙述中,正确的是(A)。 A)线性表中元素之间的关系是线性关系 B)线性表中至少有一个元素 C)线性表中的任一元素有且仅有一个直接前趋 D)线性表中的任一元素有且仅有一个直接后继 2.下述哪一条是顺序存储结构的优点?(A) A)存储密度大B)插入方便 C)删除方便D)可方便地用于各种逻辑结构的存储表示 3.在一个长度为n的顺序表中,在第i个元素(1<=i<=n)之前插入一个新元素时需向后移动(D)个元素。 A)1 B)n-i C)n-i-1 D)n-i+1 4.如果某线性表中最常用的操作是取第i个元素和找第i个元素的前驱,那么采用(A)存储方式最节省时间。 A)顺序表B)单链表 C)双链表D)循环链表 5.对顺序存储的线性表,设其长度为n,且在任何位置上插入或删除操作都是等概率的。则插入一个元素时平均要移动表中的(A)个元素。 A)n/2 B)(n+1)/2 C)(n-1)/2 D)n 6.下述哪一条是顺序存储结构的缺点?(C) A)存储密度太大 B)随机存取 C)一般要估计最大的需要空间 D)只能应用于少数几种逻辑结构的存储表示 7.在单链表中,增加头结点的目的是(C)。 A)使单链表至少有一个结点 B)标志表中首结点的位置 C)方便运算的实现 D)说明单链表是线性表的链式存储表示 8.单链表不具有的特点是(A)。 A)可随机访问任一元素B)插入和删除不需要移动元素 C)不必事先估计存储空间D)所需空间和线性表长度成正比 9.循环链表的主要优点是(D)。 A)不再需要头指针了 B)已知某个结点的位置后,能够容易找到他的直接前趋 C)在进行插入、删除运算时,能更好的保证链表不断开 D)从表中的任意结点出发都能扫描到整个链表 10.链表对于数据元素的插入与删除是(B)。 A)不需移动结点,不需改变结点指针 B)不需移动结点,只需改变结点指针 C)只需移动结点,不需改变结点指针 D)既需移动结点,又需改变结点指针

(完整版)数据结构练习题及参考答案

数据结构练习题 第一部分 绪 论 一、单选题 1. 一个数组元素 a[i] 与 __________ 的表示等价。 A 、 *(a+i) B 、 a+i C 、 *a+i D 、 &a+i 2. 对于两个函数,若函数名相同,但只是 _______________ 不同则不是重载函数。 A 、 参数类型 B 、 参数个数 C 、 函数类型 3. 若需要利用形参直接访问实参,则应把形参变量说明为 _____________ 参数 A 、 指针 B 、 引用 C 、 值 4. 下面程序段的时间复杂度为 ______________ 。 for(int i=0; i

数据结构题集及答案

判断题 1.数据的逻辑结构与数据元素本身的内容和形式无关.(√) 2.一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。(√) 3.数据元素是数据的最小单位.(√) 4.数据的逻辑结构和数据的存储结构是相同的。(×) 5.程序和算法原则上是没有区别的,所以在讨论数据结构时可以通用.(×) 6.从逻辑关系上讲,数据结构主要分为线性结构和非线性结构。(√) 7.数据的存储结构是数据的逻辑结构的存储映像。(×) 8.数据的物理结构是指数据在计算机内实际的存储形式。(√) 9.数据的逻辑结构是依赖于计算机的.(×) 10.算法是对解题方法和的描述步骤。(√) 填空题: 1.数据有逻辑结构和存储结构两种结构。 2.数据逻辑结构除了集合以外,还包括线性结构、树形结构和图形结构。 3.数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。 4.树形结构和图形结构合称为非线性结构. 5.在树形结构中,除了树根结点以外,其余每个结点只有 1 个前驱结点。 6.在图形结构中,每个结点的前驱结点数和后继结点数可以任意多个。 7.数据的存储结构又叫物理结构。 8.数据的存储结构形式包括顺序存储、链式存储、索引存储和散列存储。 9.线性结构中的元素之间存在一对一的关系。 10.树形结构中的元素之间存在一对多的关系。 11.图形结构的元素之间存在多对多的关系。 12.数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)3个方面 的内容. 13.数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的 有限集合。 14.算法是一个有穷指令的集合。 15.算法效率的度量可以分为事先估算和事后统计法。 16.一个算法的时间复杂性是算法输入规模的函数. 17.算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题 规模n的函数。 18.若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为 O( nlog2n )。 若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为 ___O(n*n)_______ 。 数据结构是一门研究非数值计算的程序设计总是中计算机的操作对象,以及它们之间的关系和运算的学科。 19.串的两种最基本的存储方式是顺序存储方式链式存储方式。 20.两个串相等的充分必要条件是、长度相等对应位置的字符相同。

数据结构综合习题集(含答案)

数据结构习题集 一、选择题 1.数据结构中所定义的数据元素,是用于表示数据的。( C ) A.最小单位 B.最大单位 C.基本单位 D.不可分割的单位 2.从逻辑上可以把数据结构分为( C ) A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 3.当待排序序列中记录数较少或基本有序时,最适合的排序方法为(A ) A.直接插入排序法 B.快速排序法 C.堆排序法 D.归并排序法 4.关于串的的叙述,不正确的是( B) A.串是字符的有限序列 B.空串是由空格构成的串 C.替换是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 5.带表头结点链队列的队头和队尾指针分别为front和rear,则判断队空的条件为(A )A.front==rear B.front!=NULL C.rear!=NULL D.front==NULL 6.若构造一棵具有n个结点的二叉排序树,最坏的情况下其深度不会超过(B ) A.n/2 B.n C.(n+1)/2 D.n+1 7.将两个各有n个元素的有序表合并成一个有序表,其最少的比较次数为(A) A.n B.2n-1 C.2n D.n2 8.设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为(B ) A.236 B.239 C.242 D.245 9.一个栈的入栈序列是a,b,c,d,e,则栈的输出序列不可能是(A ) A.dceab B.decba C.edcba D.abcde 10.元素大小为1个单元,容量为n个单元的非空顺序栈中,以地址高端为栈底,以top作为栈顶指针,则出栈处理后,top的值应修改为(D ) A.top=top B.top=n-1 C.top=top-1 D.top=top+1 11.设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a00为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a45的地址为( B ) A.13 B.35 C.17 D.36 12.栈和队列( C ) A.共同之处在于二者都是先进先出的特殊的线性表 B.共同之处在于二者都是先进后出的特殊的线性表 C.共同之处在于二者都只允许在顶端执行删除操作

数据结构习题集含参考答案

数据结构习题集含答案 目录 目录 (1) 选择题 (2) 第一章绪论 (2) 第二章线性表 (4) 第三章栈和队列 (6) 第四章串 (9) 第五章数组和广义表 (9) 第六章树和二叉树 (10) 第七章图 (13) 第八章查找 (15) 第九章排序 (17) 简答题 (21) 第一章绪论 (21) 第二章线性表 (22) 第三章栈和队列 (23) 第四章串 (25) 第六章树和二叉树 (25) 第七章图 (29) 第八章查找 (32) 第九章排序 (33) 编程题 (35) 第一章绪论 (35) 第二章线性表 (35) 第三章栈和队列 (37) 第四章串 (37) 第五章数组和广义表 (37) 第六章树和二叉树 (37) 第七章图 (37) 第八章查找 (37) 第九章排序 (39)

选择题 第一章绪论 1. 数据结构这门学科是针对什么问题而产生的?(A ) A、针对非数值计算的程序设计问题 B、针对数值计算的程序设计问题 C、数值计算与非数值计算的问题都针对 D、两者都不针对 2. 数据结构这门学科的研究内容下面选项最准确的是(D ) A、研究数据对象和数据之间的关系 B、研究数据对象 C、研究数据对象和数据的操作 D、研究数据对象、数据之间的关系和操作 3. 某班级的学生成绩表中查得张三同学的各科成绩记录,其中数据结构考了90 分,那么下面关于数据对象、数据元素、数据项描述正确的是(C ) A、某班级的学生成绩表是数据元素,90分是数据项 B、某班级的学生成绩表是数据对象,90分是数据元素 C、某班级的学生成绩表是数据对象,90分是数据项 D、某班级的学生成绩表是数据元素,90分是数据元素 4. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同,称之为(C )。 A、存储结构 B、逻辑结构 C、链式存储结构 D、顺序存储结构 5. 算法分析的目的是(C ) A、找出数据的合理性 B、研究算法中的输入和输出关系 C、分析算法效率以求改进 D、分析算法的易懂性和文档型性 6. 算法分析的主要方法(A )。 A、空间复杂度和时间复杂度 B、正确性和简明性 C、可读性和文档性 D、数据复杂性和程序复杂性 7. 计算机内部处理的基本单元是(B ) A、数据 B、数据元素 C、数据项 D、数据库

《数据结构》习题集

1 绪论 一、选择题: 1、下列算法的时间复杂度是() for(i=0;i

相关文档
最新文档