山东大学数据结构第1-3章作业

合集下载

数据结构1-3习题答案

数据结构1-3习题答案

试编写程序完成: 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. 第一题要求实现一个线性表的插入操作。

线性表是一种常用的数据结构,它的特点是元素之间存在一对一的关系。

要实现插入操作,首先需要定义线性表的数据结构,可以使用数组或链表来实现。

然后,根据插入位置,将插入位置之后的元素依次后移,为要插入的元素腾出空间。

最后,将要插入的元素放入插入位置。

2. 第二题要求实现一个栈的压栈和出栈操作。

栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表来实现。

压栈操作就是将元素放入栈顶,出栈操作就是将栈顶元素取出并删除。

要实现这两个操作,可以使用一个指针来指示栈顶位置,每次压栈时将指针加一,出栈时将指针减一。

需要注意的是,栈满时不能再进行压栈操作,栈空时不能进行出栈操作。

3. 第三题要求实现一个队列的入队和出队操作。

队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表来实现。

入队操作就是将元素放入队尾,出队操作就是将队头元素取出并删除。

与栈不同的是,队列需要维护队头和队尾两个指针。

每次入队时将元素放入队尾,并将队尾指针后移一位;出队时将队头元素取出,并将队头指针后移一位。

需要注意的是,队列满时不能再进行入队操作,队列空时不能进行出队操作。

4. 第四题要求实现一个栈的括号匹配算法。

括号匹配是一种常见的应用场景,例如编程语言中的括号匹配。

要实现这个算法,可以使用栈来辅助。

遍历字符串中的每个字符,如果是左括号,则将其压入栈中;如果是右括号,则将栈顶元素取出并判断是否与右括号匹配。

如果匹配,则继续遍历下一个字符;如果不匹配,则说明括号不匹配,返回错误。

最后,如果栈为空,则说明括号匹配成功;如果栈不为空,则说明括号不匹配,返回错误。

5. 第五题要求使用栈实现一个逆波兰表达式的计算器。

数据结构第一章课后习题与答案资料

数据结构第一章课后习题与答案资料

数据结构第一章课后习题与答案资料1.什么是数据结构?答:数据结构是指数据对象以及数据对象之间的关系、操作和约束的一种逻辑结构。

它关注如何将数据以及数据之间的关系组织起来,以便更高效地进行操作和使用。

2.数据结构的分类有哪些?答:数据结构可以分为线性数据结构和非线性数据结构。

线性数据结构包括数组、链表、栈和队列;非线性数据结构包括树和图。

3.什么是算法?答:算法是指解决特定问题的一系列步骤和规则。

它可以描述为一个有限的指令集,用于将输入数据转换为输出结果。

4.算法的特征有哪些?答:算法具有以下特征:•输入:算法必须有输入,可以是零个或多个。

•输出:算法必须有输出,可以是零个或多个。

•有穷性:算法必须在有限步骤内结束。

•确定性:算法的每一步骤必须明确且无歧义。

•可行性:算法的每一步骤必须可行,即可以执行。

5.算法的时间复杂度是什么?如何表示时间复杂度?答:算法的时间复杂度是指算法执行所需的时间。

它通常用大O符号表示。

常见的时间复杂度有O(1)、O(n)、O(n^2)等。

6.算法的空间复杂度是什么?如何表示空间复杂度?答:算法的空间复杂度是指算法执行所需的额外空间。

它通常用大O符号表示。

常见的空间复杂度有O(1)、O(n)、O(n^2)等。

7.什么是数据的逻辑结构?答:数据的逻辑结构是指数据对象之间的关系。

常见的逻辑结构有线性结构、树形结构和图形结构。

8.什么是数据的存储结构?答:数据的存储结构是指数据在计算机内存中的表示方式。

常见的存储结构有顺序存储结构和链式存储结构。

9.顺序存储结构和链式存储结构有什么区别?答:顺序存储结构将数据存储在一块连续的内存空间中,可以随机访问元素,但插入和删除操作需要移动大量元素。

链式存储结构将数据存储在不连续的内存空间中,通过指针相连,插入和删除操作只需要修改指针,但访问元素需要遍历链表。

