耿版数据结构课后作业参考答案.doc

上传人:cn****1 文档编号:562066408 上传时间:2022-12-09 格式:DOC 页数:22 大小:272.50KB
返回 下载 相关 举报
耿版数据结构课后作业参考答案.doc_第1页
第1页 / 共22页
耿版数据结构课后作业参考答案.doc_第2页
第2页 / 共22页
耿版数据结构课后作业参考答案.doc_第3页
第3页 / 共22页
耿版数据结构课后作业参考答案.doc_第4页
第4页 / 共22页
耿版数据结构课后作业参考答案.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《耿版数据结构课后作业参考答案.doc》由会员分享,可在线阅读,更多相关《耿版数据结构课后作业参考答案.doc(22页珍藏版)》请在金锄头文库上搜索。

1、数据结构课后作业参考答案浙江工商大学信电学院1 概论1.1.1 什么是数据结构?答:按照某种逻辑关系组织起来的一批数据,按一定的映象方式把它存放在计算机的存储器中,并在这些数据上定义了一个运算的集合,就叫做数据结构。1.1.2 叙述四类基本数据结构的名称和含义。答:1、集合结构:结构中的数据元素除了同属于一个集合之外无其它任何关系;2、线性结构:结构中的数据元素之间存在着一对一的线性关系;3、树形结构:结构中的数据元素之间存在着一对多的层次关系;4、图状关系:结构中的数据元素之间存在着多对多的任意关系。1.1.3 叙述算法的定义和特性。答:算法是规则的有限集合,是为了解决特定问题而规定的一系列

2、操作。算法具备以下特性:有限性、确定性、零或多个输入、一或多个输出、可行性。1.1.4 叙述算法的时间复杂度。答:算法的时间复杂度是指算法执行时间的增长率随着问题规模的增大在数量级上的变化趋势。1.1.5 叙述数据类型的概念。答:数据类型是指一组性质相同的值集合以及定义在该值集合上的一组操作的总称。1.1.6 叙述线性结构与非线性结构的差别。答:数据元素之间存在一对一线性关系的结构为线性结构;存在一对多或者多对多关系的称为非线性关系。1.1.7 叙述面向对象程序设计语言的特点。答:在面向对象程序设计语言中,借助对象描述抽象数据类型,存储结构的说明和操作函数的说明被封装在一个整体结构中。该整体结

3、构被称为类,而属于某个类的具体变量被称为对象。1.1.8 在面向对象程序设计中,类的作用是什么?答:类的概念与操作密切相关,同一种数据类型和不同操作组将组成不同的数据类型,结构说明和过程说明被统一在一个整体对象之中。其中数据结构的定义为对象的属性域,过程或函数定义在对象中,称为方法,是对对象的性能描述。1.1.9 叙述参数传递的主要方式及特点。答:参数表中的参数分为两种:第一种参数只为操作提供待处理数据,又称值参;第二种参数既能为操作提供待处理数据,也能返回操作结果,也称变量参数。1.1.10 叙述抽象数据类型的概念。答:抽象数据类型是指基于一类逻辑关系的数据类型以及定义在该类型之上的一组操作

4、。数据类型的定义取决于客观存在的一组逻辑特性,而与其在计算机内部如何表示及实现无关。1.3 计算下列程序段中x=x+1的语句频度。答:O()=O(n3)2 线性表2.1 描述以下三个概念的区别:头指针,头结点,首元素结点。头指针:在一个链表中,称指向表头结点的指针为头指针。原因:由于单链表中每个结点的存储地址是存放在其前趋结点的指针域中的,而第一个结点无前趋,因而应设一个头指针H指向第一个结点。头结点:链表中不存放实际数据的表头结点称为头结点。原因:通过增加头结点,使得在插入(删除)结点到链表时,i=1和i1时的操作保持一致,从而简化算法。首元素结点:链表中存放实际数据的第一个结点。2.2(1

5、) 在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。(2) 在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。(3) 在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋的next域指示。补充题:建立学生成绩单链表,实现对它的记录的遍历、插入和删除#include#include#include#includestruct studentint num; /*学号*/float score; /*成

