数据结构(1,2,3章)课后题答案课件_第1页
数据结构(1,2,3章)课后题答案课件_第2页
数据结构(1,2,3章)课后题答案课件_第3页
数据结构(1,2,3章)课后题答案课件_第4页
数据结构(1,2,3章)课后题答案课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课后部分习题

答案提示授课教师:耿国华教授第一章:绪论1.2判断题(在各题后填写“√”或“×”):(1)线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。(×)(2)算法就是程序。(×)(3)在高级语言(如C或PASCAL)中,指针类型是原子类型。(√)西北大学可视化技术研究所1.3填空题:(1)变量的作用域是指

变量的有效范围

(2)抽象数据类型具有

数据抽象

信息隐蔽

的特点。(3)一种抽象类型包括

数据对象

结构关系

基本操作

。西北大学可视化技术研究所(7)在线性结构、树形结构和图结构中,数据元素之间分别存在着

一对一

一对多

多对多

的联系。(8)算法是规则的有限集合,是为解决特定问题而规定的

操作序列

。(9)算法具有

有限性

、确定性、

可行性

输入

、输出五大特性。西北大学可视化技术研究所1.4选择题(1)若需要利用形式参数直接访问修改实参值,则应将形参说明为

A

参数。

A.指针 B.值参数西北大学可视化技术研究所(2)执行下面的程序段的时间复杂度为

C

。for(inti=0;i<m;i++) for(intj=0;j<n;j++)a[i][j]=i*j;

A.O(m2) B.O(n2) C.O(m*n) D.O(m+n)

西北大学可视化技术研究所(3)执行下面程序段时,语句S的执行次数为

C

。for(inti=0;i<=n;i++)for(intj=0;j<=i;j++)S;A.n2 B.n2/2 C.(n+1)(n+2)/2 D.n(n+1)/2西北大学可视化技术研究所第二步:计算结果

for(j=2;j<=n;j++)//从x的2次方开始,到x的n次方结束{ for(k=2;k<=j;k++) { temp=temp*x;//保存x的m次方 } b[j]=a[j]*temp;//x的m次方与x的m次方的系数的乘积 temp=x; } for(i=0;i<=n;i++) sum=sum+b[i]; cout<<"多项式的值是:"<<sum<<endl;}西北大学可视化技术研究所(3)顺序表中,逻辑上相邻的元素,其物理位置

相邻。在单链表中,逻辑上相邻的元素,其物理位置

不一定

相邻。(4)在带头结点的非空单链表中,头结点的存储位置由

头指针

指示,首元素结点的存储位置由

头结点的next域

指示,除首元素结点外,其它任一元素结点的存储位置由

其直接前驱的next域

指示。西北大学可视化技术研究所2.2选择题(1)在线性表中最常用的操作是存取第i个元素及其前趋的值,可采用

A

存储方式最省时间?A.顺序表 B.带头结点的单向链表 C.带头指针的双向循环链表D.带头指针的单向循环链表E.带尾指针的单向循环链表

西北大学可视化技术研究所(2)已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。a.在P结点后插入S结点的语句序列是:

E.S->next=P->next;A.P->next=S;

b.在P结点前插入S结点的语句序列是:

H.Q=P;

L.P=L;

I.while(P->next!=Q)P=P->next;

西北大学可视化技术研究所

E.S->next=P->next;A.P->next=S;

c.在表首插入S结点的语句序列是F.S->next=L;M.L=S;。d.在表尾插入S结点的语句序列是:

L.P=L;J.while(P->next!=NULL)P=P->next;A.P->next=S;G.S->next=NULL;。供选择的语句有:A.P->next=S;B.P->next=P->next->next;C.P->next=S->next;E.S->next=P->next;F.S->next=L;G.S->next=NULL;H.Q=P;I.while(P->next!=Q)P=P->next;J.while(P->next!=NULL)P=P->next;K.P=Q;L.P=L;M.L=S;N.L=P;(5)在链表中最常用的操作是删除表中最后一个结点和在最后一个结点之后插入元素,则采用

C

最节省时间。A.头指针的单向循环链表B.双向链表C.带尾指针的单向循环链表D.带头指针双向循环链表(6)在线性表中最常用的操作是存取第i个元素及其前趋的值,可采用

A

