当前位置:文档之家› 电大数据结构形成性考核册答案(作业1-4)

电大数据结构形成性考核册答案(作业1-4)

电大数据结构(本)考核作业答案作业1一、单项选择题1.C 2.D 3.B 4.C 5.D 6.C 7.B 8.C 9.A 10.B11.C 12.D 13.C 14.A 15.B 16.C 17.C 18.B 19.B 20.D二、填空题1.n-i+12.n-i3.集合线性结构树形结构图状结构4.物理结构存储结构5.线性结构非线性结构6.有穷性确定性可形性有零个或多个输入有零个或多个输出7.图状结构8.树形结构9.线性结构10.n-1 O(n)11.s->next=p->next;12.head13.q->next=p->next;14.p->next=head;15.单链表16.顺序存储链式存储17.存储结构18.两个直接后继直接前驱尾结点头结点19.头结点的指针指向第一个结点的指针20.链式链表三、问答题1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。

数据在计算机中的存储表示称为数据的存储结构。

可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。

尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。

采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。

2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。

答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,,要求内存中存储单元的地址必须是连续的。

优点:一般情况下,存储密度大,存储空间利用率高。

缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。

链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。

优点:插入和删除元素时很方便,使用灵活。

缺点:存储密度小,存储空间利用率低。

3.什么情况下用顺序表比链表好?答:顺序表适于做查找这样的静态操作,链表适于做插入和删除这样的动态操作。

如果线性表的变化长度变化不大,且其主要操作是查找,则采用顺序表;如果线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。

4.解释头结点、第一个结点(或称首元结点)、头指针这三个概念的区别?答:头结点是在链表的开始结点之前附加的一个结点;第一个结点(或称首元结点)是链表中存储第一个数据元素的结点;头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。

5.解释带头结点的单链表和不带头结点的单链表的区别。

答:带头结点的单链表和不带头结点的单链表的区别主要体现在其结构上和算法操作上。

在结构上,带头结点的单链表,不管链表是否为空,均含有一个头结点,不带头结点的单链表不含头结点。

在操作上,带头结点的单链表的初始化为申请一个头结点。

无论插入或删除的位置是地第一个结点还是其他结点,算法步骤都相同。

不带头结点的单链表,其算法步骤要分别考虑插入或删除的位置是第一个结点还是其他结点。

因为两种情况的算法步骤不同。

四、程序填空题1.(1)p->data=i(2)p->next=NULL(3)q->next=p(4)q=p2.(1)head=p(2)q=p(3)p->next=NULL(4)p->next=q->next(5)q->next=p3.(1)p=q->next(2)q->next=p->next五、完成:实验1――线性表根据实验要求(见教材P201-202)认真完成本实验,并提交实验报告。

作业2答案(本部分作业覆盖教材第3-5章的内容)一、单项选择题1.C 2.B 3.A 4.C 5.B 6.A 7.B 8.C 9.A 10.C11.B 12.C 13.B 14.B 15.A 16.C 17.B 18.A 19.C 20.D21.B 22.D 23.C 24.B 25.D 26.A 27.C 28.D 29.D 30.C 31.A 32.D二、填空题1.后进先出2.下一个3.增1 增14.假上溢5.栈是否满s->top=MAXSIZE-1 栈顶指针栈顶对应的数组元素栈是否空s->top=-1 栈顶元素修改栈顶指针6.bceda7.终止条件递归部分8.LU->front==LU->rear9.运算符操作数ab+c/fde/--10.s->next=h;11.h=h->next;12.r->next=s;13.f=f->next;14.字符15.顺序存储方式链式存储方式16.0 空格字符的个数17.特殊稀疏18.()(())219.((d,e,f))20.串长度相等且对应位置的字符相等21.i(i-1)/2+j22.行下标、列下标、非零元素值三、问答题1.简述栈和一般线性表的区别。

答:栈是一种先进后出的线性表,栈的插入和删除操作都只能在栈顶进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。

2.简述队列和一般线性表的区别。

队列是一种先进先出的线性表,队列的插入只能在队尾进行,队列的删除只能在队头进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。

3.链栈中为何不设头结点?答:因为链栈只在链头插入和删除结点,不可能在链表中间插入和删除结点,算法实现很简单,所以一般不设置头结点。

4.利用一个栈,则:(1)如果输入序列由A,B,C组成,试给出全部可能的输出序列和不可能的输出序列。

(2)如果输入序列由A,B,C,D组成,试给出全部可能的输出序列和不可能的输出序列。

答:(1)栈的操作特点是后进先出,因此输出序列有:A入,A出,B入,B出,C入C出,输出序列为ABC。

A入,A出,B入,C入,C出,B出,输出序列为ACB。

A入,B入,B出,A出,C入,C出,输出序列为BAC。

A入,B入,B出,C入,C出,A出,输出序列为BCA。

A入,B入,C入,C出,B出,A出,输出序列为CBA。

由A,B,C组成的数据项,除上述五个不同的组合外,还有一个C,A,B组合。

但不可能先把C出栈,再把A出栈,(A不在栈顶位置),最后把B出栈,所以序列CAB不可能由输入序列A,B,C 通过栈得到。