6、绩*/struct student *next; /*指针域*/;#define LEN sizeof(struct student)struct student *create() /*此函数返回一个指向链表的头结点*/ struct student *head; /*指向student类型变量的指针head为头指针*/struct student *p,*tail; /*tail指向链表末尾元素,p指向新分配的结点*/float temp; /*临时数据变量*/head=NULL;do p=(struct student *)malloc(sizeof(struct student);/*

7、分配新结点*/printf(Number Score:);fflush(stdin); /*清除输入缓冲区*/scanf(%d %f,&p-num,&temp);if(p-num=0)free(p);break;p-score=temp; /*取得结点数据*/p-next=NULL;if(head=NULL)head=p;tail=p;elsetail-next=p;tail=p; /*指向尾结点*/while(p-num!=0);return(head);void display(struct student *head)struct student *p;p=head;while(p!=N

8、ULL)printf(%4d %5.1fn,p-num,p-score);p=p-next;struct student *insert(struct student *head,struct student *new)struct student *p,*q;if(head=NULL)head=new;elseif(head-num=new-num)new-next=head;head=new;/*新结点插在链首*/elsep=head;while(p-numnum&p-next!=NULL)q=p;p=p-next;if(p-numnew-num)q-next=new;new-next=p

9、;elsep-next=new;new-next=NULL;return(head);struct student *delete(struct student *head,int num)/*在头为head的单链表中将指定的学号为num的结点删除*/*算法返回新的链表的表头结点*/struct student *p1,*p2; /*设置两个指针,用以指示删除位置*/if(head=NULL) printf(nList nulln);elsep1=head;while(num!=p1-num&p1-next!=NULL)/*p1所指的结点不是要删除的结点,且其后还有结点*/p2=p1;p1=p

10、1-next;/*后移一个结点*/if(num=p1-num)/*找到了要删除的结点*/if(p1=head) head=p1-next;/*若p1所指为第一个结点,则把第二个结点的地址赋给head*/else p2-next=p1-next;/*否则将下一个结点的地址赋给前一个结点的指针域*/printf(delete:%4dn,num);free(p1);else printf(%4d not been found!n,num);return(head);void main()struct student *head,*stu;float temp;int number;printf(In

11、put records:n);head=create();display(head);stu=(struct student *)malloc(LEN);printf(Input the insert Number Score:);scanf(%d %f,&stu-num,&temp);stu-score=temp;stu-next=NULL;head=insert(head,stu);display(head);printf(nInput the number to delete:);scanf(%4d,&number);head=delete(head,number);display(he

12、ad);getch();3 栈和队列3.1 按图3.1(b)回答相关问题:答:1、依次考虑最先出栈的车厢:123,132;213,231;321;2、不能得到435612的出栈序列,因为如果4最先出栈,则321依次排列直到栈底,无论后续如何操作,1均无法在2之前出栈;可以得到135426的出栈序列,过程如下:1S1X2S3S3X4S5S5X4X2X6S6X。3.3 给出栈的两种存储结构名称,在这两种存储结构中如何判别栈空与栈满?答:1、顺序栈:栈顶指针为-1时栈为空,栈顶指针为栈规模-1时栈为满; 2、链栈:栈顶指针的指针域为空时栈为空,理论上不存在栈满的情况。补充题:用顺序栈把输入的1个字符

13、串反序输出#include#define M 10typedef struct stackchar sM;int top;StackType;int push(StackType *st,char x)if(st-top=M-1)printf(Overflow);return(0);st-top+;st-sst-top=x;return(1);char pop(StackType *st)if(st-top=-1)printf(Stack empty);return(0);return(st-sst-top-);main()StackType y;int i;char z;y.top=-1;printf(please input 10 charactersn);for(i=0;iM;i+)scanf(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号