数据结构作业解答_第1页
数据结构作业解答_第2页
数据结构作业解答_第3页
数据结构作业解答_第4页
数据结构作业解答_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章作业一、选择题1. 算法的计算量的大小称为计算的( B )。A效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于( A)A问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(C),它必须具备(B) 这三个特性。(1) A计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4一个算法应该是( B )。 A程序 B问题求解步骤的描述 C要满足五个基本特性 DA和C. 5. 下面关于算法说法错误的是( D )A算

2、法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的6. 下面说法错误的是( C ) (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A(1) B.(1),(2) C.(1),(4) D.(3)7从逻辑上可以把数据结构分为( C )两大类。A动态结构、静态结构 B顺序结构、链式结构 C线性结构、非线

3、性结构 D初等结构、构造型结构8在下面的程序段中,对x的赋值语句的频度为( D )FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1;A O(2n) BO(n) CO(n2) DO(log2n) 9程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF Aj>Aj+1 THEN Aj与Aj+1对换;其中 n为正整数,则最后一行的语句频度在最坏情况下是(D )A. O(n) B. O(nlogn) C. O(n3) D. O(n2)  二、判断题1. 数据元素是数据的最小单位。( × ) 2. 记录是数

4、据处理的最小单位。 (× ) 3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系;(× )4算法的优劣与算法描述语言无关,但与所用计算机有关。( )5健壮的算法不会因非法的输入数据而出现莫名其妙的状态。( × )6算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。(× ) 7程序一定是算法。(× ) 8数据的物理结构是指数据在计算机内的实际存储形式。( )9. 数据结构的抽象操作的定义与具体实现有关。(× ) 10. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。( 

5、5; )11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( × )三、用C语言程序完成三元组的初始化、取i号位上的值及修改i号位上的值。#include<stdio.h>#include<stdlib.h>#define ok 1#define error -1typedef int *triplet;typedef int status;status init(triplet *t,int v1,int v2,int v3)*t=(int *)malloc(3*sizeof(int); if (!(*t) return error;(*t)0

6、=v1; (*t)1=v2; (*t)2=v3; return ok; status get(triplet t,int i,int *e) if(i<1|i>3) return error; *e=ti-1 ; return ok; void main() triplet a; int i,e,e1,e2,e3;int b; printf("输入三元组的三个值:"); scanf("%d%d%d",&e1,&e2,&e3); b=init(&a,e1,e2,e3); if(b=1) printf("

7、%5d,%5d,%5dn",a0,a1,a2); else printf("创建三元组失败n"); printf("输入取得三元组元素的位置:"); scanf("%d",&i); b=get(a,i,&e); if(b=1) printf("%5dn" ,e); else printf("位置错误n"); 第二章作业一 选择题1下述哪一条是顺序存储结构的优点?( A )A存储密度大 B插入运算方便 C删除运算方便 D可方便地用于各种逻辑结构的存储表示2下面关于线性表的

8、叙述中,错误的是哪一个?( B )A线性表采用顺序存储,必须占用一片连续的存储单元。B线性表采用顺序存储,便于进行插入和删除操作。C线性表采用链接存储,不必占用一片连续的存储单元。D线性表采用链接存储,便于插入和删除操作。3线性表是具有n个( C )的有限序列(n>0)。 A表元素 B字符 C数据元素 D数据项 E信息项4若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。A顺序表 B双链表 C带头结点的双循环链表 D单循环链表5某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省

9、运算时间。A单链表 B仅有头指针的单循环链表 C双链表 D仅有尾指针的单循环链表6设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表7若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用( D )存储方式最节省运算时间。A单链表 B双链表 C单循环链表 D带头结点的双循环链表8. 静态链表中指针表示的是( C ). A 内存地址 B数组下标 C下一元素地址 D左、右孩子地址9. 链表不具有的特点是( B ) A插入、删除不需要移动元素 B可随机访问任一元素 C

10、不必事先估计存储空间 D所需空间与线性长度成正比10. 下面的叙述不正确的是( B,C )A线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。 (2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。 (3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。以上错误的是( B

11、) A(1),(2) B(1) C(1),(2),(3) D.(2)13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。A. O(0) B. O(1) C. O(n) D. O(n2) 14. 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为( C )。AO(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)15线性表( a1,a2,an)以链接方式存储时,访问第i位置元素的时间复杂性为( C )AO(i) BO(1) CO(n) DO(i-1)16非空的

12、循环单链表head的尾结点p满足( A )。Ap->link=head Bp->link=NILL Cp=NILL Dp= head17循环链表H的尾结点P的特点是(A )。 AP.NEXT:=H BP.NEXT:= H.NEXT CP:=H DP:=H.NEXT18在一个以 h 为头的单循环链中,p 指针指向链尾的条件是(A) A. p->next=h B. p->next=NULLL C. p->next->next=h D. p->data=-119完成在双循环链表结点p之后插入s的操作是( D ); A p->next:=s ; s-&g

13、t;priou:=p; p->next->priou:=s ; s->next:=p->next;B p ->next ->priou:=s; p ->next:=s; s ->priou:=p; s ->next:= p->next;C s ->priou:=p; s ->next:=p->next; p->next:=s; p->next->priou:=s ;D s->priou:=p; s->next:=p->next; p->next->priou:=s ;

14、p->next:=s;二、判断1. 链表中的头结点仅起到标识的作用。(× )2. 顺序存储结构的主要缺点是不利于插入或删除操作。( ) 3线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( )4顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。( × )5. 对任何数据结构链式存储结构一定优于顺序存储结构。(× ) 6顺序存储方式只能用于存储线性结构。(× )7集合与线性表的区别在于是否按关键字排序。( × ) 8. 所谓静态链表就是一直不发生变化的链表。(× ) 9. 线性表的特点是每个元素都有一个前驱

15、和一个后继。(× )10. 取线性表的第i个元素的时间同i的大小有关. (× ) 11. 循环链表不是线性表. (× ) 12. 线性表只能用顺序存储结构实现。(× ) 13. 线性表就是顺序存储的表。( × ) 14为了很方便的插入和删除数据,可以使用双向链表存放数据。( )15. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( × ) 16. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。 ( )  三、编写下列算法:1、 将两个单链表合并成一个单链表。 void m

16、erge(ListLink &La,ListLink &Lb)p=La->next; while(p->next) p=p->next; p->next=Lb->next; free(Lb);2、 有一个有序单链表(从小到大),表头指针为head,编写一个算法向该单链表中插入一个元素值为x的结点,使插入后该链表依然有序。void insert(LinkList &head, ElemType x) p=head; while(p->next &&p->next<x) p=p->next; s= ( L

17、inkList ) malloc( sizeof ( LNode ) ; s->data=x; s->next= p->next ; p->next =s ;3、 用算法是实现带头结点的单链表数据结点逆置。(原链表为a1,a2,an)(逆置后为:an,an-1,a2,a1) void server(LinkList &L) p=L->next; L->next=NULL;while(p) r=p->next;/将p的后继结点的地址保存在r中 p->next=L->next;/将p卸下来,每次插在L之和,第一个结点之前 L->n

18、ext=p; p=r;/还原p第三章作业1、 设队列中有A、B、C、D、E这五个元素,其中队首元素为A。如果对这个队列重复执行下列4步操作:(1) 输出队首元素;(2) 把队首元素值插入到队尾;(3) 删除队首元素;(4) 再次删除队首元素。直到队列为空为止,求得到的输出序列。ACECC(1)输出A,(2)队列为ABCDEA(3)队列为BCDEA (4)队列为CDEA重复:(1)输出C,(2)队列为CDEAC(3)队列为DEAC(4)队列为EAC重复:(1)输出E,(2)队列为EACE(3)队列为ACE(4)队列为CE重复:(1)输出C,(2)队列为CC(3)队列为C(4)队列为空得到的输出序

19、列:ACECC2、 假设以带头结点的循环链表表示队列,并且只设一个尾指针rear指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。void initqueue(LinkList &rear)/初始化队列为空队列rear= ( LinkList ) malloc( sizeof ( LNode ) ;rear->next=rear;void inqueue(LinkList &rear ,ElemType e)/入队列 s= ( LinkList ) malloc( sizeof ( LNode ) ; s->data=e; p->

20、;next=rear->next; rear->next=p; rear=p;void Delqueue(LinkList &rear ,ElemType &e)/出队列 if(rear->next=rear) printf(“队列为空”); else p=rear->next->next; rearr->next->next=p->next; free(p);第六章作业1、已知二叉树的前序序列为ABDGHCEFI和中序序列GDHBAECIF,求后序序列。2、对二叉树中的结点进行按层次顺序(每一层自左至右)的访问操作称为二叉树的层

21、次遍历,遍历所得到的结点序列称为二叉树层次序列。现已知一棵二叉树的层次序列为ABCDEFGHIJ,中序序列为DBGEHJACIF,请画出此二叉树。3、对下图所示的森林: (1)求森林的前序序列和后序序列;(2)将此森林转换为相应的二叉树; (1)此森林的前序序列: ABCDEFGHIJKLMPQRNO此森林的后序序列: BDEFCAIJKHGQRPMNOL4、假设用于通信的电文由字符集a,b,c,d,e,f,g,h中的字母构成,这8个字母在电文中出现的概率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10(1)试构造哈夫曼树。(2)写出这8个字母的哈夫曼编码。

22、哈夫曼编码图见题图根据上图可得编码表:根据上图可得编码表: a:0010b:10c:00000d:0001 e:01f:00001g:11h:00115、算法设计: 用先序遍历和中根序遍历的思想统计叶子结点的个数。解法一:先序遍历int Leaf(Bitree t)int static n=0; if(t) if(t->lchild=NULL&&t->rchild=NULL) n+; Leaf(t->lchild); Leaf(t->lchild); return n;解法一:中序遍历int n=0;void Leaf(Bitree t) if(t) Leaf(t->lchild);if(t->lchild=NULL&&t->rchild=NULL) n+; Leaf(t->lchild); /还可以用非递归的思想实现6、算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论