存储方式。A.顺序表 B.单向链表 C.双向循环链表 D.单向循环链表5.写一个算法,从顺序表中删除自第i个元素开始的k个元素。算法描述:以待移动元素下标m为中心,计算应移入位置:for(m=i-1+k;m<=L->last;m++)L->elem[m-k]=L->elem[m];算法描述:要求利用现有的表A和B中的结点空间来建立新表C,可通过更改结点的next域来重新建立新的元素之间的线性关系。为保证新表递减有序可以利用头插法建立单链表的方法,只是新建表中的结点不用malloc,而只需要从A和B中选择合适的点插入到新表C中即可。合并两个有序的单链表算法演示LinkListMergeLinkList(LinkListA,LinkListB)/*将递增有序的单链表A和B合并成一个递减有序的单链表C*/{Node*pa,*pb,*smaller;LinkListC;/*将C初始置为空表,pa和pb分别指向两个单链表A和B中的第一个结点,r初值为C*/pa=A->next;pb=B->next;C=A;C->next=NULL;/*初始化操作*/10.已知有单链表表示的线性表中含有三类字符的数据元素(如字母字符,数字字符和其它字符),试编写算法来构造三个以循环链表表示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。

算法描述:只要新建三个头结点,然后在原来的单链表中依次查询,找到一类字符结点时,就摘下此结点链接到相应头结点指明的新链表中就可以实现题目的要求。算法提示:设已建立三个带头结点的空循环链表A,B,C.voidDivideList(LinkListL,LinkListA,LinkListB,LinkListC){ListNode*p=L->next,*q;ListNode*a=A,ListNode*b=B;ListNode*c=C;while(p){if(p->data>='a'&&p->data<='z'||p->data>='A'&&p->data<='Z'){q=p;//保存字母结点位置p=p->next;//指向下一结点}elseif(p->data>='0'&&p->data<='9'){//分出数字结点第三章限定性线性表-----栈和队列1、按书上图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:(1)如进站的车厢序列为123,则可能得到的出站车厢序列是什么? 答案:123132213231321(2)如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。(即写出以“S”表示进站,以“X”表示出站的栈操作序列)。答案:435612不可以原因(1)S:1234X:43 (2)S:5X:5 (3)S:6X:6 (4)X:21 135426可以 原因(1)S:1X:1 (2)S:23X:3 (3)S:45X:54 (4)X:2 (5)S:6X:6

3、给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判断栈空和栈满? 答案:链栈和顺序栈链栈:栈空:头指针为空:即 if(head->next==NULL) 栈满:结点存储空间申请失败 顺序栈:栈空:栈下标小于零:即 if(stack->top<0) 栈满:栈下标大于栈空间MAX:即 if(stack->top>MAX)

4、按照四则运算加、减、乘、除和幂(↑)运算优先关系的惯例,画出对下列算术表达式求值时运算数栈和运算符栈的变化过程: A-B*C/D+E↑F答案:

ABC-*‘/’<=optr(‘*’)T(1)=B*C‘+’<=optr(‘/’)T(2)=T(1)/DA-DT(1)/AT(2)-T(3)FE‘+’<=optr(‘-’)T(3)=A-T(2)+↑右边界‘#’<=optr(‘↑’)T(4)=E↑FT(3)T(4)+右边界‘#’<=optr(‘+’)T(5)=T(3)+T(4)T(5)8、要求循环队列不损失一个空间全部都能得到利用,设置一个标志域,以tag为0或1来区分头尾指针相同时队列状态的空与满,试编写此结构相应的入队与出队算法。入队操作:

intenterqueue(seqqueue*q,elementx){ if(q->rear%MAXSIZE==q->front&&tag==1) /*队列已满 return(FALSE); q->element[q->rear]=x;/*装元素*/ q->rear=(q->rear+1)%MAXSIZE;

if(q->rear%MAXSIZE==q->front)/*判断并设置 标志位tag*/ tag=1; return(true);}出队操作:Intdeletequeue(seqqueue*q,element*x) { if(q->front==q->rear&&tag==0) return(FALSE); *x=q->element[q->front]; q->front=(q->front+1)%MAXSIZE;

if(q->front==q->rear)tag==0;/*设标志tag*/

return(true); }9、设4个元素1、2、3、4依次进栈,而出栈操作可随时进行(进出栈可任意交错进行,但要保证进栈不破环1、2、3、4的相对次序,)请写出所有不可能的和可能的出栈次序。所有可能的:1234124313241432213421432314234124313214 324134214321所有不可能的:1342142324133124 3142341243124213 42314123413212、简述以下算法的功能(其中栈和队列的元素类型均为int)Vo

温馨提示

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

评论

0/150

提交评论