10.数组和链表的区别是什么?答:数组是一种顺序存储结构,元素在内存中连续存储,可以通过下标直接访问元素;链表是一种链式存储结构,元素在内存中不连续存储,通过指针相连。

2020年山东大学网络教育数据结构作业及答案

2020年山东大学网络教育数据结构作业及答案

2020年山东大学数据结构课后作业答案山东大学继续(网络)教育学院---数据结构课后作业答案一、单选题(共20题,50.0分)1、在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为()。

A、O(n)B、O(n/2)C、O(1)D、O(n2)我的答案:A得分:2.5分2、带头结点的单链表first为空的判定条件是:()。

A、first == NULL;B、first->link == NULL;C、first->link == first;D、first != NULL;我的答案:B得分:2.5分3、从逻辑上可以把数据结构分为()两大类。

A、动态结构、静态结构B、顺序结构、链式结构C、线性结构、非线性结构D、初等结构、构造型结构我的答案:B得分:2.5分4、在系统实现递归调用时需利用递归工作记录保存实际参数的值。

在传值参数情形,需为对应形式参数分配空间,以存放实际参数的副本;在引用参数情形,需保存实际参数的(),在被调用程序中可直接操纵实际参数。

A、空间B、副本C、返回地址D、地址我的答案:D得分:2.5分5、以下数据结构中,哪一个是线性结构()。

A、广义表B、二叉树C、稀疏矩阵D、串6、以下属于逻辑结构的是()。

A、顺序表B、哈希表C、有序表D、单链表我的答案:C得分:2.5分7、对于长度为9的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长度为()的值除以9。

A、20B、18C、25D、22我的答案:C得分:2.5分8、在有向图中每个顶点的度等于该顶点的()。

A、入度B、出度C、入度与出度之和D、入度与出度之差我的答案:C得分:2.5分9、在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。

A、起泡排序B、希尔排序C、归并排序D、快速排序我的答案:C得分:2.5分10、当α的值较小时,散列存储通常比其他存储方式具有()的查找速度。

数据结构1-4章习题答案

数据结构1-4章习题答案

第一章绪论一、选择题1.D2.C3.C4.B5.D6.C7.D8.C9.A 10.D11.D 12.B二、填空题1. 逻辑结构存储结构运算2. 集合结构线性结构树形结构图状结构3. 有穷性. 确定性. 可行性. 输入. 输出4. 顺序存储. 链式存储5. 数据元素6. 线性结构非线性结构三、简答题1. 尽管算法的含义与程序非常相似,但两者还是有区别的。

首先,一个程序不一定满有穷性,因为它不是一个算法。

其次,程序中的指令必须是计算机可以执行的,而算法中的指令却无此限制。

如果一个算法采用机器可执行的语言来书写,那么它就是一个程序。

2. 数据结构是指数据对象以及该数据对象集合中的数据元素之间的相互关系(数据元素的组织形式)。

例如:队列的逻辑结构是线性表(先进后出);队列在计算机中既可以采用顺序存储也可以采用链式存储;队列可进行删除数据元素. 插入数据元素. 判断是否为空队列,以及队列置空等操作。

3. 数据元素之间的逻辑关系,也称为数据的逻辑结构。

数据元素以及它们之间的相互关系在计算机存储器内的表示(又称映像)称为数据的存储结构,也称数据的物理结构。

4. 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或者多个操作。

此外,一个算法还具有下列5个特性:(1)有穷性:一个算法必须在执行有穷步之后结束,即算法必须在有限时间内完成。

(2)确定性:算法中每一步必须有明确的含义,不会产生二义性。

并且,在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出。

(3)可行性:一个算法是能执行的,即算法中的每一步都可以通过已经实现的基本运算执行有限次得以实现。

(4)输入:一个算法有零个或者多个输入,它们是算法开始时对算法给出的初始量。

(5)输出:一个算法有一个或者多个输出,它们是与输入有特定关系的量5. 举例说明四种基本结构的区别:集合: 数据元素之间无任何关系,如集合A={x,5,t,&};线性结构: 数据元素之间存在一个对一个的关系,如线性表L=(2,3,4,5,7,10);树形结构: 数据元素之间存在一个对多个的关系,如文件系统目录管理;图状结构: 数据元素之间存在多个对多个的关系,如教学计划课程安排顺序图。