(2)按照上述方法,可能的输出序列有:ABCD,ABDC,ACBD,ACDB,ADCB,BACD,BADC,BCAD,BCDA,BDCA,CBAD,CBDA,CDBA,DCBA。

不可能的输出序列有:DABC,ADBC,DACB,DBAC,BDAC,DBCA,DCAB,CDAB,CADB,CABD5.用S表示入栈操作,X表示出栈操作,若元素入栈顺序为1234,为了得到1342出栈顺序,相应的S和X操作串是什么?答:应是SXSSXSXX。

各操作结果如下:S 1入栈X 1出栈输出序列:1S 2入栈S 3入栈X 3出栈输出序列:13S 4入栈X 4出栈输出序列:134X 2出栈输出序列:13426.有5个元素,其入栈次序为:A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先的次序有哪几个?答:从题中可知,要使C第一个且D第二个出栈,应是A入栈,B入栈,C入栈,C出栈,D入栈。

之后可以有以下几种情况:(1)B出栈,A出栈,E入栈,E出栈,输出序列为:CDBAE。

(2)B出栈,E入栈,E出栈,A 出栈,输出序列为CDBEA。

(3)E入栈,E出栈,B出栈,A出栈,输出序列为CDEBA所以可能的次序有:CDBAE,CDBEA,CDEBA7.写出以下运算式的后缀算术运算式⑴3x2+x-1/x+5⑵(A+B)*C-D/(E+F)+G答;对应的后缀算术运算式⑴ 3x2^*x+1x/-5+⑵ AB+C*DEF+/-G+8.简述广义表和线性表的区别和联系。

答:广义表是线性表的的推广,它也是n(n>0)个元素a1,a2…a i…a n的有限序列,其中a i或者是原子或者是一个广义表。

所以,广义表是一种递归数据结构,而线性表没有这种特性,线性表可以看成广义表的特殊情况,当a i都是原子时,广义表退化成线性表。

四、程序填空题1.(1)q->front->next=p->next;(2)free(p);(3)q->rear=q->front五、综合题1.答:出队序列是e2,e4,e3,e6,e5,e1的过程:⑴ e1入栈(栈底到栈顶元素是e1)⑵ e2入栈(栈底到栈顶元素是e1,e2)⑶ e2出栈(栈底到栈顶元素是e1)⑷ e3入栈(栈底到栈顶元素是e1,e3)⑸ e4入栈(栈底到栈顶元素是e1,e3,e4)⑹ e4出栈(栈底到栈顶元素是e1,e3)⑺ e3出栈(栈底到栈顶元素是e1)⑻ e5入栈(栈底到栈顶元素是e1,e5)⑼ e6入栈(栈底到栈顶元素是e1,e5,e6)⑽ e6出栈(栈底到栈顶元素是e1,e5)⑾ e5出栈(栈底到栈顶元素是e1)⑿ e1出栈(栈底到栈顶元素是空)栈中最多时有3个元素,所以栈S的容量至少是3。

2.算法设计如下:/*只有一个指针rear的链式队的基本操作*/#include <stdio.h>typedef char elemtype;struct node /*定义链队列结点*/{elemtype data;struct node *next;};typedef struct queue /*定义链队列数据类型*/{struct node *rear;} LinkQueue;void initqueue(LinkQueue *Q)/*初始化队列*/{Q=(struct queue *)malloc(sizeof(struct queue));Q->rear=NULL;}void enqueue(LinkQueue *Q,elemtype x) /*入队算法*/{struct node *s,*p;s=(struct node *)malloc(sizeof(struct node));s->data=x;if (Q->rear==NULL) /*原为空队时*/{Q->rear=s;s->next=s;}else /*原队不为空时*/{p=Q->rear->next; /*p指向第一个结点*/Q->rear->next=s; /*将s链接到队尾*/Q->rear=s; /*Q->rear指向队尾*/s->next=p;}}void delqueue(LinkQueue *Q) /*出队算法*/{struct node *t;if (Q->rear==NULL){printf("队列为空!\n");return(0);}else if (Q->rear->next==Q->rear) /*只有一个结点时*/{t=Q->rear;Q->rear=NULL;}else /*有多个结点时*/{t=Q->rear->next; /*t指向第一个结点*/Q->rear->next=t->next; /*引成循环链*/}free(t);}elemtype gethead(LinkQueue *Q) /*取队首元素算法*/{if (Q->rear==NULL)printf("队列为空!\n");elsereturn(Q->rear->next->data);}int emptyqueue(LinkQueue *Q) /*判断队列是否为空算法*/{if (Q->rear==NULL) return(1); /*为空,则返回true*/ else return(0); /*不为空,则返回flase*/ }void dispqueue(LinkQueue *Q) /*显示队列中元素算法*/ {struct node *p=Q->rear->next; printf("队列元素:"); while (p!=Q->rear) { printf("%c ",p->data); p=p->next; }printf("%c\n",p->data); }六、完成:实验2――栈、队列、递归程序设计根据实验要求(见教材P 203)认真完成本实验,并提交实验报告。

相关主题