浙大远程数据结构与算法离线答案-完整版
浙大远程操作系统原理离线作业及答案

浙⼤远程操作系统原理离线作业及答案操作系统原理离线作业⼀、单选题1.进程P0和P1的共享变量定义及其初值为boolean flag[2];int turn=0;flag[0]=FALSE;flag[1]=FALSE;若进程P0和P1访问临界资源的类C代码实现如下:void P0() //P0进程{ while(TURE){flag[0]=TRUE; turn = 1;while (flag[1] && turn == 1) ;临界区;flag[0] = FALSE;}}void P1() //P1进程{ while(TURE){flag[1]=TRUE; turn = 0;while (flag[0] && turn == 0) ;临界区;flag[1] = FALSE;}}则并发执⾏进程P0和P1时产⽣的情况是:DA.不能保证进程互斥进⼊临界区、会出现“饥饿”现象B.不能保证进程互斥进⼊临界区、不会出现“饥饿”现象C.能保证进程互斥进⼊临界区、会出现“饥饿”现象 D.能保证进程互斥进⼊临界区、不会出现“饥饿”现象2.有两个进程P1和P2描述如下:shared data:int counter = 6;P1 :Computing;counter=counter+1;P2 :counter=counter-2;两个进程并发执⾏,运⾏完成后,counter的值不可能为 C 。
A. 4B. 5C. 6D. 73.某计算机采⽤⼆级页表的分页存储管理⽅式,按字节编址,页⼤⼩为210字节,页表项⼤⼩为2字节,逻辑地址结构为:页⽬录号页号页内偏移量逻辑地址空间⼤⼩为216页,则表⽰整个逻辑地址空间的页⽬录表中包含表项的个数⾄少是BA.64 B.128 C.256 D.5124.在动态分区系统中,有如下空闲块:空闲块块⼤⼩(KB)块的基址1 80 602 75 1503 55 2504 90 350此时,某进程P请求50KB内存,系统从第1个空闲块开始查找,结果把第4个空闲块分配给了P进程,请问是⽤哪⼀种分区分配算法实现这⼀⽅案? CA.⾸次适应B. 最佳适应C. 最差适应D. 下次适应5.在⼀页式存储管理系统中,页表内容如下所⽰。
浙江大学远程教育——数据库技术离线作业第2次

填空题:注:空白下划线处为需要填充的部分。
带下划线部分为考试时可能出题的部分,需要重点注意。
另外,这些填空题也有可能会被改编为选择题出现。
1.事务的隔离性:按任何一个串行顺序依次执行多个事务也是正确的。
事务的交叉执行过程是正确的,当且仅当其与串行执行过程等价,则称事务是可串行化的。
2.并发控制的基本思想是封锁。
封锁的基本思想是:当需要查询或更新数据时,先对数据进行封锁(不允许其他事务使用),以避免来自其他事务的干扰。
封锁——不允许其他事务使用,降低了事务执行的效率;为了既保证隔离又保证效率针对不同的干扰问题采取不同的封锁机制。
封锁机制的目标:保证事务的隔离性,并且允许最大量的并发事务。
分为3种:共享封锁、独占封锁、更新封锁。
3.避免死锁的主要方法有两种:一是相同顺序法,即在设计阶段规定所有的事务都按相同的顺序来封锁表;一是一次封锁法,即在设计阶段规定为了完成一个事务,一次性封锁所需要的全部表。
4.诊断死锁的方法主要有两种:超时法、等待图法。
解决死锁的办法就是破坏事务等待图中的回路。
5.在SQL标准中是通过设置隔离级别来实现并发控制的。
隔离级别由弱到强是:未提交读、提交读、可重复读、可串行化。
6.关系模型设计“不好”导致的问题:数据冗余问题、数据更新问题、数据插入问题、数据删除问题。
7.如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。
如果X→Y,则X称作决定因素。
如果K是关系模式R(U,F)的任一候选关键字,X是任一属性或属性集,如果X K,则X称为主属性;否则称为非主属性。
8.如果X→Y,并且Y→X,则可记作X←→Y,这时X和Y可以称做函数等价。
9.如果X→Y,并且对于X的一个任意真子集X/,Y都不函数依赖于X/,则称Y完全依赖于X;如果存在X/ →Y,则称Y部分依赖于X。
10.如果X→Y(非平凡函数依赖,并且X不函数依赖于Y)、Y→Z,则称Z传递函数依赖于X。
11.设有关系模式R(U,F),X包含于U、Y包含于U,如果从F中的函数依赖能够推导出X→Y,则称F逻辑蕴涵X→Y,或称X→Y是F的逻辑蕴涵。
数据结构与算法--课件模拟试卷B

浙江大学远程教育学院试题卷B卷课程名称数据结构与算法教学站年级专业(层次) 学号姓名注意:所有试题答案均按题目编号写在答题卷上。
一.单项选择题(每项选择1.5分,共60分)1、数据结构形式地定义为(D,S),其中D是①的有限集合,S是D上的②的有限集合。
① A.算法 B.数据元素 C.逻辑结构 D.数据操作② A.结构 B.操作 C.存储 D.关系2、计算机算法是指①,它必须具备输入、输出和②等五个特性。
① A.计算方法 B.排序方法 C.调度方法 D.解决问题的有限运算序列② A.可行性、可移植性和可扩充性B.可行性、确定性和有穷性C.确定性、稳定性和有穷性D.易读性、稳定性和安全性3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址①。
① A.必须是连续的 B.部分地址必须是连续的C.连续或者不连续都可以D.一定是不连续的4、线性表的逻辑顺序和存储顺序总是一致的,这种说法①。
① A. 不正确 B.正确5、一个栈的进栈序列是a,b,c,d,e,则栈的不可能的出栈序列是①。
① A. edcba B. decba C. dceab D. abcde6、判断一个循环队列Q(最多元素为MAXQSIZE)为空队列的条件是①,为满队列的条件是②。
A. Q.front == Q.rearB. Q.front != Q.rearC. Q.front == (Q.rear+1)%MAXQSIZED. Q.rear == (Q.front+1)%MAXQSIZE7、一个一维数组第一个存储单元的地址是100,每个元素的长度是4,则它的第5个元素的地址是①。
① A. 120 B. 116 C. 110 D. 1048、某语言采用低下标优先方式存放数组元素,数组下标从1开始。
设维数为(5,6,7)的数组A5x6x7的起始存储地址为Loc[1][1][1]=1000,每个数组元素占用4个字节。
则元素A[3][4][5]所在的地址Loc[3][4][5]=①。
浙大远程数据结构与算法离线答案-最完整版

浙江大学远程教育学院《数据结构与算法》课程离线作业一、填空题:(【序号,章,节】。
)【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
【2,1,2】为了最快地存取数据元素,物理结构宜采用序存储结构。
3,1,2】数据结构的三要素是逻辑结构,物理结构,操作。
【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构,链式存储结构。
【4,1,3】度量算法效率可通过时间复杂度和空间复杂度__来进行。
【5,1,3】设n 为正整数,下面程序段中前置以记号@的语句的频度是n(n+1)/2。
for (i=0; i<n; i++){for (j=0; j<n; j++)if (i+j==n-1)@ a[i][j]=0;}【6,1,3】设n 为正整数,试确定下列各程序段中前置以记号@的语句的频度:(1) i=1; k=0;while (i<=n-1){i++;@ k+=10 * i; // 语句的频度是_____ n-1_______________。
}(2) k=0;for (i=1; i<=n; i++){for (j=i; j<=n; j++)1@ k++; // 语句的频度是_____ n(n+1)/2________________。
}【7,3,2】线性表(a1,a2,…,a n)有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:_顺序存储结构__ 存储密度较大;_顺序存储结构___存储利用率较高;_顺序存储结构___可以随机存取;_链式存储结构____不可以随机存取;__链式存储结构__插入和删除操作比较方便。
【8,3,2】从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动n-i个元素。
【9,3,2】带头结点的单链表Head为空的条件是____ Head->next==null_____【10,3,2】在一个单链表中p所指结点(p所指不是最后结点)之后插入一个由指针s所指结点,应执行s->next=__ p->next___;和p->next=___s _____的操作。
数据结构与算法离线作业 答案知识讲解