数据结构第1-3章作业参考答案

数据结构第1-3章作业参考答案

数据结构第1~3章作业参考答案【1.4】【解法一】⑴抽象数据类型复数:ADT Complex{数据对象:D={ci|ci∈R, i=1,2, 其中R为实数集}数据关系:R={<c1,c2>| ci∈D, i=1,2, 其中c1为复数实部, c2为复数虚部}基本操作:InitComplex (&C,v1,v2)操作结果:构造一个复数C,元素c1, c2分别被赋以参数v1, v2的值。

DestroyComplex(&C)初始条件:复数C已存在。

操作结果:销毁复数C。

GetReal(C, &e)初始条件:复数C已存在。

操作结果:用e返回复数C实部的值。

Get Imaginary(C, &e)初始条件:复数C已存在。

操作结果:用e返回复数C虚部的值。

SetReal(&C, e)初始条件:复数C已存在。

操作结果:用e更新复数C实部的值。

Set Imaginary(&C, e)初始条件:复数C已存在。

操作结果:用e更新复数C虚部的值。

AdditionComplex (&C, C1, C2)初始条件:复数C1,C2已存在。

操作结果:复数C1与复数C2相加,用复数C返回其和。

SubstractComplex(&C, C1, C2)初始条件:复数C1,C2已存在。

操作结果:复数C1减去复数C2,用复数C返回其差。

MultipleComplex(&C, C1, C2 )初始条件:复数C1,C2已存在。

操作结果:复数C1与复数C2相乘,用复数C返回其积。

DividedComplex(&C, C1, C2)初始条件:复数C1,C2已存在,且C2≠0。

操作结果:复数C1除以复数C2,用复数C返回其商。

ModulusComplex(C, &e)初始条件:复数C已存在。

操作结果:求复数C的模,用e返回。

ConjugateComplex(&C, C1)初始条件:复数C1已存在。

数据结构第1章习题解答

数据结构第1章习题解答

第1章习题解答1.1什么是数据结构?一个数据结构结构的二元组定义形式是什么样的?举例解释其含义。

[解答]概括地说,数据结构是互相有关联的数据元素的集合。

也就是说,数据结构是由某个数据元素的集合和该集合中的数据元素之间的关系组成的,因此数据结构可以用一个二元组来表示。

例如,B=(D,R),其中D是某一数据元素的集合,R是D上的关系的有限集。

R所表示的是集合D的数据元素之间的逻辑关系,它表示的可能是数据元素之间客观存在的某种联系,也可能是为了处理问题的需要而人为组织的数据元素之间的某种关系,因此,称之为数据的逻辑结构。

例如,一个农历节气表,就构成了一个数据结构,其数据元素是一年的农历二十四节气,数据元素之间的关系是节气的时间先后关系。

又如,一个某年级学生的成绩排序表,也是一个数据结构,其数据元素是包含成绩项的该年级的学生记录,数据元素之间的关系是学生之间的成绩高低关系。

为了在计算机中进行数据处理,必须把从实际问题中抽象出来的数据的逻辑结构映象到计算机的存储器中,即要把抽象出来的数据元素集合D 和数据元素之间的关系存储到计算机的存储器中,称之为数据的物理结构或存储结构,它是数据的逻辑结构在计算机中的表示。

1.2假设R是集合M上的一个关系,R的定义是什么?对实际问题而言,其含义是什么?[解答]如果R是对集合M自身的笛卡尔积所取的一个子集,那么我们就说“R是集合M上的一个关系”。

对实际问题而言,它表示的是集合M中元素的某种相关性。

例如,对于参加一个羽毛球比赛的运动员集合,可以用一个二元关系表示出各场比赛的胜负关系。

对于一组课程的集合,可以用一个二元关系表示出各门课程之间的先修和后续关系等等。

1.3设有集合M={d1,d2,d3,d4,d5}上的一个关R={(d1,d2),(d2,d4),(d4,d5),(d2,d5),(d1,d4),(d1,d5),(d3,d5),(d1,d3)},试说明关系R具有什么样的性质。

山大-数据结构习题

山大-数据结构习题

第3章数据结构3.1数据结构的基本概念一、部分例题及解题思路选择题1.数据结构是指()。

A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。

A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构3.树形结构是数据元素之间存在一种()。

A.一对一关系B.多对多关系C.多对一关系D.一对多关系4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。

for(i=1; i<=n; i++)for(j=i; j<=n; j++)x++;A.O(1)B.O(2n)C.O(n)D.O(3n)5.算法分析的目的是(1),算法分析的两个主要方面是(2)。

(1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。

(1) A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法(2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性C.确定性,有穷性和稳定性D.易读性,稳定性和安全性7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。

A.低B.高C.相同D.不好说8.数据结构作为一门独立的课程出现是在()年。

A.1946B.1953C.1964D.19689.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。

A.正确B.错误C.前半句对,后半句错D.前半句错,后半句对10.计算机内部数据处理的基本单位是()。

A.数据B.数据元素C.数据项D.数据库填空题1.数据结构按逻辑结构可分为两大类,分别是______________和_________________。

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

第一章作业第章作试编个递归数来输个素的 5. 试编写一个递归函数,用来输出n 个元素的所有子集。

例如,三个元素{a, b, c} 的所有子集是:{ }(空集),{a}, {b}, {c}, {a, b}, {a, c}, {,}{,,}b, c} 和a, b, c。

基本思想:用一个一维数组x[1:n]表示大小为n的数组的一个子集。

如果第j个元素包含在子集中,那么x[j]=1 ,否则x[j]=0;x[j]0例如原数组为{a,b},那么他的子集为{0,0},{0,1},{1,0},{1,1}。

分别对应子集{Ø},{}{}{}{b},{a},{a,b}.函数实现:#include <iostream.h>// 定义全局变量,n在主函数种初始化//定义全局变量在主函数种初始化int x[20], // 子集向量,假设大小为20n; // 数组元素个数void Subsets(int i,int n){// 输出数组a[i:n].的所有子集只有[]在每次递归调用时改变[],被确定为了或// x[i:n] 在每次递归调用时改变,x[1:i-1],已经被确定为了0 1 if (i == n) {// x[n] 可以是0或1// 输出不包含元素n的子集x[n] 0;x[n]=0;for (int j = 1; j <= n; j++)cout << x[j] << " ";cout << endl;cout<<endl;//输出包含元素n的子集x[n] = 1;[]1for (j = 1; j <= n; j++)cout << x[j] << " ";cout << endl;return;// 子集中不包含元素i的情况x[i] = 0;// 递归调用产生不含有元素i的所有子集Subsets(i+1,n);//子集中包含元素i的情况x[i] 1;x[i]=1;//递归调用产生含有元素i的所有子集Subsets(i+1,n);Subsets(i+1n);}#include <iostream>int x[100]; // 子集向量,假设大小为100int x[100];//template <class T>void Subsets(int i ,int n ,T a[]){// 输出数组a[i:n].的所有子集{//a[i:n]// 只有x[i:n] 在每次递归调用时改变,x[1:i-1],已经被确定为了0 或1 if (i == n) {// x[n] 可以是0或1//// 输出不包含元素n的子集x[n] = 0;int temp=0;for (int j = 1; j <= n; j++)f(){ if(x[j]!=0) {cout << a[j] << " ";temp=1;}} if(temp==0)cout<<"空集";cout << endl;输出包含元素的子集//nx[n] = 1;for (j = 1; j <= n; j++) { if(x[j]!=0) cout << a[j] << " ";} cout << endl;cout<<endl;return;}// 子集中不包含元素i的情况x[i] = 0;// 递归调用产生不含有元素i的所有子集Subsets(i+1,n,a);//子集中包含元素i的情况x[i] 1;x[i]=1;//递归调用产生含有元素i的所有子集Subsets(i+1,n,a);Subsets(i+1n a);}void main(void){cout<<"输入数组大小n=";int n;;cin>>n;while(n>100){cout<<"请输入一个在1到100内的数"<<endl;cin>>n;}cout<<"输入"<<n<<"个数组元素:";输个数元素;char y[n+1];//实例化for(int i=1;i<=n;i++)i[i]cin>>y[i] ;Subsets(1,n,y);}第三章习题2.假设一个线性表的描述满足公式(3-1)类的定义增加个函数1)扩充LinearList类的定义,增加一个函数Reverse,该函数将表中元素的次序变反。

反序操作是就地进行的(即在数组element本身的空间内)。

注意,在反序操作进行之前,表中第k个元素(如果存在)位于element[k-1],完成反序之后,该元素位于element[length-k]。

element[length k]2)证明上述函数的复杂性与线性表的长度成线性关系。

请编写另外一个就地处理的反序函数,它能对4)请编写另外个就地处理的反序函数,它能对LinearList类型的对象进行反序操作。

