数据结构习题答案 .doc

数据结构习题答案 .doc
数据结构习题答案 .doc

单元练习1

一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)

(√)(1)数据的逻辑结构与数据元素本身的内容和形式无关。

(√)(2)一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。(ㄨ)(3)数据元素是数据的最小单位。

(ㄨ)(4)数据的逻辑结构和数据的存储结构是相同的。

(ㄨ)(5)程序和算法原则上没有区别,所以在讨论数据结构时可以通用。

(√)(6)从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。

(√)(7)数据的存储结构是数据的逻辑结构的存储映像。

(√)(8)数据的物理结构是指数据在计算机内实际的存储形式。

(ㄨ)(9)数据的逻辑结构是依赖于计算机的。

(√)(10)算法是对解题方法和步骤的描述。

二.填空题

(1)数据有逻辑结构和存储结构两种结构。

(2)数据逻辑结构除了集合以外,还包括:线性结构、树形结构和图形结构。(3)数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。

(4)树形结构和图形结构合称为非线性结构。

(5)在树形结构中,除了树根结点以外,其余每个结点只有 1 个前趋结点。

(6)在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个。

(7)数据的存储结构又叫物理结构。

(8)数据的存储结构形式包括:顺序存储、链式存储、索引存储和散列存储。(9)线性结构中的元素之间存在一对一的关系。

(10)树形结构结构中的元素之间存在一对多的关系,

(11)图形结构的元素之间存在多对多的关系。

(12)数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)三个方面的内容。

(13)数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系的有限集合。

(14)算法是一个有穷指令的集合。

(15)算法效率的度量可以分为事先估算法和事后统计法。

(16)一个算法的时间复杂性是算法输入规模的函数。

(17)算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模n 的函数。

(18)若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为 O (nlog2n)。

(19)若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为 O

(n2)。

(20)数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象,以及它们之间的关系和运算的学科。

三.选择题

(1)数据结构通常是研究数据的( A )及它们之间的相互联系。

A. 存储结构和逻辑结构

B. 存储和抽象

C. 联系和抽象

D. 联系与逻辑(2)在逻辑上可以把数据结构分成:( C )。

A. 动态结构和静态结构

B. 紧凑结构和非紧凑结构

C. 线性结构和非线性结构

D. 内部结构和外部结构

(3)数据在计算机存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为( C )。

A. 存储结构

B. 逻辑结构

C. 顺序存储结构

D. 链式存储结

(4)非线性结构中的每个结点( D )。

A.无直接前趋结点

B.无直接后继结点

C.只有一个直接前趋结点和一个直接后继结点

D.可能有多个直接前趋结点和多个直接后继结点

(5)链式存储的存储结构所占存储空间( A )。

A.分两部分,一部分存放结点的值,另一部分存放表示结点间关系的指针

B.只有一部分,存放结点的值

C.只有一部分,存储表示结点间关系的指针

D.分两部分,一部分存放结点的值,另一部分存放结点所占单元素

(6)算法的计算量大小称为算法的( C )。

A. 现实性

B. 难度

C. 时间复杂性

D. 效率

(7)数据的基本单位是( B )。

A. 数据结构

B. 数据元素

C. 数据项

D. 文件

(8)每个结点只含有一个数据元素,所有存储结点相继存放在一个连续的存储区里,这种存储结构称为( A )结构。

A. 顺序存储

B. 链式存储

C. 索引存储

D. 散列存储(9)每一个存储结点不仅含有一个数据元素,还包含一组指针,该存储方式是( B )存储方式。

A. 顺序

B. 链式

C. 索引

D. 散列

(10)以下任何两个结点之间都没有逻辑关系的是( D )。

A. 图形结构

B. 线性结构

C. 树形结构

D. 集合(11)在数据结构中,与所使用的计算机无关的是( C )。

A. 物理结构

B. 存储结构

C. 逻辑结构

D. 逻辑和存储结构

(12)下列四种基本逻辑结构中,数据元素之间关系最弱的是( A )。

A. 集合

B. 线性结构

C. 树形结构

D. 图形结构(13)与数据元素本身的形式、内容、相对位置、个数无关的是数据的( A )。

A. 逻辑结构

B. 存储结构

C. 逻辑实现

D. 存储实现

(14)每一个存储结点只含有一个数据元素,存储结点存放在连续的存储空间,另外有一组指明结点存储位置的表,该存储方式是( C )存储方式。

A. 顺序

B. 链式

C. 索引

D. 散列(15)算法能正确的实现预定功能的特性称为算法的( A )。

A. 正确性

B. 易读性

C. 健壮性

D. 高效性(16)算法在发生非法操作时可以作出处理的特性称为算法的( C )。

A. 正确性

B. 易读性

C. 健壮性

D. 高效性(17)下列时间复杂度中最坏的是( D )。

A. O(1)

B. O(n)

C. O(log2n)

D. O(n2)(18)下列算法的时间复杂度是( D )。