数据结构与算法离线作业答案浙江大学远程教育学院《数据结构与算法》课程离线作业姓名:陈翠学号:713009014001年级:2013秋学习中心:金华学习中心—————————————————————————————一、填空题:(【序号,章,节】。
)【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
【2,1,2】为了最快地存取数据元素,物理结构宜采用顺序存储结构。
【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构___,链式存储结构___。
【4,1,3】度量算法效率可通过时间复杂度___来进行。
【5,1,3】设n 为正整数,下面程序段中前置以记号@的语句的频度是n(n+1)/2 。
for (i=0; i<n; i++){for (j=0; j<n; j++)if (i+j==n-1)@ a[i][j]=0;}【6,1,3】设n 为正整数,试确定下列各程序段中前置以记号@的语句的频度:收集于网络,如有侵权请联系管理员删除(1) i=1; k=0;while (i<=n-1){i++;@ k+=10 * i; // 语句的频度是_________n-1_______________。
}(2) k=0;for (i=1; i<=n; i++){for (j=i; j<=n; j++)@ k++; // 语句的频度是_________n(n+1)/2________________。
}【7,3,2】线性表(a1,a2,…,a n)有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充: ___顺序_ 存储密度较大;___顺序____存储利用率较高;___顺序____可以随机存取;__链式_____不可以随机存取;__链式____插入和删除操作比较方便。
【8,3,2】从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。
数据结构与算法习题与答案

A .大于 1
B.等于 1
C. 小于 1 D.不能确定
( 8)将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是(
)。
A.n
B .2n-1
C. 2n
D .n-1
( 9)在一个长度为 n 的顺序表中,在第 i 个元素( 1≤ i≤ n+1 )之前插入一个新元素时
须向后移动( )个元素。
(15) 在双向循环链表中,在 p 指针所指的结点后插入 q 所指向的新结点,其修改指针 的操作是( )。
A . p->next=q; q->prior=p; p->next->prior=q; q->next=q; B. p->next=q; p->next->prior=q; q->prior=p; q->next=p->next; C. q->prior=p; q->next=p->next; p->next->prior=q; p->next=q; D. q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;
第 1 章 绪论
习题
1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储 结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?
5.选择题
( 1)在数据结构中,从逻辑上可以把数据结构分成(
( 5)以下与数据的存储结构无关的术语是(
《数据结构与算法》课后习题答案

2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。
(×)2.顺序存储的线性表可以按序号随机存取。
(√)3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
(×)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
(×)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
(√)7.线性表的链式存储结构优于顺序存储结构。
(×)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。
(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
(×)11.静态链表既有顺序存储的优点,又有动态链表的优点。
所以它存取表中第i个元素的时间与i无关。
(×)12.线性表的特点是每个元素都有一个前驱和一个后继。
(×)2.3.3 算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。
试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。
【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。
int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x) /*边找位置边移动*/{A[i+1]=A[i];i--;}A[i+1]=x; /*找到的位置是插入位的下一位*/(*elenum)++;return 1; /*插入成功*/}}时间复杂度为O(n)。
数据结构与算法分析课后习题答案