该函数不是LinearList类的成员函数,但它应利用成员函数来产生反序线性表。

生反序线性表5)上述函数的时间复杂性是多少?(1)template<class T>&(){ LinearList<T>& LinearList<T>::Reverse(){(;g;)for(int i=1;i<length/2;i++)Swap(element[i-1],element[length-i]);t*thireturn *this;}(2)O(length)()(4)template<class T>(){ void Reverse(LinearList<T>& L){int n=L.length();T x;;for(int i=0;i<n-1;i++){L.Delete(n,x);L.Insert(i,x);}}(5)O(n2)7.7. 设A和B均为LinearList对象。

假定A和B中的元素都是按序排列的(如从左至右按递增次序排列)。

1) 试编写一个成员函数Merge(A, B),用以创建一个新的有序线性表,该表中包含了A和B的所有个新的有序线性表该表中包含了元素。

2) 考察所编写的函数的时间复杂性。

2)考察所编写的函数的时间复杂性template <class T>pLinearList<T>& LinearList<T>::g(,) Merge(const LinearList<T>& A, const LinearList<T>& B) {// Merge the two sorted lists A and Bint al A.Length();al=A.Length();int bl= B.Length();length al bl; // length of resultlength=al+bl;//length of resultif (length > MaxSize) throw NoMem();// inadequate space for result//inadequate space for resultint ca = 0; // cursor for A=0;//cursor for Bint cb= 0; // cursor for Bint ct = 0; // cursor for *thiswhile ((ca < al) && (cb< bl)) {(()()){if (A.element[ca] <= B.element[cb])[][];element[ct++] = A.element[ca++];else element[ct++] = B.element[cb++];}// take care of left oversif (ca al) // A is finishedif(ca==al)//A is finishedfor (int q = cb; q < bl; q++)element[ct++] B.element[q];element[ct++]=B element[q];Else for (int q = ca; q < al; q++)element[ct++] = A.element[q];element[ct++]=A element[q]; return *this;}时间复杂性:Θ(al+bl).27.1)扩充Chain的类定义,增加函数Reverse,用于对x中的元素反序。

要求反序操作就地进行,中的元素反序要求反序操作就地进行不需要分配任何新的节点。

2)函数的时间复杂性是多少?…first 算法思想算法思想: 设pr 指针first 所指节点的前驱;p 指针first 所指p 节点的后继。

重复:改变first 所指节点中的link 指针指向其前驱沿链后移位置pr ,first ,p 沿链后移一位置template <class T>Chain<T>& Chain<T>::Reverse(){ if (first= =0)return *this;C*f*ChainNode<T> *p= first->link; *pr=0; while(p){first>link prfirst->link=pr;pr= first ;first=p;p=p->link;}first->link=pr;Return *this;;}28.完成练习27,区别是Reverse不作为Chain的成员函数。

要求利用Chain的成员函数来完成成员函数要求利用反序操作。

新的函数将拥有两个参数A和B,A作为输入的链表,B是把A反序后得到的链表。

作为输入的链表反序后得到的链表在反序完成时,A变成一个空的链表。

template<class T>template class TVoid Reverse(Chain<T>& A,Chain<T>& B){ T x;B.first=0;;While (!A.IsEmpty()){A d l t(1){A.delete(1,x);B.Insert(0,x);}}31.令A和B都是Chain类型,假定A和B的元素都是按序排列的(即从左至右按递增次序排列),编写一个函数Merge,用以创建一个新的有序线性表C,该表中包含了A和B的所有元素。

相关文档
最新文档