数据结构1-3习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

试编写程序完成: 15个学生 个学生, 3.2 试编写程序完成:有15个学生,每个学生的 信息包括学号、姓名、性别、年龄、班级和3 信息包括学号、姓名、性别、年龄、班级和3 门课程成绩,从键盘输入15个学生的信息, 15个学生的信息 门课程成绩,从键盘输入15个学生的信息,要 求打印出3门课程的总平均成绩, 求打印出3门课程的总平均成绩,以及最高分 的学生的信息(包括学号、姓名、性别、年龄、 的学生的信息(包括学号、姓名、性别、年龄、 班级、 门课程成绩、平均分)。 班级、3门课程成绩、平均分)。
判断下述计算过程是否是一个算法: 2.4 判断下述计算过程是否是一个算法: Step1: 开始 Step2: n<=0; Step3: n=n+1; 重复步骤3; Step4: 重复步骤3; 结束; Step5: 结束; 该计算过程不是一个算法, 答:该计算过程不是一个算法,因为其不满足算法的 有穷性。 有穷性。
在下面两列中,左侧是算法(关于问题规模) 2.8 在下面两列中,左侧是算法(关于问题规模) 的执行时间,右侧是一些时间复杂度。 的执行时间,右侧是一些时间复杂度。请用连 线的方式表示每个算法的时间复杂度。 线的方式表示每个算法的时间复杂度。 100n3 6n2-12n+1 1024 n+2log2n n(n+1)(n+2)/6 2n+1+100n
线 性 表 存 储 方 式
顺序存储:初始化、插入、删除、 顺序存储:初始化、插入、删除、查找运算
: 存 插入、删除 插入、
存储:初始化、插入、删除、 存储:初始化、插入、 Nhomakorabea除、查找运算
:插入、删除 插入、 存储