数据结构与算法分析课后习题答案[篇一:《数据结构与算法》课后习题答案]>2.3.2 判断题2.顺序存储的线性表可以按序号随机存取.〔√〕4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象.〔√〕6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻.〔√〕8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关.〔√〕9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的.〔√〕2.3.3 算法设计题1.设线性表存放在向量a[arrsize]的前elenum个分量中,且递增有序.试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度.[提示]直接用题目中所给定的数据结构〔顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体〕,因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,〔也可以从高下标端开始一边比较,一边移位〕然后插入x ,最后修改表示表长的变量.int insert <datatype a[],int *elenum,datatype x> /*设elenum为表的最大下标*/ {if <*elenum==arrsize-1> return 0; /*表已满,无法插入*/else {i=*elenum;while <i=0 a[i]x>/*边找位置边移动*/{a[i+1]=a[i];i--;}a[i+1]=x;/*找到的位置是插入位的下一位*/ <*elenum>++;return 1;/*插入成功*/}}时间复杂度为o<n>.2.已知一顺序表a,其元素值非递减有序排列,编写一个算法删除顺序表中多余的值相同的元素.[提示]对顺序表a,从第一个元素开始,查找其后与之值相同的所有元素,将它们删除;再对第二个元素做同样处理,依此类推.void delete<seqlist *a>{i=0;while<ia-last>/*将第i个元素以后与其值相同的元素删除*/{k=i+1;while<k=a-lasta-data[i]==a-data[k]>k++;/*使k指向第一个与a[i]不同的元素*/ n=k-i-1;/*n表示要删除元素的个数*/for<j=k;j=a-last;j++>a-data[j-n]=a-data[j]; /*删除多余元素*/a-last= a-last -n;i++;}}3.写一个算法,从一个给定的顺序表a中删除值在x~y<x=y>之间的所有元素,要求以较高的效率来实现.[提示]对顺序表a,从前向后依次判断当前元素a-data[i]是否介于x 和y之间,若是,并不立即删除,而是用n记录删除时应前移元素的位移量;若不是,则将a-data[i]向前移动n位.n用来记录当前已删除元素的个数.void delete<seqlist *a,int x,int y>{i=0;n=0;while <ia-last>{if <a-data[i]=x a-data[i]=y>n++; /*若a-data[i] 介于x和y之间,n 自增*/ else a-data[i-n]=a-data[i];/*否则向前移动a-data[i]*/i++;}a-last-=n;}4.线性表中有n个元素,每个元素是一个字符,现存于向量r[n]中,试写一算法,使r中的字符按字母字符、数字字符和其它字符的顺序排列.要求利用原来的存储空间,元素移动次数最小.[提示]对线性表进行两次扫描,第一次将所有的字母放在前面,第二次将所有的数字放在字母之后,其它字符之前.int fch<char c> /*判断c是否字母*/{if<c=ac=z||c=ac=z> return <1>;elsereturn <0>;}int fnum<char c> /*判断c是否数字*/{if<c=0c=9>return <1>;elsereturn <0>;}void process<char r[n]>{low=0;high=n-1;while<lowhigh> /*将字母放在前面*/{while<lowhighfch<r[low]>> low++;while<lowhigh!fch<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}low=low+1;high=n-1;while<lowhigh> /*将数字放在字母后面,其它字符前面*/{while<lowhighfnum<r[low]>> low++;while<lowhigh!fnum<r[high]>> high--;if<lowhigh>{k=r[low];r[low]=r[high];r[high]=k;}}}5.线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换.即将线性表:〔a1, a2, … , am, b1, b2, … , bn〕改变为:〔b1, b2, … , bn , a1, a2, … , am〕.[提示]比较m和n的大小,若mn,则将表中元素依次前移m次;否则,将表中元素依次后移n次.void process<seqlist *l,int m,int n>{if<m=n>for<i=1;i=m;i++>{x=l-data[0];for<k=1;k=l-last;k++>l-data[k-1]=l-data[k];l-data[l-last]=x;}else for<i=1;i=n;i++>{x=l-data[l-last];for<k=l-last-1;k=0;k- ->l-data[k+1]=l-data[k];l-data[0]=x; }}6.已知带头结点的单链表l中的结点是按整数值递增排列的,试写一算法,将值为x 的结点插入到表l中,使得l仍然递增有序,并且分析算法的时间复杂度.linklist insert<linklist l, int x>{p=l;while<p-next xp-next-data>p=p-next;/*寻找插入位置*/ s=<lnode *>malloc<sizeof<lnode>>; /*申请结点空间*/ s-data=x;/*填装结点*/s-next=p-next;p-next=s; /*将结点插入到链表中*/ return<l>;}7.假设有两个已排序〔递增〕的单链表a和b,编写算法将它们合并成一个链表c而不改变其排序性.linklist bine<linklist a, linklist b>{c=a;rc=c;pa=a-next; /*pa指向表a的第一个结点*/pb=b-next; /*pb指向表b的第一个结点*/free<b>; /*释放b的头结点*/while <pa pb> /*将pa、pb所指向结点中,值较小的一个插入到链表c的表尾*/if<pa-datapb-data>{rc-next=pa;rc=pa;pa=pa-next;}else{rc-next=pb;rc=pb;pb=pb-next;}if<pa> rc-next=pa;else rc-next=pb;/*将链表a或b中剩余的部分到链表c的表尾*/return<c>;}8.假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写算法删除该结点的前驱结点.[提示]利用循环单链表的特点,通过s指针可循环找到其前驱结点p 与p的前驱结点q,然后可删除结点*p.viod delepre<lnode *s>{lnode *p, *q;p=s;while <p-next!=s>{q=p;p=p-next;}q-next=s;free<p>;}9.已知两个单链表a和b分别表示两个集合,其元素递增排列,编写算法求出a和b的交集c,要求c同样以元素递增的单链表形式存储.[提示]交集指的是两个单链表的元素值相同的结点的集合,为了操作方便,先让单链表c带有一个头结点,最后将其删除掉.算法中指针p 用来指向a中的当前结点,指针q用来指向b中的当前结点,将其值进行比较,两者相等时,属于交集中的一个元素,两者不等时,将其较小者跳过,继续后面的比较.linklist intersect<linklist a, linklist b>{lnode *q, *p, *r, *s;linklist c;c= <lnode *>malloc<sizeof<lnode>>;c-next=null;r=c;p=a;q=b;while <p q >if <p-dataq-data> p=p-next;else if <p-data==q-data>{s=<lnode *>malloc<sizeof<lnode>>;s-data=p-data;r-next=s;r=s;p=p-next;q=q-next;}else q=q-next;r-next=null;c=c-next;return c;}10.设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域的值初始化为零.每当在链表进行一次locata<l,x>运算后,令值为x的结点中的freq 域增1,并调整表中结点的次序,使其按访问频度的非递增序列排列,以便使频繁访问的结点总是靠近表头.试写一个满足上述要求的locata<l,x>算法.[提示]在定位操作的同时,需要调整链表中结点的次序:每次进行定位操作后,要查看所查找结点的freq域,将其同前面结点的freq域进行比较,同时进行结点次序的调整. typedef struct dnode[篇二:数据结构课后习题答案]lass=txt>高等学校精品资源共享课程绪论第 1 章1.1 什么是数据结构?[答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储于计算机中,并在这些数据上定义了一个运算集合. 1.2 数据结构涉与哪几个方面?[答]:数据结构涉与三个方面的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合.1.3 两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有一个运算的定义不一样,它们是否可以认作是同一个数据结构?为什么?[答]:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不一样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不一样, 所以它们是两种不同的数据结构.1.4 线性结构的特点是什么?非线性结构的特点是什么?[答]:线性结构元素之间的关系是一对一的,在线性结构中只有一个开始结点和一个终端结点,其他的每一个结点有且仅有一个前驱和一个后继结点.而非线性结构则没有这个特点,元素之间的关系可以是一对多的或多对多的. 1.5 数据结构的存储方式有哪几种?[答]:数据结构的存储方式有顺序存储、链式存储、散列存储和索引存储等四种方式. 1.6 算法有哪些特点?它和程序的主要区别是什么?[答]:算法具有〔1〕有穷性〔2〕确定性〔3〕0 个或多个输入〔4〕1 个或多个输出〔5〕可行性等特征.程序是算法的一种描述方式,通过程序可以在计算机上实现算法. 1.7 抽象数据类型的是什么?它有什么特点?[答]:抽象数据类型是数据类型的进一步抽象,是大家熟知的基本数据类型的延伸和发展. 抽象数据类型是与表示无关的数据类型,是一个数据模型与定义在该模型上的一组运算.对一个抽象数据类型进行定义时,必须给出它的名字与各运算的运算符名,即函数名,并且规定这些函数的参数性质.一旦定义了一个抽象数据类型与具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型.抽象数据类型的设计者根据这些描述给出操作的具体实现,抽象数据类型的使用者依据这些描述使用抽象数据类型. 1.8 算法的时间复杂度指的是什么?如何表示?[答]:算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,另外,算法执行的时间还与输入数据的状态有关,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量.算法中基本操作的执行次数一般是与问题规模有关的,对于结点个数为 n 的数据处理问题,用 t<n>表示算法基本操作的执行次数.为了评价算法的执行效率,通常采用大写 o 符号表示算法的时间复杂度,大写 o 符号给出了函数 f 的一个上限.其它义如下:3十二五普通高等教育国家级本科规划教材高等学校精品资源共享课程定义:f <n>=o <g <n>> 当且仅当存在正的常数 c 和 n0,使得对于所有的n≥n0,有f <n> ≤c g<n>.上述定义表明,函数 f 顶多是函数 g 的 c 倍,除非 n 小于 n0.因此对于足够大的 n <如n≥n0>, g 是 f 的一个上限〔不考虑常数因子 c〕.在为函数 f 提供一个上限函数 g 时,通常使用比较简单的函数形式.比较典型的形式是含有 n 的单个项〔带一个常数系数〕.表 1-1 列出了一些常用的 g 函数与其名称.对于表1-1 中的对数函数 logn,没有给出对数基,原因是对于任何大于 1 的常数 a 和 b 都有 logan =logbn/logba,所以 logan 和 logbn 都有一个相对的乘法系数 1/logba, 其中 a 是一个常量.表 1-1 常用的渐进函数1.9 [答]:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数.可以将它表示为问题规模的函数,并通过大写o符号表示空间复杂度.1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度 t<n>.〔1〕 i++ ;〔2〕 for<i=0;in;i++>if <a[i]x> x=a[i];〔3〕for<i=0;in;i++>for<j=0;jn;j++>;〔4〕for <i=1;i=n-1;i++>{ k=i;for<j=i+1;j=n;j++>if<a[j]a[j+1]> k=j; t=a[k]; a[k]=a[i]; a[i]=t; }〔5〕for<i=0;in;i++>for<j=0;jn;j++>{++x;s=s+x;}[答]:〔1〕o〔1〕;〔2〕o〔n〕;〔3〕o〔n2〕;〔4〕o〔n2〕;〔5〕o〔n2〕4第 2 章线性表与其顺序存储2.1 选择题〔1〕表长为 n 的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时, 插入一个元素所需移动元素的平均个数为〔为〔 a 〕.a.〔n?1〕/2 e.n/2b.n f.<n+1>/2c.n+1d.n?1g.<n?2>/2〔2〕设栈 s 和队列 q 的初始状态为空,元素 e1、e2、e3、e4、e5 和 e6 依次通过栈 s, 一个元素出栈后即进入队列 q,若 6 个元素出队的序列为 e2、e4、e3、e6、e5 和 e1,则栈 s 的容量至少应该为〔 c 〕.a.6〔 b 〕.a.不确定b.n?i+1c.id.n?i〔4〕在一个长度为 n 的顺序表中删除第 i 个元素〔1=i=n〕时,需向前移动〔 a 〕个元素.a.n?i间复杂度为〔 a 〕.a.o<n>b.o<1>c.o<n2>〕.d.?+*abcd d.o<n3>〔6〕表达式 a*<b+c>?d 的后缀表达式是〔 bb.n?i+1c.n?i?1d.i〔5〕若长度为 n 的线性表采用顺序存储结构存储,在第 i 个位置上插入一个新元素的时b.4c.3d.2〔3〕设栈的输入序列为 1、2、3… n,若输出序列的第一个元素为 n,则第 i 个输出的元素为e 〕,删除一个元素所需移动元素的平均个数a.abcd*+? b.abc+*d? c.abc*+d? 〔7〕队列是一种特殊的线性表,其特殊性在于〔 c 〕.a.插入和删除在表的不同位置执行 b.插入和删除在表的两端位置执行 c.插入和删除分别在表的两端执行 d.插入和删除都在表的某一端执行〔8〕栈是一种特殊的线性表,具有〔 b 〕性质.a.先进先出b.先进后出c.后进后出d.顺序进出〔9〕顺序循环队列中〔数组的大小为 n〕,队头指示 front 指向队列的第 1 个元素,队尾指示 rear 指向队列最后元素的后 1 个位置,则循环队列中存放了 n??? 1 个元素,即循环队列满〕. 的条件为〔 ba.<rear+1>%n=front?1 c.<rear>%n=frontb.<rear+1>%n=front d.rear+1=front〔10〕顺序循环队列中〔数组的大小为 6〕,队头指示 front 和队尾指示 rear 的值分别为 3 和 0,当从队列中删除 1 个元素,再插入 2 个元素后,front 和 rear 的值分别为〔 d 〕.a.5 和 1b.2 和 4c.1 和 5d.4 和 22.2 什么是顺序表?什么是栈?什么是队列?5[答]:当线性表采用顺序存储结构时,即为顺序表.栈是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入与删除操作只能在这种线性表的同一端进行〔即栈顶〕, 因此,栈具有先进后出、后进先出的特点.队列也是一种特殊的线性表,它的特殊性表现在约定了在这种线性表中数据的插入在表的一端进行,数据的删除在表的另一端进行,因此队列具有先进先出,后进后出的特点.2.3 设计一个算法,求顺序表中值为 x 的结点的个数. [答]:顺序表的存储结构定义如下〔文件名 seqlist.h〕: #include stdio.h #define n 100 typedef int datatype; typedef struct {datatype data[n]; int length; } seqlist;/*预定义最大的数据域空间*/ /*假设数据类型为整型*//*此处假设数据元素只包含一个整型的关键字域*/ /*线性表长度*//*预定义的顺序表类型*/算法 countx〔l,x〕用于求顺序表 l 中值为 x 的结点的个数. int countx<seqlist *l,datatype x> {int c=0; int i;for <i=0;il-length;i++>if <l-data[i]==x> c++; return c; }2.4 设计一个算法,将一个顺序表倒置.即,如果顺序表各个结点值存储在一维数组 a 中,倒置的结果是使得数组 a 中的 a[0]等于原来的最后一个元素,a[1] 等于原来的倒数第 2 个元素,…,a 的最后一个元素等于原来的第一个元素.[答]:顺序表的存储结构定义同题 2.3,实现顺序表倒置的算法程序如下: void verge<seqlist *l> {int t,i,j; i=0;j=l-length-1; while <ij>{ t=l-data[i];l-data[i++]=l-data[j]; l-data[j--]=t; } }2.5 已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为 x 的结点, 使顺序表中的结点仍然是从小到大有序.[答]:顺序表的定义同题 2.3,实现本题要求的算法程序如下:6void insertx<seqlist *l,datatype x> {int j;if <l-lengthn> { j=l-length-1;while <j=0 l-data[j]x>{ l-data[j+1]=l-data[j];j--; } l-data[j+1]=x; l-length++; } }2.6 将下列中缀表达式转换为等价的后缀表达式.<1> 5+6*7 <2> <5-6>/7 <3> 5-6*7*8 <4> 5*7-8 <5> 5*<7-6>+8/9 <6> 7*<5-6*8>-9 [答]:<7> 5+6*7 <8> <5-6>/7 <9> 5-6*7*8 <10>5*7-8 <11>5*<7-6>+8/9 <12>7*<5-6*8>-9后缀表达式:5 6 7*+ 后缀表达式:5 6-7/ 后缀表达式:5 6 7*8*- 后缀表达式:5 7* 8- 后缀表达式:5 7 6-*8 9/+ 后缀表达式:7 5 6 8*-*9-2.7 循环队列存储在一个数组中,数组大小为 n,队首指针和队尾指针分别为 front 和 rear,请写出求循环队列中当前结点个数的表达式.[答]:循环队列中当前结点个数的计算公式是:<n+rear-front>%n2.8 编号为 1,2,3,4 的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有 n 列火车通过调度站,请设计一个算法,输出所有可能的调度结果. [答]:方法一:算法思想:逐次输出所有可能,用回溯法.即:总体:对原始序列中的每一个元素,总是先入栈,后出栈1.入栈后的操作:a.该元素出栈;b.下一个元素入栈;2.出栈后的操作:a.〔栈中其他元素〕继续出栈;b. 〔原始序列中〕下一个数入栈;注意:回溯法,关键在于回溯,即在某分支结点 x:处理 x 的一个子分支,再退回分支 x, 接着处理 x 的下一个子分支,若所有 x 的子分支处理完,再退回上一层分支节点.所谓"退回〞,7[篇三:数据结构课后习题答案]下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型.答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称.如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据.数据项:是组成数据元素的、有独立含义的、不可分割的最小单位.例如,学生基本信息表中的学号、##、性别等都是数据项.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合.换句话说,数据结构是带"结构〞的数据元素的集合,"结构〞就是指数据元素之间存在的关系.逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的.因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型.存储结构:数据对象在计算机中的存储表示,也称为物理结构.抽象数据类型:由用户定义的,表示应用问题的数学模型,以与定义在这个模型上的一组操作的总称.具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合.2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系. 答案:例如有一张学生基本信息表,包括学生的学号、##、性别、籍贯、专业等.每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列.对于整个表来说,只有一个开始结点<它的前面无记录>和一个终端结点<它的后面无记录>,其他的结点则各有一个也只有一个直接前趋和直接后继.学生记录之间的这种关系就确定了学生表的逻辑结构,即线性结构.这些学生记录在计算机中的存储表示就是存储结构.如果用连续的存储单元<如用数组表示>来存放这些记录,则称为顺序存储结构;如果存储单元不连续,而是随机存放各个记录,然后用指针进行,则称为链式存储结构.即相同的逻辑结构,可以对应不同的存储结构.3.简述逻辑结构的四种基本关系并画出它们的关系图.答案:〔1〕集合结构数据元素之间除了"属于同一集合〞的关系外,别无其他关系.例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构.〔2〕线性结构数据元素之间存在一对一的关系.例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构.〔3〕树结构数据元素之间存在一对多的关系.例如,在班级的管理体系中,班长管理多个组长,每位组长管理多名组员,从而构成树形结构.〔4〕图结构或网状结构数据元素之间存在多对多的关系.例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构.其中树结构和图结构都属于非线性结构.四类基本逻辑结构关系图4.存储结构由哪两种基本的存储方法实现?答案:〔1〕顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述.〔2〕链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间.但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址.所以链式存储结构通常借助于程序设计语言的指针类型来描述.5.选择题〔1〕在数据结构中,从逻辑上可以把数据结构分成〔〕.a.动态结构和静态结构 b.紧凑结构和非紧凑结构c.线性结构和非线性结构d.内部结构和外部结构答案:c〔2〕与数据元素本身的形式、内容、相对位置、个数无关的是数据的〔〕.a.存储结构b.存储实现c.逻辑结构d.运算实现答案:c〔3〕通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着〔〕.a.数据具有同一特点b.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致c.每个数据元素都一样d.数据元素所包含的数据项的个数要相等答案:b〔4〕以下说法正确的是〔〕.a.数据元素是数据的最小单位b.数据项是数据的基本单位c.数据结构是带有结构的各数据项的集合d.一些表面上很不相同的数据可以有相同的逻辑结构答案:d解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合.〔5〕算法的时间复杂度取决于〔〕.a.问题的规模答案:d解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关.如某些排序的算法,其执行时间与待排序记录的初始状态有关.为此,有时会对算法有最好、最坏以与平均时间复杂度的评价.〔6〕以下数据结构中,〔〕是非线性数据结构a.树 b.字符串 c.队列 d.栈答案:a6.试分析下面各程序段的时间复杂度.〔1〕x=90; y=100;while<y0>if<x100>{x=x-10;y--;}else x++;答案:o<1>解释:程序的执行次数为常数阶.b.待处理数据的初态 d.a和b c.计算机的配置〔2〕for <i=0; in; i++>for <j=0; jm; j++>a[i][j]=0;答案:o<m*n>解释:语句a[i][j]=0;的执行次数为m*n.〔3〕s=0;for i=0; in; i++>for<j=0; jn; j++>s+=b[i][j];sum=s;2答案:o<n>解释:语句s+=b[i][j];的执行次数为n.〔4〕i=1;while<i=n>i=i*3;答案:o<log3n>解释:语句i=i*3;的执行次数为 ?log3n?.〔5〕x=0;for<i=1; in; i++>for <j=1; j=n-i; j++>x++;2答案:o<n>解释:语句x++;的执行次数为n-1+n-2+??+1= n<n-1>/2.〔6〕x=n; //n1y=0;while<x≥<y+1>* <y+1>>y++;答案:o<>解释:语句y++;的执行次数为 ?n?. 2第2章线性表1.选择题〔1〕顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是〔〕.a.110b.108 c.100 d.120答案:b解释:顺序表中的数据连续存储,所以第5个元素的地址为:100+2*4=108.〔2〕在n个结点的顺序表中,算法的时间复杂度是o<1>的操作是〔〕.a.访问第i个结点〔1≤i≤n〕和求第i个结点的直接前驱〔2≤i≤n〕b.在第i个结点后插入一个新结点〔1≤i≤n〕c.删除第i个结点〔1≤i≤n〕d.将n个结点从小到大排序答案:a解释:在顺序表中插入一个结点的时间复杂度都是o<n2>,排序的时间复杂度为o<n2>或o<nlog2n>.顺序表是一种随机存取结构,访问第i个结点和求第i个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是o<1>.〔3〕向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为〔〕.a.8 b.63.5 c.63d.7答案:b解释:平均要移动的元素个数为:n/2.〔4〕存储的存储结构所占存储空间〔〕.a.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针b.只有一部分,存放结点值c.只有一部分,存储表示结点间关系的指针d.分两部分,一部分存放结点值,另一部分存放结点所占单元数答案:a〔5〕线性表若采用链式存储结构时,要求内存中可用存储单元的地址〔〕.a.必须是连续的 b.部分地址必须是连续的c.一定是不连续的 d.连续或不连续都可以答案:d〔6〕线性表L在〔〕情况下适用于使用链式结构实现.a.需经常修改L中的结点值B.需不断对L进行删除插入c.L中含有大量的结点D.L中结点结构复杂答案:b。
数据结构与算法设计课后习题及答案详解

第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。
2.数据元素是数据的基本单位,数据项是数据的最小标示单位。
3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。
4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。
5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。
6.在一般情况下,一个算法的时间复杂度是问题规模的函数。
7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。
通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。
8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。
2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。
数据存储结构:数据元素及其关系在计算机内的表示。
3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。
4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。
5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。
6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。
可行性、有容性、确定性、有输入、有输出。
7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。
第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。
2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。
3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。
数据结构与算法习题册参考答案

数据结构与算法习题册(课后部分参考答案)《数据结构与算法》课程组目录目录课后习题部分第一章绪论 (1)第二章线性表 (3)第三章栈和队列 (5)第四章串 (8)第五章数组和广义表 (10)第六章树和二叉树 (13)第七章图 (16)第九章查找 (20)第十章排序 (23)第一章绪论一. 填空题1. 从逻辑关系上讲,数据结构的类型主要分为集合、线性结构、树结构和图结构。
2. 数据的存储结构主要有顺序存储和链式存储两种基本方法,不论哪种存储结构,都要存储两方面的内容:数据元素和数据元素之间的关系。
3. 算法具有五个特性,分别是有穷性、确定性、可行性、输入、输出。
4. 算法设计要求中的健壮性指的是算法在发生非法操作时可以作出处理的特性。
二. 选择题1. 顺序存储结构中数据元素之间的逻辑关系是由 C 表示的,链接存储结构中的数据元素之间的逻辑关系是由 D 表示的。
A 线性结构B 非线性结构C 存储位置D 指针2. 假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是B 。
A 树B 图C 线性表D 集合3. 算法指的是 A 。
A 对特定问题求解步骤的一种描述,是指令的有限序列。
B 计算机程序C 解决问题的计算方法D 数据处理三. 简答题1. 分析以下各程序段,并用大O记号表示其执行时间。
(1) (2)i=1;k=0; i=1;k=0;While(i<n-1) do{ {k=k+10*i; k=k+10*i;i++; i++;} }while(i<=n)⑴基本语句是k=k+10*i,共执行了n-2次,所以T(n)=O(n)。
⑵基本语句是k=k+10*i,共执行了n次,所以T(n)=O(n)。
2. 设有数据结构(D,R),其中D={1, 2, 3, 4, 5, 6},R={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}。
数据结构与算法离线作业题目及标准答案

数据结构与算法离线作业题目及标准答案————————————————————————————————作者:————————————————————————————————日期:2浙江大学远程教育学院《数据结构与算法》课程离线作业姓名:陈翠学号:713009014001年级:2013秋学习中心:金华学习中心—————————————————————————————一、填空题:(【序号,章,节】。
)【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
【2,1,2】为了最快地存取数据元素,物理结构宜采用顺序存储结构。
【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构___,链式存储结构___。
【4,1,3】度量算法效率可通过时间复杂度___来进行。
【5,1,3】设n 为正整数,下面程序段中前置以记号@的语句的频度是n(n+1)/2 。
for (i=0; i<n; i++){for (j=0; j<n; j++)if (i+j==n-1)@ a[i][j]=0;}【6,1,3】设n 为正整数,试确定下列各程序段中前置以记号@的语句的频度:(1) i=1; k=0;while (i<=n-1){i++;@ k+=10 * i; // 语句的频度是_________n-1_______________。
}(2) k=0;for (i=1; i<=n; i++){3for (j=i; j<=n; j++)@ k++; // 语句的频度是_________n(n+1)/2________________。
}【7,3,2】线性表(a1,a2,…,a n)有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:___顺序_ 存储密度较大;___顺序____存储利用率较高;___顺序____可以随机存取;__链式_____不可以随机存取;__链式____插入和删除操作比较方便。
浙大远程数据结构与算法模拟卷

《数据结构与算法》模拟卷答案一、判断题(共10小题,每小题1分,共10分,正确的打“√”,错误的打“×”。
答案填写在答题表格中。
)×1、数据元素的逻辑结构相同时物理结构也应该相同。
√2、设n为正整数,则下列算法的时间复杂性是O(log2n)。
sum = 0; do sum += n; while(n=n/2);√3、在n个元素的顺序表中的第i个元素之前插入一个元素,需要移动n-i+1个元素。
×4、线性表的特点是每个元素都有一个前驱和一个后继。
×5、循环队列不存在空间溢出问题。
√6、n(n>0)个结点的树有n-1条边。
√7、满二叉树一定是完全二叉树,反之不然。
√8、树可以看成是连通的图。
×9、5个顶点的无向图最多可能有20条边。
×10、二叉排序树主要用于对数据的排序。
二、单项选择题(共20小题,每小题2分,共40分。
答案填写在答题表格中。
)1、数据结构是研究数据的( D )以及它们之间的相互关系。
A. 理想结构,物理结构B. 理想结构,抽象结构C. 物理结构,逻辑结构D. 抽象结构,逻辑结构2、计算机算法是指( D )。
A.计算方法B.排序方法C.调度方法D.解决问题的有限运算序列3、顺序表的特点是( B )。
A. 逻辑上相邻的结点其物理位置不相邻B. 逻辑上相邻的结点其物理位置亦相邻C. 顺序表不是随机存储结构D. 在顺序表中插入和删除操作比在链表上方便4、线性表按链式方式存储时,每个结点的存储包括( B )两部分。
A.数据值与符号B.数据与指针C.数据与表名D.数据项与符号5、带头结点的单循环链表Head为空表的判定条件是( A ) 。
A. Head->next == HeadB. Head->next == NULLC. Head != NULLD. Head == NULL6、若某堆栈的输入序列为1,2,3,…,n-1,n,输出序列的第1个元素为n,则第i个输出元素为( A )。
数据结构与算法习题含参考答案

数据结构与算法习题含参考答案一、单选题(共100题,每题1分,共100分)1、要为 Word 2010 格式的论文添加索引,如果索引项已经以表格形式保存在另一个 Word文档中,最快捷的操作方法是:A、在 Word 格式论文中,逐一标记索引项,然后插入索引B、直接将以表格形式保存在另一个 Word 文档中的索引项复制到 Word 格式论文中C、在 Word 格式论文中,使用自动插入索引功能,从另外保存 Word 索引项的文件中插D、在 Word 格式论文中,使用自动标记功能批量标记索引项,然后插入索引正确答案:D2、下面不属于计算机软件构成要素的是A、文档B、程序C、数据D、开发方法正确答案:D3、JAVA 属于:A、操作系统B、办公软件C、数据库系统D、计算机语言正确答案:D4、在 PowerPoint 演示文稿中,不可以使用的对象是:A、图片B、超链接C、视频D、书签第 6 组正确答案:D5、下列叙述中正确的是A、软件过程是软件开发过程和软件维护过程B、软件过程是软件开发过程C、软件过程是把输入转化为输出的一组彼此相关的资源和活动D、软件过程是软件维护过程正确答案:C6、在 Word 中,不能作为文本转换为表格的分隔符的是:A、@B、制表符C、段落标记D、##正确答案:D7、某企业为了建设一个可供客户在互联网上浏览的网站,需要申请一个:A、密码B、门牌号C、域名D、邮编正确答案:C8、面向对象方法中,将数据和操作置于对象的统一体中的实现方式是A、隐藏第 42 组B、抽象C、结合D、封装正确答案:D9、下面属于整数类 I 实例的是A、-919B、0.919C、919E+3D、919D-2正确答案:A10、定义课程的关系模式如下:Course (C#, Cn, Cr,prC1#, prC2#)(其属性分别为课程号、课程名、学分、先修课程号 1和先修课程号 2),并且不同课程可以同名,则该关系最高是A、BCNFB、2NFC、1NFD、3NF正确答案:A11、循环队列的存储空间为 Q(1:100),初始状态为 front=rear=100。
《数据结构与算法》课后习题答案

《数据结构与算法》课后习题答案一、算法分析和复杂度1.1 算法复杂度的定义算法的复杂度是指算法所需资源的度量,包括时间复杂度和空间复杂度。
时间复杂度描述了算法的执行时间随输入规模增长的增长速度,空间复杂度描述了算法执行期间所需的存储空间随输入规模增长的增长速度。
1.2 时间复杂度的计算方法时间复杂度可以通过估算算法的执行次数来计算。
对于循环结构,通常可以通过循环体内代码的执行次数来估算时间复杂度。
对于递归算法,则可以通过递归的深度和每次递归的复杂度来计算时间复杂度。
1.3 常见的时间复杂度在算法分析中,常见的时间复杂度有:O(1)、O(log n)、O(n)、O(n log n)、O(n^2)、O(n^3)等。
其中,O(1)表示算法的执行时间与输入规模无关,即常数时间复杂度;O(log n)表示算法的执行时间随输入规模呈对数增长;O(n)表示算法的执行时间随输入规模呈线性增长;O(nlog n)表示算法的执行时间随输入规模呈线性对数增长;O(n^2)表示算法的执行时间随输入规模呈平方增长;O(n^3)表示算法的执行时间随输入规模呈立方增长。
1.4 空间复杂度的计算方法空间复杂度可以通过估计算法执行过程中所需要的额外存储空间来计算。
对于递归算法,通常使用递归的深度来估算空间复杂度。
1.5 算法复杂度的应用算法的复杂度分析在实际应用中非常重要,可以帮助我们选择合适的算法来解决问题。
在时间复杂度相同的情况下,可以通过比较空间复杂度来选择更优的算法。
在实际开发中,我们也可以根据算法的复杂度来进行性能优化,减少资源的消耗。
二、搜索算法2.1 线性搜索算法线性搜索算法是一种简单直观的搜索算法,逐个比较待搜索元素和数组中的元素,直到找到匹配的元素或遍历完整个数组。
其时间复杂度为O(n),空间复杂度为O(1)。
2.2 二分搜索算法二分搜索算法是一种高效的搜索算法,前提是数组必须是有序的。
算法首先取数组的中间元素进行比较,如果相等则返回找到的位置,如果大于中间元素则在右半部分继续搜索,如果小于中间元素则在左半部分继续搜索。
《数据结构与算法》课后习题答案

2.3 课后习题解答2.3.2 判断题1.线性表的逻辑顺序与存储顺序总是一致的。
(×)2.顺序存储的线性表可以按序号随机存取。
(√)3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
(×)4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此属于同一数据对象。
(√)5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
(×)6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
(√)7.线性表的链式存储结构优于顺序存储结构。
(×)8.在线性表的顺序存储结构中,插入和删除时移动元素的个数与该元素的位置有关。
(√)9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
(√)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
(×)11.静态链表既有顺序存储的优点,又有动态链表的优点。
所以它存取表中第i个元素的时间与i无关。
(×)12.线性表的特点是每个元素都有一个前驱和一个后继。
(×)2.3.3 算法设计题1.设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。
试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并且分析算法的时间复杂度。
【提示】直接用题目中所给定的数据结构(顺序存储的思想是用物理上的相邻表示逻辑上的相邻,不一定将向量和表示线性表长度的变量封装成一个结构体),因为是顺序存储,分配的存储空间是固定大小的,所以首先确定是否还有存储空间,若有,则根据原线性表中元素的有序性,来确定插入元素的插入位置,后面的元素为它让出位置,(也可以从高下标端开始一边比较,一边移位)然后插入x ,最后修改表示表长的变量。
int insert (datatype A[],int *elenum,datatype x) /*设elenum为表的最大下标*/ {if (*elenum==arrsize-1) return 0; /*表已满,无法插入*/else {i=*elenum;while (i>=0 && A[i]>x) /*边找位置边移动*/{A[i+1]=A[i];i--;}A[i+1]=x; /*找到的位置是插入位的下一位*/(*elenum)++;return 1; /*插入成功*/}}时间复杂度为O(n)。
数据结构与算法学习习题答案

数据结构与算法学习习题答案1. 简介数据结构与算法是计算机科学中非常重要的内容之一。
通过学习数据结构与算法,我们能够更好地理解和解决各种问题,提高程序的效率和性能。
本文将为大家提供一些常见的数据结构与算法习题的答案,帮助大家巩固和加深对该领域的理解和应用。
2. 数组2.1 翻转数组答案:可以使用两个指针,一个指向数组的头部,一个指向尾部,依次交换两个指针所指向的元素,直到两个指针相遇。
2.2 找出数组中的最大值和最小值答案:可以设定两个变量,一个用于保存最大值,一个用于保存最小值,然后遍历整个数组,依次比较每个元素与最大值和最小值的大小,并进行更新。
3. 链表3.1 反转链表答案:可以使用三个指针,分别指向当前节点、前一个节点和后一个节点。
依次将当前节点指向前一个节点,并更新三个指针的位置,直到当前节点变为NULL。
3.2 找出链表中的中间节点答案:可以使用两个指针,一个快指针和一个慢指针,快指针每次移动两个节点,慢指针每次移动一个节点,当快指针到达链表末尾时,慢指针所在的节点就是链表的中间节点。
4. 栈和队列4.1 有效的括号答案:可以使用栈来解决。
遍历字符串,当遇到左括号时,将其压入栈中;当遇到右括号时,判断栈顶元素是否为与之对应的左括号,若是,则弹出栈顶元素,否则返回False。
最后判断栈是否为空,若为空,则返回True,否则返回False。
4.2 设计一个最小栈答案:可以使用两个栈来解决。
一个栈用于保存正常的数据,另一个栈用于保存最小值。
每次插入操作时,同时更新最小值栈中的元素,保证最小值栈的栈顶元素一直为当前栈中的最小值。
5. 树与图5.1 二叉树的遍历答案:有三种常见的二叉树遍历方式:前序遍历、中序遍历和后序遍历。
前序遍历先遍历根节点,然后遍历左子树,最后遍历右子树;中序遍历先遍历左子树,然后遍历根节点,最后遍历右子树;后序遍历先遍历左子树,然后遍历右子树,最后遍历根节点。
5.2 广度优先搜索答案:广度优先搜索是一种图的遍历算法。
2014--浙江大学远程教育学院在线作业数据结构与算法100分讲解

您的本次作业分数为:100分单选题1.设散列表长为14,散列函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测法解决冲突,则放入的位置是____________。
A 8B 3C 5D 9正确答案:D单选题2.下列排序算法的时间复杂度最小的是____。
A 冒泡排序B 希尔排序C 简单选择排序D 归并排序正确答案:D单选题3.带头结点的单链表Head为空表的判定条件是______。
A Head->next==HeadB Head->next==NULLC Head!=NULLD Head==NULL正确答案:B4.若用二分查找法取得的中间位置元素键值大于被查找值,说明被查找值位于中间值的前面,下次的查找区间为从原开始位置至____。
A 该中间位置B 该中间位置-1C 该中间位置+1D 该中间位置/2正确答案:B单选题5.一组记录的关键字为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准元素得到的一次划分结果为。
A 38,40,46,56,79,84B 40,38,46,79,56,84C 40,38,46,56,79,84D 40,38,46,84,56,79正确答案:C单选题6.下面关于图的存储的叙述中,哪一个是正确的?A 用相邻矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关B 用相邻矩阵法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关C 用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关D 用邻接表法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关正确答案:A7.具有5个顶点的有向完全图有____条弧。
A 10B 16C 20D 25正确答案:C单选题8.数据结构课程主要研究以下三方面的内容,它们是______。
A 数据、数据元素、数据类型B 数据元素、数据类型、算法实现C 数据元素、数据的逻辑结构、数据的存储结构D 数据的逻辑结构、数据的存储结构、数据的运算正确答案:D单选题9.设二叉树根结点的层次为1,所有含有15个结点的二叉树中,最小高度是_____。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学远程教育学院《数据结构与算法》课程离线作业一、填空题:(【序号,章,节】。
)【1,1,2】线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
【2,1,2】为了最快地存取数据元素,物理结构宜采用序存储结构。
3,1,2】数据结构的三要素是逻辑结构,物理结构,操作。
【3,1,2】存储结构可根据数据元素在机器中的位置是否一定连续分为顺序存储结构,链式存储结构。
【4,1,3】度量算法效率可通过时间复杂度和空间复杂度__来进行。
【5,1,3】设n 为正整数,下面程序段中前置以记号@的语句的频度是n(n+1)/2。
for (i=0; i<n; i++){for (j=0; j<n; j++)if (i+j==n-1)@ a[i][j]=0;}【6,1,3】设n 为正整数,试确定下列各程序段中前置以记号@的语句的频度:(1) i=1; k=0;while (i<=n-1){i++;@ k+=10 * i; // 语句的频度是_____ n-1_______________。
}(2) k=0;for (i=1; i<=n; i++){for (j=i; j<=n; j++)1@ k++; // 语句的频度是_____ n(n+1)/2________________。
}【7,3,2】线性表(a1,a2,…,a n)有两种存储结构:顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:_顺序存储结构__ 存储密度较大;_顺序存储结构___存储利用率较高;_顺序存储结构___可以随机存取;_链式存储结构____不可以随机存取;__链式存储结构__插入和删除操作比较方便。
【8,3,2】从一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动n-i个元素。
【9,3,2】带头结点的单链表Head为空的条件是____ Head->next==null_____【10,3,2】在一个单链表中p所指结点(p所指不是最后结点)之后插入一个由指针s所指结点,应执行s->next=__ p->next___;和p->next=___s _____的操作。
【11,3,2】在一个单链表中删除p所指结点时,应执行以下操作:q= p->next;p->data= p->next->data;p->next= p->next->next_ ;free(q);【12,3,2】带头结点的单循环链表Head的判空条件是_ Head->next==null ____;不带头结点的单循环链表的判空条件是__ Head==null___。
【13,3,2】已知L是带表头结点的非空单链表, 且P结点既然不首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a. 删除P结点的直接前驱结点的语句序列是_10 12 8 11 4 14______。
b. 删除结点P的语句序列是_____10 12 7 3 14___________。
c. 删除尾元结点的语句序列是______9 11 3 14___________。
(1) P = P->next;(2) P->next = P;2(3) P->next = P->next ->next;(4) P = P->next ->next;(5) while (P != NULL) P = P->next;(6) while (Q->next != NULL){P = Q; Q = Q->next};(7) while (P->next != Q) P = P->next;(8) while (P->next->next != Q) P = P->next;(9) while (P->next->next != NULL) P = P->next;(10) Q = P;(11) Q = P->next;(12) P = L;(13) L = L->next;(14) free (Q);【14,3,3】对一个栈,给定输入的顺序是A、B、C,则全部不可能的输出序列有C A B。
【15,3,3】.在栈顶指针为HS的链栈中,判定栈空的条件是head->next==null。
【16,3,3】下列程序把十进制数转换为十六进制数,请填写合适的语句成分。
void conversion10_16(){ InitStack(&s);scanf(“%d”,&N);while(N){____ Push(s, N%16) _____ ___ ;N = N/16;}while(!StackEmpty(s)){_______ Pop(s, e);if(e<=9)printf(“%d”,e);else printf(“%c”,e-10+’A’);}} /* conversion */【17,3,4】若用一个大小为6个元素的数组来实现循环队列,且当前rear=0和front=3。
当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是 2 和4 。
【18,3,4】堆栈和队列都是线性表, 堆栈是___后进先出__的线性表, 而队列是________3先进先出___的线性表。
【19,3,4】若用一个大小为6个元素的数组来实现循环队列,且当前rear=0和front=3。
当从队列中删除一个元素,再加入两个元素后,rear和front的值分别是2 和 4 。
【20,4,2】已知一棵树边的集合是{<a,d>,<d,c>,<d,j>,<e,a>,<f,g>,<d,b>,<g,h>,<g,i>,<e,f>}。
那么根结点是e,结点b的双亲是d,结点a的子孙有bcdj ,树的深度是4,树的度是3,结点g在树的第3层。
【21,4,3】从概念上讲,树与二叉树是二种不同的数据结构,将树转化为二叉树的基本的目的是树可采用二叉树的存储结构并利用二叉树的已有算法解决树的有关问题【22,4,3】满三叉树的第i层的结点个数为3i-1,深度为h时该树中共有3h-1结点。
【23,4,3】已知一棵完全二叉树有56个叶子结点,从上到下、从左到右对它的结点进行编号,根结点为1号。
则该完全二叉树总共结点有___111_____个;有__7_____层;第91号结点的双亲结点是___45____号;第63号结点的左孩子结点是_________号。
【24,4,3】下列表示的图中,共有____5___个是树;有___3____个是二叉树;有___2____个是完全二叉树。
4【25,4,4】n个结点的二叉排序树的最大深度是n,最小深度为[log2ⁿ]+1_ 【26,4,3】如果某二叉树的后序遍历序列是ABCDEFGHI,中序遍历序列是ACBIDFEHG ,则其先序遍历序列的第一个字母是I,最后一个字母是G。
【27,4,3】下列二叉树的中序遍历序列是____ DBNGOAEC ____ ___;后序遍历序列是________ DNOGBECA ___。
5【28,5,4】设HASH表的大小为n (n=10), HASH函数为h(x)=x % 7,如果二次探测再散列方法Hi=(H(key)+di) mod 10 (di = 12,22,32,…,)解决冲突,在HASH表中依次插入关键字{1,14,55,20,84,27}以后,关键字1、20和27所在地址的下标分别是、______ 和。
插入上述6个元素的平均比较次数是。
答案:1、7、5、2【29,6,3】设无权图G的邻接矩阵为A,若(vi,vj)属于图G的边集合,则对应元素A[i][j]等于1,22、设无向图G的邻接矩阵为A,若A[i][j]等于0,则A[j][i]等于0。
【30,6,3】若一个图用邻接矩阵表示,则删除从第i个顶点出发的所有边的方法是矩阵第i行全部置为零。
【31,6,2】设一个图G={V,{A}},V={a,b,c,d,e,f},A={<a,b>,<b,e>,<a,e>,<c,a>,<e,d>,<d,f>,<f,c>}。
那么顶点e的入度是2;出度是1;通过顶点f的简单回路有2条;就连通性而言,该图是强连通图图;它的强连通分量有1个;其生成树可能的最大深度是5。
【32,7,1】排序过程一般需经过两个基本操作,它们是比较和移动。
【33,7,2】在对一组关键字是(54,38,96,45,15,72,60,23,83)的记录进行直接插入排序时,当把第七个记录(关键字是60)插入到有序表时,为寻找插入位置需比较3次6分别与54、72、96比较【34,7,4】插入排序、希尔排序、选择排序、快速排序、堆排序、归并排序、和基数排序方法中,不稳定的排序方法有选择排序、快速排序、堆排序、希尔排序78 二、综合题(选自教材《数据结构》各章习题,采用word 文件格式上传)【1,1,3】试分析下面一段代码的时间复杂度:if ( A > B ) {for ( i=0; i<N; i++ )for ( j=N*N; j>i; j-- )A += B;}else {for ( i=0; i<N*2; i++ )for ( j=N*2; j>i; j-- )A += B;}if 中的时间复杂度为:O(n*n ²)即O(n ³)else 中的时间复杂度为:O(n*n)即O(n ²)【2,1,3】测试例1.3中秦九韶算法与直接法的效率差别。
令i x x f i i /1)(1001∑=+=,计算)1.1(f 的值。
利用clock()函数得到两种算法在同一机器上的运行时间。
答:从运行结果可以看出秦九昭算法效率上有很大优势;#include <stdio.h>#include <time.h>#include <math.h>clock_t start,stop;double duration;#define MAXN 10#define MAXK 1e7double f1(int n ,double a[],double x);double f2(int n ,double a[],double x);//秦九昭算法double f1(int n ,double a[],double x){int i =0 ;double p = a[0];for(i=n;i>0;i--)p = a[i-1] + x * p;return p;}//直接算法double f2(int n ,double a[],double x){int i =0 ;double p = a[0];for(i=n;i>0;i--)p += a[i]*pow(x,i);return p;}int main(){int i ;double a[MAXN] ;for(i=0;i<MAXN;i++)a[i]=(double)i;start = clock();for(i=0;i<MAXK;i++)f2(MAXN-1,a,1.1);stop = clock();duration = ((double)(stop-start))/CLK_TCK/MAXK ;printf("直接算法:");printf("ticks = %f\n",(double)(stop-start));910printf("duration = %6.2e\n",duration);for (i=0;i<MAXN;i++)a[i]=(double )i;start = clock();for (i=0;i<MAXK;i++)f1(MAXN-1,a,1.1);stop = clock();printf("秦九昭算法:");printf("ticks = %f\n",(double )(stop-start));printf("duration = %6.2e\n",duration);return 0;} 【3,1,3】 试分析最大子列和算法1.3的空间复杂度。