for (i=0;i

for (j=0;i

c[i][j]=i+j;

A. O(1)

B. O(n)

C. O(log2n)

D. O(n2)(19)算法分析的两个主要方面是( A )。

A. 空间复杂性和时间复杂性

B. 正确性和简明性

C. 可读性和文档性

D. 数据复杂性和程序复杂性

(20)计算机算法必须具备输入、输出和( C )。

A. 计算方法

B. 排序方法

C. 解决问题的有限运算步骤

D. 程序设计方法

四.分析下面各程序段的时间复杂度

(1)for (i=0;i

for (j=0;j

A[i][j]

解: O(n*m)

(2) s=0;

for (i=0;i

for (j=0;j

s+=B[i][j];

sum=s;

解: O(n2)

(3) T=A;

A=B;

B=T;

解:O(1)

(4) s1(int n)

{ int p=1,s=0;

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

{ p*=i;s+=p; }

return(s);

}

O(n)

(5) s2(int n)

x=0; y=0;

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

x++;

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

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

y++; 解:O(n 2

)

五. 根据二元组关系,画出对应逻辑图形的草图,指出它们属于何种数据结构。

(1)A=(D ,R ),其中:

D={a ,b ,c ,d ,e}, R={ }

解:

c

属于集合

(2)B=(D,R ),其中:

D={a,b,c,d,e,f},R={r}

R={,,,,} (尖括号表示结点之间关系是有向的) 解:

属于线性结构。

(3)F=(D,R ),其中:

D={50,25,64,57,82,36,75,55},R={r}

R={<50,25>,<50,64>,<25,36>,<64,57>,<64,82>,<57,55>,<57,75>} 解:

属于树结构

(4)C=(D,R ),其中: D={1,2,3,4,5,6},R={r}

R={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}(园括号表示结点之间关系是有向的)

解:

属于图结构

(5)E=(D,R ),其中:

D={a,b,c,d,e,f,g,h},R={r}

R={,,,,,,} 解:

属于树结构。

单元练习2

一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)

(×)(1)线性表的链式存储结构优于顺序存储。

(×)(2)链表的每个结点都恰好包含一个指针域。

(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。

(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。

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

(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。

二.填空题

(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。

(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。

(3)顺序表相对于链表的优点是:节省存储和随机存取。

(4)链表相对于顺序表的优点是:插入、删除方便。

(5)采用顺序存储结构的线性表叫顺序表。

(6)顺序表中访问任意一个结点的时间复杂度均为O(1)。

(7)链表相对于顺序表的优点是插入、删除方便;缺点是存储密度小。

(8)在双链表中要删除已知结点*P,其时间复杂度为O(1)。

(9)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为 O(n) 。

(10)单链表中需知道头指针才能遍历整个链表。

(11)性表中第一个结点没有直接前趋,称为开始结点。

(12)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。

(13)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。

(14)在无头结点的单链表中,第一个结点的地址存放在头指针中,而其它结点的存储地址存放在前趋结点的指针域中。

(15)当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用顺序存储结构。

(16)在线性表的链式存储中,元素之间的逻辑关系是通过指针决定的。

(17)在双向链表中,每个结点都有两个指针域,它们一个指向其前趋结点,另一

个指向其后继结点。

(18)对一个需要经常进行插入和删除操作的线性表,采用链式存储结构为宜。(19)双链表中,设p是指向其中待删除的结点,则需要执行的操作为:p->prior->next=p->next 。

(20)在如图所示的链表中,若在指针P所在的结点之后插入数据域值为a和b的两个结点,则可用下列两个语句:S->next->next=P->next; 和P->next=S;

来实现该操作。

三.选择题

(1)在具有n个结点的单链表中,实现( A )的操作,其算法的时间复杂度都是O(n)。

A.遍历链表或求链表的第i个结点B.在地址为P的结点之后插入一个结点

C.删除开始结点D.删除地址为P的结点的后继结点(2)设a、b、c为三个结点,p、10、20分别代表它们的地址,则如下的存储结构称为( B )。

A.循环链表 B.单链表C.双向循环链表 D.双向链表(3)单链表的存储密度( C )。

A.大于1 B.等于1 C.小于1 D.不能确定(4)已知一个顺序存储的线性表,设每个结点占m个存储单元,若第一个结点的地址为B,则第i个结点的地址为( A )。

A. B+(i-1)*m B.B+i*m C. B-i*m D. B+(i+1)*m (5)在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为( B )。

A.O(1) B.O(n)C.O(n2) D.O(log2n)(6)设Llink、Rlink分别为循环双链表结点的左指针和右指针,则指针P所指的元素是双循环链表L的尾元素的条件是( D )。

A.P== L B.P->Llink== L C.P== NULL D.P->Rlink==L

(7)两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素前驱的条件是( B )。

A.P->next==Q->next B.P->next== Q C.Q->next== P D.P== Q (8)用链表存储的线性表,其优点是( C )。

A.便于随机存取B.花费的存储空间比顺序表少

C.便于插入和删除D.数据元素的物理顺序与逻辑顺序相同

(9)在单链表中,增加头结点的目的是( C )。

A.使单链表至少有一个结点B.标志表中首结点的位置

C.方便运算的实现D.说明该单链表是线性表的链式存储结构

(10)下面关于线性表的叙述中,错误的是( D )关系。

A.顺序表必须占一片地址连续的存储单元B.顺序表可以随机存取任一元素

C.链表不必占用一片地址连续的存储单元D.链表可以随机存取任一元素(11)L是线性表,已知LengthList(L)的值是5,经DelList(L,2)运算后,LengthList (L)的值是( C )。

A.2 B.3 C.4 D.5

(12)单链表的示意图如下:

L

指向链表Q结点的前趋的指针是( B )。

A.L B.P C.Q D.R

(13)设p为指向单循环链表上某结点的指针,则*p的直接前驱( C )。

A.找不到 B.查找时间复杂度为O(1)

C.查找时间复杂度为O(n) D.查找结点的次数约为n

(14)等概率情况下,在有n个结点的顺序表上做插入结点运算,需平均移动结点的数目为( C )。

A.n B.(n-1)/2 C. n/2 D.(n+1)/2 (15)在下列链表中不能从当前结点出发访问到其余各结点的是( C )。

A.双向链表 B.单循环链表 C.单链表 D.双向循环链表(16)在顺序表中,只要知道( D ),就可以求出任一结点的存储地址。

A.基地址 B.结点大小 C.向量大小 D.基地址和结点大小

(17)在双链表中做插入运算的时间复杂度为( A )。

A.O(1) B.O(n) C.O(n2) D.O(log2n)(18)链表不具备的特点是( A )。

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

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

(19)以下关于线性表的论述,不正确的为( C )。

A.线性表中的元素可以是数字、字符、记录等不同类型

B .线性顺序表中包含的元素个数不是任意的

C .线性表中的每个结点都有且仅有一个直接前趋和一个直接后继

D .存在这样的线性表,即表中没有任何结点 (20)在( B )的运算中,使用顺序表比链表好。

A .插入

B .根据序号查找

C . 删除

D .根据元素查找

四.分析下述算法的功能

(1)

(2)

解:

(1)返回结点*p 的直接前趋结点地址。 (2)交换结点*p 和结点*q (p 和q 的值不变)。

五. 程序填空

(1)已知线性表中的元素是无序的,并以带表头结点的单链表作存储。试写一算法,删除表中所有大于min ,小于max 的元素,试完成下列程序填空。 V oid delete (lklist head; datatype min, max) { q=head->next;

while (p!=NULL)

{ if ((p->data<=min ) | | ( p->data>=max ) {q=p; p= p->next ; }

else

ListNode *Demo1(LinkList L,ListNode *p)

{ // L 是有头结点的单链表 ListNode *q=L->next; While (q && q->next!=p) q=q->next; if (q) return q; else Error(“*p not in L ”); } void Demo2(ListNode *p,ListNode *q)

{ // p,*q 是链表中的两个结点 DataType temp; temp=p->data; p->data=q->data; q->data=temp; }

{ q->next=p->next ;

delete (p) ;

p=q->next ; }

}

}

(2)在带头结点head的单链表的结点a之后插入新元素x,试完成下列程序填空。

struct node

{ elemtype data;

node *next;

};

void lkinsert (node *head, elemtype x)

{ node *s, *p;

s=new node ;

s->data=x ;

p=head->next;

while (p!=NULL) && ( p->data!=a )

____p=p->next ;

if (p==NULL)

cout<< " 不存在结点a! ";

else {_____s->next=p->next______;

___ p->next=s __________;

}

}

六.算法设计题

(1)写一个对单循环链表进行遍历(打印每个结点的值)的算法,已知链表中任意结点的地址为P 。

解:

void Show(ListNode *P)

{ ListNode *t=P;

do

{ printf("%c",t->data);

t=t->rear;

}

while (t!=P);

}

(2)对给定的带头结点的单链表L,编写一个删除L中值为x的结点的直接前趋结点的算法。

解:

void delete(ListNode *L)

{ ListNode *p=L,*q;

if(L->next->data==X)

{

printf(“值为x的结点是第一个结点,没有直接前趋结点可以删除”);

return;

}

For(p->next->data!=X;q=p;p=p->next);// 删除指针p所指向的结点

q->next=p->next;

delete p;

}

(3)已知一个单向链表,编写一个函数从单链表中删除自第i个结点起的k个结点。解:

void Del(node *head,int i,int k)

{

node *p,*q;

int j;

if(i==1)

for(j=1;j<=k;j++) // 删除前k个元素

{

p=head; // p指向要删除的结点

head=head->next;

delete p;

}

else

{

p=head;

for(j=1;j<=i-2;j++)

p=p->next; // p指向要删除的结点的前一个结点

for(j=1;j<=k;j++)

{

q=p->next; // q 指向要删除的结点

p->next=q->next;

delete q;

}

}

}

(4)有一个单向链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算值域为x的结点个数。

解://本题是遍历单链表的每个结点,每遇到一个结点,结点个数加1,结点个数存储在变量n中。实现本题功能的函数如下:

int counter(head)

node *head;

{ node *p;

int n=0;

p=head;

while(p!=NULL)

{ if(p->data==x)

n++;

p=p->next;

}

return(n);

}

(5)有两个循环单向链表,链头指针分别为head1和head2,编写一个函数将链表head1链接到链表head2,链接后的链表仍是循环链表。

解://本题的算法思想是:先找到两链表的尾指针,将第一个链表的尾指针与第二个链表的头结点链接起来,使之成为循环的。函数如下:

node *link (node *head1, *head2)

{ node *p,*q;

p=head1;

while(p->next!=head1)

p=p->next;

q=head2;

while(q->next!=head2)

q=q->next;

p->next=head2;

q->next=head1;

return (head1);

}

单元练习3

一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)

(√)(1)栈是运算受限制的线性表。

(√)(2)在栈空的情况下,不能作出栈操作,否则产生下溢出。

(ㄨ)(3)栈一定是顺序存储的线性结构。

(√)(4)栈的特点是“后进先出”。

(ㄨ)(5)空栈就是所有元素都为0的栈。

(ㄨ)(6)在C或C++语言中设顺序栈的长度为MAXLEN,则top=MAXLEN时表示队满。(√)(7)链栈与顺序栈相比,其特点之一是通常不会出现栈满的情况。

(ㄨ)(8)一个栈的输入序列为:A,B,C,D,可以得到输出序列:C,A,B,D。(ㄨ)(9)递归定义就是循环定义。

(√)(10)将十进制数转换为二进制数是栈的典型应用之一。

二.填空题

(1)在栈结构中,允许插入、删除的一端称为栈顶。

(2)在顺序栈中,当栈顶指针top=-1时,表示栈空。

(3)在有n个元素的栈中,进栈操作的时间复杂度为 O(1)。

(4)在栈中,出栈操作的时间复杂度为:O(1) 。

(5)已知表达式,求它的后缀表达式是栈的典型应用。

(6)在一个链栈中,若栈顶指针等于NULL,则表示栈空。

(7)向一个栈顶指针为top的链栈插入一个新结点*p时,应执行p->next=top;和top=p;操作。

(8)顺序栈S存储在数组 S->data[0..MAXLEN-1]中,进栈操作时要执行的语句有:S->top ++ 。(或= S->top+1)

(9)链栈LS,指向栈顶元素的指针是 LS->next 。

(10)从一个栈删除元素时,首先取出栈顶元素,然后再移动栈顶指针。

(11)由于链栈的操作只在链表的头部进行,所以没有必要设置头结点。

(12)已知顺序栈S,在对S进行进栈操作之前首先要判断栈是否满。

(13)已知顺序栈S,在对S进行出栈操作之前首先要判断栈是否空。

(14)若内存空间充足,链栈可以不定义栈满运算。

(15)链栈LS是空的条件是 LS->next=NULL 。

(16)链栈LS的栈顶元素是链表的首元素。

(17)同一栈的各元素的类型相同。

(18)若进栈的次序是A、B、C、D、E,执行三次出栈操作以后,栈顶元素为 B 。(19)A+B/C-D*E的后缀表达式是:ABC/+DE*- 。

(20)四个元素按A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,x的值是C 。

三.选择题

(1)插入和删除只能在一端进行的线性表,称为( C )。

A.队列 B.循环队列 C.栈D.循环栈

(2)设有编号为1,2,3,4的四辆列车,顺序进入一个栈结构的站台,下列不可能的出站顺序为 ( D )

A.1234 B.1243 C.1324 D.1423

(3)如果以链表作为栈的存储结构,则出栈操作时( B )

A.必须判别栈是否满B.必须判别栈是否空

C.必须判别栈元素类型 D.队栈可不做任何判别

(4)元素A,B,C,D依次进栈以后,栈顶元素是( D )

A.A B.B C.C D.D

(5)顺序栈存储空间的实现使用( B )存储栈元素。

A.链表B.数组C.循环链表D.变量

(6)在C或C++语言中,一个顺序栈一旦被声明,其占用空间的大小( A )。

A.已固定 B.不固定 C.可以改变D.动态变化

(7)带头结点的链栈LS的示意图如下,栈顶元素是( A )

LS

A.A B.B C.C D.D

(8)链栈与顺序栈相比,有一个比较明显的优点是( B )。

A.插入操作更加方便B.通常不会出现栈满的情况。

C.不会出现栈空的情况 D.删除操作根加方便

(9)从一个栈顶指针为top的链栈中删除一个结点时,用x保存被删除的结点,应执行下列 ( D )命令。

A.x=top;top=top->next; B.top=top->next;x=top->data;

C.x=top->data; D.x=top->data;top=top->next;

(10)在一个栈顶指针为HS的链栈中,将一个S指针所指的结点入栈,应执行下列- ( B )命令。

A.HS->next=S; B.S->next=HS->next;HS->next=S;

C.S->next=HS->next;HS=S; D.S->next=HS;HS=HS->next;

(11)四个元素按A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,栈顶元素的值是( B )。

A.A B.B C.C D.D

(12)元素A,B,C,D依次进栈以后,栈底元素是( A )。

A.A B.B C.C D.D

(13)经过下列栈的运算后,再执行ReadTop(s)的值是( A )。

InitStack(s) (初始化栈);Push(s,a);Push(s,b); Pop(s)

A.a B.b C.1 D.0

(14)经过下列栈的运算后,x的值是( B )。

InitStack(s) (初始化栈);Push(s,a);Push(s,b); ReadTop(s);Pop(s,x);

A.a B.b C.1 D.0

(15)经过下列栈的运算后,x的值是( B )。

InitStack(s) (初始化栈);Push(s,a);Pop(s,x);Push(s,b);Pop(s,x);

A.a B.b C.1 D.0

(16)经过下列栈的运算后,SEmpty(s)的值是( C )。

InitStack(s) (初始化栈); Push(s,a); Push(s,b);Pop(s,x); Pop(s,x);

A.a B.b C.1 D.0

(17)向顺序栈中压入元素时,( B )。

A.先存入元素,后移动栈顶指针 B.先移动栈顶指针,后存入元素

C.谁先谁后无关紧要D.同时进行

(18)初始化一个空间大小为5的顺序栈S后,S->top的值是( B )。

A.0 B.-1 C.不再改变D.动态变化

(19)一个栈的入栈次序ABCDE,则栈的不可能的输出序列是 ( C )。

A.EDCBA B.DECBA C.DCEAB D.ABCDE

(20)设有一个顺序栈S,元素A,B,C,D,E,F,依次进栈,如果六个元素出栈的顺序是B,D,C,F,E,A,则栈的容量至少应是 ( A )。

A.3 B.4 C.5 D. 6

四.应用题

(1)设有一个栈,元素进栈的次序为:A,B,C,D,E,用I表示进栈操作,O表示出栈操作,写出下列出栈的操作序列。

①C,B,A,D,E ②A,C,B,E,D

解:①IIIOOOIOIO

②IOIIOOIIOO

(2)求后缀表达式

①A^B^C/D

解:A B ^ C ^ D /

②-A+B*C+D/E

解:0 A – B C * + D E / +

③A*(B+C)*D-E

解:A B C + * D * E -

④(A+B)*C-E/(F+G/H)-D

解:A B + C * E F G H / + / - D -

⑤8/(5+2)-6

解:8 5 2 + / 6 -

六.算法设计题

(1)设用一维数组stack[n]表示一个堆栈,若堆栈中每个元素需占用M个数组单元(M>1)。

①试写出其入栈操作的算法。

②试写出其出栈操作的算法。

解://用一整型变量top表示栈顶指针,top为0时表示栈为空。栈中元素从S [1]开始存放元素。

//①入栈算法:

void push (char x)

{

if ((top+M)>MAXLEN-1)

printf (“堆栈溢出!”);

else

{

if (top= =0)

{

top++;

S [top]=x;

}

else

{

top=top+M;

S [top]=x;

}

}

}

//②出栈算法:

void pop (char x)

{

if (top= =0)

printf (“堆栈为空栈!”);

else

{

if (top= =1)

{

x= S [top];

top––;

}

else

{

x= S [top];

top=top–M;

}

}

}

(2)设计一个算法,要求判别一个算术表达式中的圆括号配对是否正确。

解://设表达式在字符数组a[ ]中,使用一堆栈S来帮助判断。

int correct (char a[ ])

{

stack s ;

InitStack (s); //调用初始化栈函数

for (i=0; i

if (a[i]= =’(’)

Push (s,’(’);

else

if (a[i]= =’)’)

{

if StackEmpty (s) //调用判栈空函数

return 0; //若栈为空返回0;否则出栈

else

Pop(s);

}

if (StackEmpty (s) ) //调用判栈空函数

printf (“配对正确!”); //若栈空,说明配对正确,并返回1

else

printf (“配对错误!”); //配对错误返回0

}

(3)设计一个将十进正整数转换为十进制数的算法,并要求上机调试通过。

解:#include

#include

typedef struct stacknode //定义栈的存储结构

{

int data;

struct stacknode *next;

}stacknode;

typedef struct

{

stacknode *top; //定义栈顶的指针

}linkstack;

void Conversion(int n) //栈的应用:十——十六进制转换{ linkstack s;

int x;

s.top=NULL; //置栈空

do

{ x=n%16; //取余数n= n/16 ; //取新的商

stacknode *p=new stacknode; //申请新结点

p->next=s.top ; //修改栈顶指针

s.top=p;

s.top->data=x; //余数入栈

}

while(n);

printf("\n\t\t转换后的十六进制数值为:";

while (s.top) //出栈处理

{ if(s.top->data<10);

printf("%d",s.top->data);

else

switch(s.top->data)

{

case 10: printf("%c",'A');break;

case 11: printf("%c",'B');break;

case 12: printf("%c",'C');break;

case 13: printf("%c",'D');break;

case 14: printf("%c",'E');break;

case 15: printf("%c",'F');break;

}

stacknode *p=s.top;

s.top=s.top->next;

free(p) ; //出栈一个余数,收回一个结}

printf("\n\n");

}

void main()

{

int n;

printf("\n\t\t请输入一个十进制正整数:");

scanf("%d",&n);

Conversion(n);

}

单元练习4

一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)

(√)(1)队列是限制在两端进行操作的线性表。

(√)(2)判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。

(×)(3)在链队列上做出队操作时,会改变front指针的值。

(√)(4)在循环队列中,若尾指针rear大于头指针front,其元素个数为rear- front。(×)(5)在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。(√)(6)链队列在一定范围内不会出现队满的情况。

(×)(7)在循环链队列中无溢出现象。

(×)(8)栈和队列都是顺序存储的线性结构。

(×)(9)在队列中允许删除的一端称为队尾。

(×)(10)顺序队和循环队关于队满和队空的判断条件是一样的。

二.填空题

(1)在队列中存取数据应遵循的原则是先进先出。

(2)队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

(3)在队列中,允许插入的一端称为队尾。

(4)在队列中,允许删除的一端称为队首(或队头)。

(5)队列在进行出队操作时,首先要判断队列是否为空。

(6)顺序队列在进行入队操作时,首先要判断队列是否为满。

(7)顺序队列初始化后,front=rear= -1 。

(8)解决顺序队列“假溢出”的方法是采用循环队列。

(9)循环队列的队首指针为front,队尾指针为rear,则队空的条件为 front == rear 。

(10)链队列LQ为空时,LQ->front->next= NULL 。

(11)设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为 O(n)。

(12)设长度为n的链队列用单循环链表表示,若只设尾指针,则出队操作的时间复杂度为 0(1)。

(13)在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。

(14)设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大空间为MAXLEN,则队满标志为:

front==(rear+1)%MAXLEN 。

(15)在一个链队列中,若队首指针为front,队尾指针为rear,则判断该队列只有一个结点的条件为: front==rear && front !NULL 。

( 或 front==rear && front <>NULL )

(16)向一个循环队列中插入元素时,首先要判断队尾指针,然后再向指针所指的位置写入新的数据。

(17)读队首元素的操作不改变(或不影响)队列元素的个数。

(18)设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有front=11,rear=19,则循环队列中还有 8 个元素。

(L= (N+rear-front)% N=(40+19-11)% 40=8)

(19)队列Q,经过下列运算:InitQueue(Q)(初始化队列);InQueue(Q,a); InQueue(Q,b);OutQueue(Q,x); ReadFront(Q,x);QEmpty(Q);后的值是 0 。(20)队列Q经过InitQueue(Q)(初始化队列);InQueue(Q,a);InQueue(Q,b); ReadFront(Q,x)后,x的值是 a 。

三.选择题

(1)队列是限定在( D )进行操作的线性表。

A.中间 B.队首 C.队尾 D.端点

(2)队列中的元素个数是( B )。

A.不变的 B.可变的 C.任意的 D.0

(3)同一队列内各元素的类型( A )。

A.必须一致 B.不能一致C.可以不一致 D.不限制

(4)队列是一个( C )线性表结构。

A.不加限制的 B.推广了的 C.加了限制的 D.非

(5)当利用大小为n的数组顺序存储一个队列时,该队列的最后一个元素的下标为( B )。

A.n-2 B.n-1 C.n D.n+1

(6)一个循环队列一旦说明,其占用空间的大小( A )。

A.已固定B.可以变动 C.不能固定 D.动态变化

(7)循环队列占用的空间( A )。

A.必须连续 B.不必连续 C.不能连续 D.可以不连续(8)存放循环队列元素的数组data有10个元素,则data数组的下标范围是( B )。

A.0..10 B.0..9 C.1..9 D.1..10

(9)若进队的序列为:A,B,C,D,则出队的序列是( C )。

A.B,C,D,A B.A,C,B,D

C.A,B,C,D D.C,B,D,A

(10)四个元素按:A,B,C,D顺序连续进队Q,则队尾元素是( D )。

A. A B. B

C. C D. D

(11)四个元素按:A,B,C,D顺序连续进队Q,执行一次OutQueue(Q)操作后,队

数据结构与算法习题及答案

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 (2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。 A.存储结构B.存储实现 C.逻辑结构D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说法正确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是()。 A.顺序队列B.链表C.有序表D.链栈 (6)以下数据结构中,()是非线性数据结构 A.树B.字符串C.队D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90;y=100; while(y>0) if(x>100) {x=x-10;y--;} elsex++; (2)for(i=0;i

数据结构习题和答案

习题课 填空 1、对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为,双亲结点的编号为。 2、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。 3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数 为个。 4、为了实现折半查找,线性表必须采用方法存储。顺序 5、一种抽象数据类型包括数据对象和。 6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__________和_______。 7、数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。 8、队列的插入操作在进行,删除操作在进行。 9、二叉搜索树的中序遍历得到的结点序列为____ ____。 10、在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 11、栈的特点是。 12、在单链表中,除了首元结点外,任一结点的存储位置由。 13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。 14、深度为k(设根的层数为1)的完全二叉树至少有个结点,至多 有个结点。 15、一棵深度为6的满二叉树有个分支结点和个叶子结点。 16、一个算法的效率可分为效率和效率。 17、队列的特点是。 18、一棵深度为5的满二叉树中的结点数为个。 19、在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。

简答题 1、已知一组元素为(38,26,62,94,35,50,28,55),画出按元素排列顺序输入生成的一棵二叉搜索树。 答: 2、假设有二维数组A[0..5,0..7],每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,计算: (1)末尾元素A57的第一个字节地址为; (2)若按列存储时,元素A47的第一个字节地址为。 (3) 数组A的体积(存储量); (4) 若按行存储时,元素A14的第一个字节地址为。

经典数据结构面试题(含答案)

栈和队列的共同特点是__________________________ .栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是 __________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 ____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________

严蔚敏版数据结构课后习题答案-完整版

第1章绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据

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

数据结构习题及答案——严蔚敏_课后习题答案 精品

第一章绪论 选择题 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 3. C 4. A、B 5. C 6.C、B

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

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

数据结构练习题 习题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. 算法的五个重要特性是__ __ , __ __ , ___ _ ,

数据结构模拟卷(含答案)经典习题培训讲学

数据结构模拟卷(含答案)经典习题

练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4

6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位10. 下列图示的顺序存储结构表示的二叉树是( )

数据结构课后参考答案

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

数据结构习题及参考答案

习题1 一、单项选择题 A1.数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 C2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 D3.树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 B4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 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) CA5.算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8.数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对

数据结构模拟卷(含答案)经典习题

练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4 1

6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位 10. 下列图示的顺序存储结构表示的二叉树是( ) 2

数据结构习题及答案精编版

第一章 1.在数据结构中,从逻辑上可以把数据结构分为(C ) A.动态结构和静态结构 B. 紧凑结构和非紧凑结构 C.线性结构和非线性结构 D. 内部结构和外部结构 ● 2.在数据结构中,与所使用的计算机无关的是( A ) A. 逻辑结构 B. 存储结构 C. 逻辑和存储结构 D. 物理结构 3.下面程序的时间复杂度为____O(mn)_______。 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i 第二章线性表 ●链表不具备的特点是(A) A 可以随机访问任一结点(顺序) B 插入删除不需要移动元素 C 不必事先估计空间 D 所需空间与其长度成正比 2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B ) A head==null B head->next==null C head->next==head D head!=null ●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D) A 单链表 B 双链表 C 循环链表 D 顺序表 ● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C) A 顺序表 B 用头指针表示的单循环链表 C 用尾指针表示的单循环链表 D 单链表 ● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序, 则操作的时间复杂度为( D ) A O(1) B O(log2n) C O(n2) D O(n) ● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长 度有关 A 删除单链表中第一个元素 B 删除单链表中最后一个元素 C 在第一个元素之前插入一个新元素 D 在最后一个元素之后插入一个新元素 ●7.与单链表相比,双向链表的优点之一是(D) A 插入删除操作更简单 B 可以进行随机访问 C 可以省略表头指针或表尾指针 D 顺序访问相邻结点更容易 ●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域 (头结点的地址)中存放的是( B ) A list的地址 B list的内容 C list指的链结点的值 D 链表第一个链结点的地址 ●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B ) A list2比list1占用更多的存储单元 B list1与list2占用相同的存储单元 C list1和list2应该是相同类型的指针变量 D 双向链表比单链表占用更多的存储单元 10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。

经典数据结构上机题_答案解析

数据结构上机实验题目 实验一线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 实验容 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6.输入整型元素序列利用有序表插入算法建立一个有序表。 7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺序结构实现循环队列的入队、出队操作。 8.编写一个主函数,调试上述算法。 #include #include

#define OVERFLOW 0 #define MAXSIZE 100 typedef int ElemType; typedef struct list {ElemType elem[MAXSIZE]; int length; }Sqlist; void Creatlist(Sqlist &L) {int i; printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。 scanf("%d",&L.length); for(i=0;i

数据结构课后习题及答案

填空题(10 * 1’ = 10’) 一、概念题 .当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 .当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 .带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 .循环队列的引入,目的是为了克服假溢出。 .长度为0的字符串称为空串。 .组成串的数据元素只能是字符。 .设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 .为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 .广义表的深度是广义表中括号的重数 .有向图G可拓扑排序的判别条件是有无回路。 .若要求一个稠密图的最小生成树,最好用Prim算法求解。 . 直接定址法法构造的哈希函数肯定不会发生冲突。 .排序算法所花费的时间,通常用在数据的比较和交换两大操作。 .通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。 .对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。 .存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。 .抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。 .一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。 .在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。 .在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。 .队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 .栈是限定尽在表位进行插入或删除操作的线性表。 .在链式队列中,判定只有一个结点的条件是(Q->rear==Q->front)&&(Q->rear!=NULL)。 .已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x; p->next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 .循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt和(front=-1&&rear+1==MAXSIZE)。 .串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 .字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 .所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数,则称该矩阵为稀疏矩阵。 .一维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种不同的存储方式。 .在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是求邻接矩阵中第i列非0元素的个数。 网中,结点表示活动,边表示活动之间的优先关系,AOE网中,结点表示事件,边表示活动。 .按排序过程中依据不同原则对内部排序方法进行分类,主要有选择排序﹑交换排序﹑插入排序归并排序等4类。 .在堆排序、快速排序和归并排序中若只从排序结果的稳定性考虑,则应选择归并排序方法;若只从平均情况下排序最快考虑,则应选择快速排序方法;若只从最坏情况下排序最快且要节省类存考虑,则应选择堆排序方法。 .直接插入排序用监视哨的作用是存当前要的插入记录,可又省去查找插入位置时对是否出界的判断。 .设表中元素的初始状态是按键值递增的,则直接插入排序最省时间,快速排序最费时间。 .下列程序判断字符串s是否对称,对称则返回1,否则返回0;如?(“abba”)返回1,?(”abab”)返回0. Int f (char*s) { Int i=0,j=0; 求串长*/

数据结构复习题附答案

一.是非题 1. 数据结构(应该是抽象数据类型)可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系,P是对D的基本操作集。(f) 2 简单地说,数据结构是带有结构的数据元素的集合。(t) 3 判断带头结点的非空循环单链表(头指针为L)中指针p所指结点是最后一个元素结点 的条件是:p->next==L。(t) 4 线性表的链式存储结构具有可直接存取表中任一元素的优点。(f) 5 线性表的顺序存储结构优于链式存储结构。(f) 6. 在单链表P指针所指结点之后插入S结点的操作是: P->next= S ; S-> next = P->next;。(f) (顺序弄反了S-> next = P->next; P->next= S ;) 7 对于插入、删除而言,线性表的链式存储优于顺序存储。(t) 8. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(f) 9. 栈和队列是操作上受限制的线性表。(t) 10. 队列是与线性表完全不同的一种数据结构。(f) (栈和队列是操作上受限制的线性表) 11. 队列是一种操作受限的线性表,凡对数据元素的操作仅限一端进行。(f) (两端) 12. 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。(f) ( “如果需要,可对它们中的任一元素进行操作.” 这里的意思是在O(1)的时间来读和改某个元素。比如数组的直接索引。 栈:如果需要,每一次只能对栈顶的元素进行操作 队列:如果需要,每一次只能对两端,或者只能对队列头的元素进行操作。) 13. 栈是限定仅在表头进行插入和表尾进行删除运算的线性表。(f) 14. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。(f) (二叉树和树相互独立) 15 二叉树是一棵结点的度最大为二的树。(f) (二叉树和树相互独立) 16 赫夫曼树中结点个数一定是奇数。(t) 17 在二叉树的中序遍历序列中,任意一个结点均处在其左孩子结点的后面。(t) (LDR) 18 假设B是一棵树,B′是对应的二叉树。则B的后根遍历相当于B′的后序遍历。(f) (后根遍历相当于中序遍历) 19. 通常,二叉树的第i层上有2i-1个结点。(f) (应该为1~2i-1个) 20. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。(t) 21 二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面。(t) 22 由树结点的先根序列和后根序列可以唯一地确定一棵树。(t) 23 邻接多重表可以用以表示无向图,也可用以表示有向图。(f) (只能表示无向图,有向图用十字链表) 24 可从任意有向图中得到关于所有顶点的拓扑次序。(f) (带环图没有) 25 有向图的十字链表是将邻接表和逆邻接表合二为一的链表表示形式。(t)

数据结构习题和答案

习题课 填空 1对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为 ________________ , 双亲结点的编号为_____________ 。 2、向一个长度为n的向量中删除第i个元素(1 < i < n)时,需向前移动_________ 个元素。 3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数 为__________ 个。 4、为了实现折半查找,线性表必须采用_____________ 方法存储。顺序 5、一种抽象数据类型包括数据对象________________ 和 ______________。 6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分 别为___________ 和 _______ 。 7、数据结构被形式地定义为(D, R),其中D是_________ 的有限集合,R是D上的_________ 有限集合。 8、队列的插入操作在_________ 进行,删除操作在___________ 进行。 9、二叉搜索树的中序遍历得到的结点序列为______ _____ _ 。 10、在顺序表中插入或删除一个元素,需要平均移动_________________元素,具体移动的元素个数与______________________ 关。 11、栈的特点是____________________ 。 12、在单链表中,除了首元结点外,任一结点的存储位置由__________ 。 13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要_________ 条边。 14、深度为k (设根的层数为1)的完全二叉树至少有个结点,至多 有个结点。 15、一棵深度为6的满二叉树有_______ 个分支结点和______ 个叶子结点。 16、一个算法的效率可分为____________ 效率和____________ 效率。 仃、队列的特点是______________________ 。 18、一棵深度为5的满二叉树中的结点数为__________ 个。 19、在一个具有n个顶点的无向完全图中,包含有__________ 条边,在一个具有n个顶点的有 向完全图中,包含有_________ 条边。

数据结构经典题目c语言代码

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr;

数据结构习题与答案

第 1 章绪论 课后习题讲解 1. 填空 ⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 【解答】数据元素 ⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别是()、()、()、()、()。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度是()的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2. 选择题 ⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

数据结构经典例题

数据结构经典例题 1.设计一个算法将L拆分成两个带头节点的单链表L1和L2。 void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L->next,*q,*r1; //p指向第1个数据节点 L1=L; //L1利用原来L的头节点 r1=L1; //r1始终指向L1的尾节点 L2=(LinkList *)malloc(sizeof(LinkList));//创建L2的头节点 L2->next=NULL; //置L2的指针域为NULL while (p!=NULL) { r1->next=p; //采用尾插法将*p(data值为ai)插入L1中 r1=p; p=p->next; //p移向下一个节点(data值为bi) q=p->next; //由于头插法修改p的next域,故用q保存*p的后继节点 p->next=L2->next; //采用头插法将*p插入L2中 L2->next=p; p=q; //p重新指向ai+1的节点 } r1->next=NULL; //尾节点next置空 } 2.查找链表中倒数第k个位置上的节点(k为正整数)。若查找成功,算法输出该节点的data域的值,并返回1;否则,只返回0。 typedef struct LNode {int data; struct LNode *link; } *LinkList; int Searchk(LinkList list,int k) { LinkList p,q; int count=0; p=q=list->link; while (p!=NULL) { if (countlink; p=p->link; } if (count

数据结构习题及参考答案

习题1 一、单项选择题 1. 数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3. 树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4. 设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 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. 算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1)A.找出数据结构的合理性 B.研究算法中的输入和输出关系

C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2)A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6. 计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1)A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2)A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7. 数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8. 数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9. 数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对 10. 计算机内部数据处理的基本单位是()。 A.数据 B.数据元素 C.数据项 D.数据库

相关文档
最新文档