重点:熟练掌握顺序表和单链表上实现的各种 重点: 基本算法及相关的时间性能分析 难点: 难点:能够使用本章所学到的基本知识设计有 效算法解决与线性表相关的应用问题。 效算法解决与线性表相关的应用问题。
什么是抽象数据类型?它有什么作用? 1.6 什么是抽象数据类型?它有什么作用? 答:抽象数据类型(ADT)是指一个数学模型以及定义 抽象数据类型(ADT) 在该模型上的一组操作。 在该模型上的一组操作。抽象数据类型的定义仅取 决于它的一组逻辑特性, 决于它的一组逻辑特性,而与其在计算机内部如何 表示和实现无关。 表示和实现无关。抽象数据类型是用户定义的数据 类型,使得其使用和实现分类,提高软件的复用率。 类型,使得其使用和实现分类,提高软件的复用率。 试述算法和程序的区别。 2.1 试述算法和程序的区别。 算法是指解决问题的一种方法或一个过程, 答:算法是指解决问题的一种方法或一个过程,即由 若干条指令组成的有穷序列。 若干条指令组成的有穷序列。程序是算法用某种程 序设计语言的具体实现。 序设计语言的具体实现。算法中指令的执行必须是 有穷性的,而程序可以不满足此要求。 有穷性的,而程序可以不满足此要求。
T(n)=O(n3 ) T(n)=O(n2) T(n)=O(1) T(n)=O(n) T(n)=O(n3) T(n)=O(2n)
试述你所理解的函数参数的“值传递” 3.1 试述你所理解的函数参数的“值传递”和“地址 传递” 传递”。 值传递”即在函数参数传递时将实参赋给形参, 答:“值传递”即在函数参数传递时将实参赋给形参, 而在函数体中对形参修改后不影响实参原来值; 而在函数体中对形参修改后不影响实参原来值; 地址传递” “地址传递”即在函数参数传递时传递的是实参的 地址,在函数体中可通过地址直接对实参进行操作。 地址,在函数体中可通过地址直接对实参进行操作。 什么是指针?什么是指针的指针? 3.3 什么是指针?什么是指针的指针?它们之间有本 质上的区别吗? 质上的区别吗? 一个变量的地址称为该变量的指针。 答:一个变量的地址称为该变量的指针。指针的指针 即指向指针的指针,它们的区别是: 即指向指针的指针,它们的区别是:指针存放的是 某一数据的存放地址, 某一数据的存放地址,而指针的指针存放的是指针 的存放地址,用的是一种“二级间址”方法。 的存放地址,用的是一种“二级间址”方法。
分析下列程序段的时间复杂度: 2.6 分析下列程序段的时间复杂度: (1) (2) Int rec(int n) void main() { { int i=1,j=0,n; if(n<=1) scanf(“%d”,&n); return 1; while(i+j<=n) else { rec(n-1)*rec(nreturn rec(n-1)*rec(n-1); if(i>j) i=i+1; } else j=j+1; } } T(n)=O(2n) T(n)=O(n)
1-3章习题
1.1-1.3 见教材 1.11.4试述数据的逻辑结构与存储结构之间的区别与联系。 1.4试述数据的逻辑结构与存储结构之间的区别与联系。 试述数据的逻辑结构与存储结构之间的区别与联系 答:数据结构包括数据逻辑结构和数据物理结构两个 层次,两者是密切相关、相辅相成的。 层次,两者是密切相关、相辅相成的。 数据的逻辑结构是对数据元素之间存在的逻辑关 系的一种抽象描述; 系的一种抽象描述;数据的物理结构则为其逻辑结 构在计算机中的存储表示或实现。 构在计算机中的存储表示或实现。 一种逻辑结构可映射成不同的存储结构, 一种逻辑结构可映射成不同的存储结构,不同的 存储实现方法其算法不同,实现的效率也不同。 存储实现方法其算法不同,实现的效率也不同。
课堂练习
1、在什么情况下用顺序表比链表好? 、在什么情况下用顺序表比链表好 2、画出执行下列各行语句后各指针及链表的 示意图。 示意图。 、 L=(LinkList) malloc (sizeof(LNode));//等价于 等价于L=new LNode; 等价于 P=L; For(i=1;i<=4;i++) { P->next=(LinkList) malloc (sizeof(LNode)); P=P->next; P->data=i*2-1;} P->next=NULL; For(i=4;i>=1;i--) Ins_LinkList(L,i+1,i*2); For(i=1;i<=3;i++) Del_LinkList(L,i);
• 抽象数据类型(D,S,P) 抽象数据类型(D,S,P)
回顾
第二章知识要点: 第二章知识要点: • 算法定义及特性 • 算法效率分析
时间复杂度: 时间复杂度:用语句频度总和的数量级描述 空间复杂度: 空间复杂度:用占有存储空间的数量级描述
回顾
第三章知识要点: 第三章知识要点: • C语言重点内容: 语言重点内容:
avg1=avg1/15;avg2=avg2/15;avg3=avg3/15; cout<<endl<<"数学课的平均成绩为:"<<avg1; cout<<endl<<"数学课的平均成绩为: 数学课的平均成绩为 cout<<endl<<"该课程最高分同学信息为:"<<st[j1].no<<" "<<st[j1]. cout<<endl<<"该课程最高分同学信息为: 该课程最高分同学信息为 name<<" "<<st[j1].sex<<" "<<st[j1].age<<" "<<st[j1].cls<<" "<< st[j1].math<<" "<<st[j1].english<<" "<<st[j1].chinese; cout<<endl<<"英语课的平均成绩为:"<<avg2; cout<<endl<<"英语课的平均成绩为: 英语课的平均成绩为 cout<<endl<<"该课程最高分同学信息为:"<<st[j2].no<<" "<<st[j2]. cout<<endl<<"该课程最高分同学信息为: 该课程最高分同学信息为 name<<" "<<st[j2].sex<<" "<<st[j2].age<<" "<<st[j2].cls<<" "<< st[j2].math<<" "<<st[j2].english<<" "<<st[j2].chinese; cout<<endl<<"语文课的平均成绩为:"<<avg3; cout<<endl<<"语文课的平均成绩为: 语文课的平均成绩为 cout<<endl<<"该课程最高分同学信息为:"<<st[j3].no<<" "<<st[j3]. cout<<endl<<"该课程最高分同学信息为: 该课程最高分同学信息为 name<<" "<<st[j3].sex<<" "<<st[j3].age<<" "<<st[j3].cls<<" "<< st[j3].math<<" "<<st[j3].english<<" "<<st[j3].chinese; }
回顾
第一章知识要点: 第一章知识要点: • 基本概论:数据、数据元素、数据项、数据对象 基本概论:数据、数据元素、数据项、 • 数据结构(D,S) 数据结构(D,S)
逻辑结构:线性结构、树形结构、图形结构、 逻辑结构:线性结构、树形结构、图形结构、集合结构 存储结构:顺序存储、链式存储、索引存储、 存储结构:顺序存储、链式存储、索引存储、散列存储 运算:初始化、查找、插入、删除、 运算:初始化、查找、插入、删除、遍历等
#include<iostream.h> typedef struct { int no; char name[8]; char sex[2]; int age; char cls[14]; int math; int english; int chinese; }student; void main() { student st[15]; int i,j1=1,j2=1,j3=1,avg1=0,avg2=0,avg3=0,max1=0,max2=0,max3=0; for(i=0;i<154;i++) cout<<endl<<"请依次输入第"<<i+1<<"位同学的学号 姓名、性别、年龄、 请依次输入第"<<i+1<<"位同学的学号、 { cout<<endl<<"请依次输入第"<<i+1<<"位同学的学号、姓名、性别、年龄、 班级、数学成绩、英语成绩、语文成绩: 班级、数学成绩、英语成绩、语文成绩:"; cin>>st[i].no>>st[i].name>>st[i].sex>>st[i].age>>st[i].cls>>st[i].m ath>>st[i].english>>st[i].chinese;} for(i=0;i<15;i++) { avg1+=st[i].math;avg2+=st[i].english;avg3+=st[i].chinese; if(st[i].math>max1){ max1=st[i].math; j1=i;} if(st[i].english>max2){ max2=st[i].math; j2=i;} if(st[i].chinese>max3){ max3=st[i].math; j3=i;} }
试述你所理解的“递归” 3.4 试述你所理解的“递归”。 递归即一种在函数/过程/ 答:递归即一种在函数/过程/子程序在运行过程序 中直接或间接调用自身的编程方式。 中直接或间接调用自身的编程方式。 3.5 简述动态存储分配和静态存储分配之间的区别。 简述动态存储分配和静态存储分配之间的区别。 答:静态存储分配是指在程序运行前由编译器在编 译时分配固定的存储空间, 译时分配固定的存储空间,直到整个程序运行结 束才释放存储空间,如全局变量存储空间分配; 束才释放存储空间,如全局变量存储空间分配; 而动态存储分配则是在程序运行过程中根据需要 进行动态的分配和释放存储空间。 进行动态的分配和释放存储空间。
参数传递、结构类型、 参数传递、结构类型、指针
• 递归
直接递归、 直接递归、间接递归
• 存储分配方式
静态分配(全局静态变量区)、动态分配(堆区)、 静态分配(全局静态变量区)、动态分配(堆区)、 )、动态分配 自动分配(栈区) 自动分配(栈区)
总结
重点:了解数据、数据元素、数据对象、 重点:了解数据、数据元素、数据对象、数据结 构、数据结构的逻辑结构、数据的存储结构及抽 数据结构的逻辑结构、 象数据类型概念,熟悉C语言中指针、结构体, 象数据类型概念,熟悉C语言中指针、结构体, 学会分析时间复杂度。 学会分析时间复杂度。
相关文档
最新文档