ImageVerifierCode 换一换
格式:DOCX , 页数:69 ,大小:418.06KB ,
资源ID:2864072      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2864072.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构用C语言描述课后答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构用C语言描述课后答案.docx

1、数据结构 用C语言描述 课后答案第一章 绪论课堂习题1、试写一算法,自大到小依次输出顺序读入的三个整数X,Y和Z的值。【解答】一解:IF XY XY; IF YZ YZ; IF XY XY; 此算法最坏情况下比较3次,移动(即赋值9次)二解: IF XY TEMP=X;X=Y;Y=TEMP; IF YTEMP Y=TEMP ELSE Y=X;X=TEMP; 此算法最坏情况下比较3次,移动7次三解: IF XZ XY ELSE XZ; ELSE IF XZ XZ; IF YZ Y-Z; 此算法最坏情况下比较3次,移动6次2、抽象数据类型三元组的定义、表示和实现【解答】抽象数据类型三元组的定义已经

2、给出(见教材12页),要求设计实现三元组基本操作的演示程序。#include #include typedef int ElemType;typedef ElemType *Triplet;typedef int Status;#define OK 1#define ERROR 0#define OVERFLOW -2Status InitTriplet(Triplet *T)ElemType v1,v2,v3;*T=(ElemType *)malloc(3*sizeof(ElemType);if (*T=0) return(OVERFLOW);scanf(%d,%d,%d,&v1,&v2,&

3、v3);(*T)0=v1; (*T)1=v2; (*T)2=v3;Status DestroyTriplet(Triplet *T)free(*T);*T=NULL; Status Get(Triplet T,int i,ElemType *e)if (i3) return ERROR;*e=Ti-1; return OK; Status Put(Triplet T,int i,ElemType e)if (i3) return ERROR;(*T)i-1=e; return OK;Status IsAscending(Triplet T)return(T0T1)&(T1T1)&(T1T2);

4、Status Max(Triplet T,ElemType *e)*e=(T0=T1?(T0=T2)?T0:T2):(T1=T2)?T1:T2);return OK;Status Min(Triplet T,ElemType *e)*e=(T0=T1?(T0=T2)?T0:T2):(T1=T2)?T1:T2);return OK;void main()Triplet T;ElemType e;int select,i;printf(请输入三个数,建立一个三元组:n);if (InitTriplet(&T)=OVERFLOW) printf(存储空间分配失败,退出程序n);else do pri

5、ntf(1:取三元组第I个元素n); printf(2:修改三元组第I个元素n); printf(3:判断三元组元素是否递增n); printf(4:判断三元组元素是否递减n); printf(5:取三元组最大元n); printf(6:取三元组最小元n); printf(0:结束n); scanf(&d,&select); switch(select) case 1: printf(ni=); scanf(%d,&i); if (Get(T,i,&e)=ERROR) printf(I值输入不合法n); else printf(第I个元素的值为%dn,e); break; case 2: pr

6、intf(ni=); scanf(%d,&i); printf(ne=); scanf(%d,&e); if (Put(T,i,e)=ERROR)p printf(I值输入不合法n); else printf(新三元组为:%4d%4d%4dn,T0,T1,T2); break; case 3: if (IsAscending(T)=1) printf(三元组递增有序n); else printf(三元组非递增n); break; case 4: if (IsDescending(T)=1) printf(三元组递减有序n); else printf(三元组非递减n); break; case

7、5: Max(T,&e); printf(三元组的最大元为%dn,e); break; case 6: Min(T,&e); printf(三元组的最小元为%dn,e); break; case 0: printf(操作结束n); break; default: printf(选择出错,请输入数字(0-6)n); while (select!=0); DestroyTriplet(&T); 课后练习一、问答题1. 什么是数据结构?2. 叙述四类基本数据结构的名称与含义。3. 叙述算法的定义与特性。4. 叙述算法的时间复杂度。5. 叙述数据类型的概念。6. 叙述线性结构与非线性结构的差别。7.

8、叙述面向对象程序设计语言的特点。8. 在面向对象程序设计中,类的作用是什么?9. 叙述参数传递的主要方式及特点。10. 叙述抽象数据类型的概念。二、判断题(在各题后填写“”或“”)1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。( )2. 算法就是程序。( )3. 在高级语言(如C或 PASCAL)中,指针类型是原子类型。( )三、计算下列程序段中X=X+1的语句频度for(i=1;i=n;i+) for(j=1;j=i;j+)for(k=1;k=j;k+)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+(1+2+n)=n(n+1)(

9、n+2)/6四、试编写算法,求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+anxn的值Pn(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入ai(i=0,1,n),x和n,输出为Pn(x0)。通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递。(2)通过全局变量隐式传递。试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出【解答】(1)通过参数表中的参数显式传递 优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置

10、性强。 缺点:形参须与实参对应,且返回值数量有限。(2)通过全局变量隐式传递 优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue() int i,n;float x,a,p; printf(“nn=”); scanf(“%f”,&n); printf(“nx=”); scanf(“%f”,&x);for(i=0;in;i+) scanf(“%f ”,&ai); /*执行次数:n次 */ p=a0; for(i=1;i=n;i+) p=p+ai*x; /*执行次数:n次*/ x=x*x;prin

11、tf(“%f”,p); 算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a , float x, int n) float p,s;int i;p=x; s=a0;for(i=1;iPRIOR;因此可直接将*P删除掉,其时间复杂度为O(1); 在单循环链表中,可从P结点依次扫描到其前驱结点,故也能删除掉该结点,其时间复杂度为O(N)。2、下述算法的功能是什么?LINKLIST DEMO(LINKLIST L)其中L为带头指针的单链表 LISTNODE *Q,*P; IF (L&L-NEXT) Q=L;L=L-NEXT;P=L; WHIL

12、E(P-NEXT) P=P-NEXT; P-NEXT=Q;Q-NEXT=NULL; RETURN L 【解答】 当L是空链表或仅有一个结点时,L不变; 当L有两个或两个以上结点时,将第一个结点移至链表最后,关指针指向原第二个结点。3、试分别用顺序表和单链表作为存储结构,实现线性表的就地逆置。【解答】 顺序表 VOID REVERSELIST(SQLIST *L) DATATYPE T; INT I,J; FOR(I=0;ILENGTH/2-1;I+) J=L-LENGTH-1-I; T=L-ELEMI; L-ELEMI=L-ELEMJ; L-ELEMJ=T; 单链表 VOID REVERSELIST(LINKLIST *L) LNODE *P,*Q; P=L-NEXT; L-NEXT=NULL; WHILE(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1