苏州大学-数据结构-课程期中考试答案

合集下载

数据结构期中试题及参考答案

数据结构期中试题及参考答案

}LNode, *LinkList;
阅读算法 f31,并回答问题;
(1)设节点结构为id score next
,成绩链表 A 和 B 如图所示,画
出执行算法 f31(A,B)后节点 A 所指的链表;
A
1 70
2 40
3 90
4 48
5 56
B
2 38
4 65
题 31 图
(2)减速算法 f31 的功能。 Void f31(LinkList A, LinkList B) { LinkList p,q; p = A->next; q = B->next; while (p && q) { if(p->id < q->id) p = p ->next; else if(p->if > q-> id) q =q –>next; else { if (p->score < 60)
I + = j + lt ;
}
}while (i+lt <= ls && j>=0);
Return k;
}

五、算法设计题(本题 14 分) 34.假设线性表采用顺序存储结构,其类型定义如下:
#define ListSize 100 typedef struct{
int data[ListSize]; int length; }SeqList, *Table; 编写算法,将顺序表 L 中所有值为奇数的元素调整到表的前端。
(1)设 n=10,元素
p=8

存储在 sa[p],写出下标 p 的值;
题 3-1 图

数据结构期中笔试题答案

数据结构期中笔试题答案

《数据结构》期中考试题答案一、填空题(20分,每题2分)1.逻辑结构、存储结构2.便于插入和删除操作3.方便运算的实现4.算法执行过程中所需要的基本运算次数5.存储结构6.q.next=p.next ; p.next=q7.递归算法8.抽象类或接口二、选择题(30分,每题2分)AACBB BDDCB AACAC三、问答题(50分,每题10分)1.什么是栈和队列?两者有何异同?答:栈和队列都属于线性表结构,它们是两种特殊的线性表,栈的插入和删除操作都在线性表的一端进行,所以栈的特点是“后进先出”;而队列的插入和删除操作分别在线性表的两端进行,所以队列的特点是“先进先出”。

2.采用顺序存储结构的栈和队列,在进行插入、删除操作时需要移动数据元素吗?为什么?答:采用顺序存储结构的栈和队列,在进行插入、删除操作时不需要移动数据元素,因为栈和队列均不能进行中间插入、删除操作。

3.什么是队列的假溢出?为什么顺序存储结构队列会出现假溢出?怎样解决队列的假溢出问题?链式存储结构队列会出现假溢出吗?答:顺序队列,当入队的元素个数(包括已出队元素)超过数组容量时,队列尾下标越界,数据溢出。

此时,由于之前已有若干元素出队,数组前部已空出许多存储单元,所以,这种溢出并不是因存储空间不够而产生的,称之为假溢出。

顺序队列之所以会产生假溢出现象,是因为顺序队列的存储单元没有重复使用机制。

解决的办法是将顺序队列设计成循环结构。

链式存储结构队列不会出现假溢出。

因为每次元素入队,都要申请新结点,数据不会溢出。

4.答案:(1) (a2, a4, …, ) (2)将单链表中偶数结点位置的元素值写入顺序表list5.数据的存储结构有哪两种,各有什么特点?答:数据存储结构的基本形式有两种:顺序存储结构和链式存储结构。

顺序存储结构使用一组连续的内存单元依次存放数据元素,元素在内存中的物理存储次序与它们的逻辑次序相同。

链式存储结构使用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,数据元素间的关系需要采用附加信息特别指定。

数据结构期中测试题答案

数据结构期中测试题答案
《数据结构》期中测试
班级:
姓名:
学号:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根1保据过护生管高产线中工敷资艺设料高技试中术卷0资配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中2体2资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况1卷下中安与,全过要,度加并工强且作看尽下护可1都能关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编.工写保况复护进杂层行设防自备腐动与跨处装接理置地,高线尤中弯其资曲要料半避试径免卷标错调高误试等高方,中案要资,求料编技试5写术卷、重交保电要底护气设。装设备管置备4高线动调、中敷作试电资设,高气料技并中课3试术且资件、卷中拒料中管试包绝试调路验含动卷试敷方线作技设案槽,术技以、来术及管避系架免统等不启多必动项要方高案式中;,资对为料整解试套决卷启高突动中然过语停程文机中电。高气因中课此资件,料中电试管力卷壁高电薄中气、资设接料备口试进不卷行严保调等护试问装工题置作,调并合试且理技进利术行用,过管要关线求运敷电行设力高技保中术护资。装料线置试缆做卷敷到技设准术原确指则灵导:活。在。对分对于线于调盒差试处动过,保程当护中不装高同置中电高资压中料回资试路料卷交试技叉卷术时调问,试题应技,采术作用是为金指调属发试隔电人板机员进一,行变需隔压要开器在处组事理在前;发掌同生握一内图线部纸槽故资内障料,时、强,设电需备回要制路进造须行厂同外家时部出切电具断源高习高中题中资电资料源料试,试卷线卷试缆切验敷除报设从告完而与毕采相,用关要高技进中术行资资检料料查试,和卷并检主且测要了处保解理护现。装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

数据结构期中考试试题及答案

数据结构期中考试试题及答案

一、单项选择题(本题总分 20分,每题 2分)在每小题列出的四个选项中只有 一个选项是符合题目要求的,请将正确选项前的字母。

1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D ) 。

A.顺序表 B.链表 C.索引表 D.散列表采用排除法,顺序表存储位置表示数据元素的顺序关系,跟关键字无法;链表的地址是动态分配的;索引表是 按数据元素的关键字排序所得,它的数据元素是没有规律的2.在长度为 n 的顺序表的第 i(1≤i ≤n+1)个位置上插入一个元素,元素的移动次数为( A ) 。

A.n -i+1B.n -iC.iD.i -1代入计算法,我们知道在 i=n+1 时不需要移动元素3.若一棵二叉树的先序遍历序列为 a,b,c ,则由 abc 三个结点构成的二叉树个数为( B ) 。

A.4B.5C.6D.74.三维数组 A[4][5][6]按行优先存储方法存储在内存中,若每个元素占 2 个存储单元,且数组中第一个元素的存 储地址为 130,则元素 A[3][4][5]的存储地址为(B A.370B .368C .366) 。

D.372Loc(3,4,5)=loc(0,0,0)+(3*5*6+4*6+5)*2=130+119*2=368;5.高度为 h 的二叉树(仅含根结点的二叉树高度为 1)的结点最少是多少( D) 。

A. h+1B. 2hC. 2h -1D. h二叉树性质 26. 将两个各有 n 个元素的有序表归并成一个有序表,其最多的比较次数是( A. nB.n+1 C. 2n-1D. n-17. 已知一算术表达式的中缀形式为 A +B *C -D/E ,后缀形式为 ABC *+DE/-,其前缀形式为( C) 。

A )。

A. -+A*BC/DE C. -+*ABC/DEB. –A+B*CD/E D. –A+B*C/DE根据中缀和后缀表达式可画出表达树如下:- + /A* D EBC故前缀表达式为:-+A*BC/DE数据结构期中考试8.下面图示的顺序存储结构表示的二叉树是( A )。

数据结构课程试卷10卷参考答案

数据结构课程试卷10卷参考答案

苏州大学数据结构课程10卷参考答案(共 5 页)院系专业 __________一、填空题(每题3分,共30分)1、7500;6252、10883、线性表;入栈;出栈4、n2+1 ; 2k-15、hdiebjkfca6、 227、深度优先;广度优先;10;从源点到汇点路径长度之和最长的路径8、299、1; 710、wpl=(2+5)*3+(7+9+13)*2=79 。

二、应用题(每题8分,共40分)因为队列的入队和出队在顺序队列的两端进行,可能造成队列空间未用完但队列指针已经越界,从而产生虚溢出。

(2分)解决虚溢出的方法是采用循环队列。

(2分)队空条件为:q.front=q.rear (2分)队满条件为:q.front=(q.rear+1)mod m (2分)2、(1)(4(2)(2分)(3)ASL=(1+1+2+1+2+1+1+3+1+3+1)/11=17/11 (2分)3、最小生成树:(4分)邻接矩阵:1 2 3 4 5 60 10 0 0 15 1210 0 5 6 0 70 5 0 6 0 00 6 6 0 0 815 0 0 10 0 1212 7 0 8 12 0(4分)4、(1(4分)(2)R1={4,5,6,7,8,9,16,18,20}。

(2分)(3)R2={5,6,4,9,8,18,20,16,7}。

(2分)三、算法设计题(每题10 分,共30分)1、假设用带头结点的单链表作为线性表的存储结构,编写在线性表中第i个元素前插入值为x的元素的算法。

deleteinsert(la,x) /*从表la中删除值为x的元素*/linklist *la;/*la分别为linklist类型的指针变量*/{linklist *p,*q;p=la;q=p->next; (3分)while (q!=null)if (q->data=x) {p->next=q->next ;dispose(q);q=p->next;} (4分)else {p=q;q=q->next;} (3分)2、int count(t,num)bitree *t;int num;{if (t) (2分)if ((t->lchild!=null) && (t->lchild==null)||(t->lchild==null) && (t->lchild!=null)) (2分)num=num+1;count(t->lchild,num); (2分)count(t->rchild,num); (2分)return(num); (2分)} /*count */3、#define INFINIY MAX_WEIGHTV oid converttu(AdjGraph *G1,ALGraph *G2)int{i,j;LinkNode *p;G2->vernum=G1->vernum;G2->e=G1->e; (3分)for (i=0;i< G1->vernum;i++){G2->adjlist[i].vexdata=G1->vexs[i];G2->adjlist[i].first=null;}for (i=0;i< G1->vernum;i++)for (j=0;j< G1->vernum;j++)if (G1->adj[i][j]<INFINITY){p=(LinkNode *)malloc(sizeof(LinkNode)) (3分)p->weight=adj[i][j];p->adjvex=j;p->next=G2->adjlist[i].first;G2->adjlist[I].first=p;}return; (3分)}O(n2) (1分)。

数据结构期中考试试题答案c语言版本

数据结构期中考试试题答案c语言版本
S 1 0 3 2 1
R @ - * ( +
S 1 0 3 2 1 +
R@ - *
S 1 0 3 2 1 + * - 3 1
R@ + ( -
S 1 0 3 2 1 + * - 3 1 - 2
R@ + /
S 1 0 3 2 1 + * - 3 1 - 2 / +
R
S 1 0 3 2 1 + * - 3 1 - 2 / + @ \0
3.在带附加表头的循环双向链表中, 表头附加结点 的 左 指针域指向最后一个结点,最后一个结点的 右 指针域指向 表头附加 结点。
4.在以HL为表头指针的带附加结点的单链表和循环单链表中,链表为空的条件分别为
HL->next==NULL 和 HL==HL->next 。
5.在由数组a中元素结点构成的单链表中,删除下标为i的结点后,需要把该结点插入到空闲表的表头,具体操作为 a[i].next=a[1].next 、 a[1].next=i 。
8.一个广义表中的元素分为 单 元素和 表 元素两类。
9.广义表A=((a,(b,(),c),((d),e)))的长度为 1 ,深度为 4 。
10.向一个顺序栈插入一个元素时,首先应 top++ ,然后再将待插入元素 放入栈顶位置 。
11.对于队列,应在 队尾 进行插入,在 队首 进行删除。
12.中缀表达式2+7/(4-1)所对应的后缀表达式为 2 7 4 1 - / + @ 。
数据结构期中考试试题答案
一、 单选题(每小题2分,共8分)
1.在一个长度为n的线性表中顺序查找值为x的元素时,查找成功时的平均查找长度(即x同元素的平均比较次数,假定查找每个元素的概率都相等)为 C 。

数据结构期中试卷V8-附答案3B

数据结构期中试卷V8-附答案3B

苏州大学《数据结构》课程期中试卷共 10 页参考答案一、单项选择题(20%)1、数据结构是一门研究____的程序设计问题中,计算机的操作对象及其关系和操作等的学科。

[A]:数据类型[B]:抽象数据类型[C]:数值计算[D]:非数值计算[答案1]:D2、计算机科学知识体中,数据结构课程属于____领域的综合性专业基础课。

[A]:离散结构Discrete Structures (DS)[B]:程序设计语言Programming Languages (PL)[C]:算法与复杂性Algorithms and Complexity (AL)[D]:程序设计基础Programming Fundamentals (PF)[答案2]:D3、数据结构中,与计算机存储器无关的是数据的_____结构。

[A]:物理[B]:线性[C]:存储[D]:逻辑[答案3]:D4、数据结构可记为DS = {D, R},其中D是数据对象,R是D中所有成员之间_____的有限集合。

[A]:操作[B]:组织[C]:运算[D]:关系[答案4]:D5、具有相同性质的数据集合及在这个集合上的一组____,称为数据类型。

[A]:结构[B]:算法[C]:关系[D]:操作[答案5]:D6、数据的物理结构不包括_____。

[A]:顺序(sequence)[B]:链接(link)和数组[C]:索引(index)和散列(Hash)[D]:树(tree)和图(graph)[答案6]:D7、在n较大情况下,下列时间复杂度T(n)中,效率较高的为_____。

[A]:O(2n)[B]:O(10*n2)[C]:O(10*n)[D]:O(100*log2n)[答案7]:D8、顺序表的特点有_____。

[A]:插入、删除效率高[B]:存储空间能动态分配[C]:逻辑关系与物理位置不一致[D]:可方便随机存取数据元素[答案8]:D9、链表的特点有_____。

[A]:插入、删除效率低[B]:逻辑关系与物理位置一致[C]:存储空间不能静态分配[D]:随机存取数据元素效率低[答案9]:D10、链表用一组任意的存储单元来依次存放线性表的结点,这组存储单元_____。

《数据结构》期中题库及答案

《数据结构》期中题库及答案

一、判断题:1、线性表的逻辑顺序与物理顺序总是一致的。

( )2、线性表的顺序存储表示优于链式存储表示。

( )3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。

( )4、二维数组是其数组元素为线性表的线性表。

( )5、每种数据结构都应具备三种基本运算:插入、删除和搜索。

( )6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。

( )7、线性表中的每个结点最多只有一个前驱和一个后继。

()8、线性的数据结构可以顺序存储,也可以链接存储。

非线性的数据结构只能链接存储。

()9、栈和队列逻辑上都是线性表。

()10、单链表从任何一个结点出发,都能访问到所有结点()11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。

()12、快速排序是排序算法中最快的一种。

()13、多维数组是向量的推广。

()14、一般树和二叉树的结点数目都可以为0。

()15、直接选择排序是一种不稳定的排序方法。

()16、98、对一个堆按层次遍历,不一定能得到一个有序序列。

()17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。

()18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。

()19、堆栈在数据中的存储原则是先进先出。

()20、队列在数据中的存储原则是后进先出。

()21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。

()22、哈夫曼树一定是满二叉树。

()23、程序是用计算机语言表述的算法。

()24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。

()25、用一组地址连续的存储单元存放的元素一定构成线性表。

()26、堆栈、队列和数组的逻辑结构都是线性表结构。

()27、给定一组权值,可以唯一构造出一棵哈夫曼树。

()28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。

数据结构期中测试题答案

数据结构期中测试题答案

《数据结构》期中测试班级:姓名:学号:一、填空题:1、在数据结构中,从逻辑上可以把数据结构分为集合、线性结构、树形结构和图状结构,其中树形结构和图状结构合称为非线性结构。

数据结构被形式地定义为二元组(D,S),其中D是数据元素的有限集合,S是D上关系的有限集合。

2、算法的五个重要特性是有穷性、确定性、可行性、输入和输出。

3、一个顺序表第一个元素的存储地址是100,每个元素的长度为3,则第6个元素的地址是115。

在顺序表中插入或删除一个元素,需要平均移动(n+1)/2个元素,具体移动的元素个数与插入或删除元素的位置有关。

顺序表中逻辑上相邻的元素的物理位置相邻。

单链表中逻辑上相邻的元素的物理位置不一定相邻。

单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的指针域指示。

在单链表中设置头结点的作用是使第一个结点与其他结点的操作统一。

4、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个结点。

在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是O(n)。

给定有n个元素的线性表,建立一个有序单链表的时间复杂度是O(n2)。

5、已知L是无表头结点的非空单链表,且指针p所指结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

在p所指结点后插入s所指结点:4、1。

在p所指结点前插入s所指结点:7、11、8、4、1。

在表首插入s所指结点:5、12。

在表尾插入s所指结点:11、9、1、6。

1)p->next=s;2)p->next=p->next->next;3)p->next=s->next;4)s->next=p->next;5)s->next=L;6)s->next=NULL;7)q=p;8)while(p->next!=q) p=p->next;9)while(p->next!=NULL) p=p->next;10)p=q;11)p=L;12)L=s;13)L=p;6、已知指针p所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。

数据结构期中考试试题及答案

数据结构期中考试试题及答案

2014-2015学年第二学期《数据结构与算法》期中考试学号:姓名:一、写语句1.设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。

2.设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作3. 设双向循环链表中结点的数据域、前驱和后继指针域分别为data,pre和next,试写出在指针p 所指结点之前插入s结点的C语言描述语句。

4. 一线性表存储在带头结点的双向循环链表中,L为头指针。

如下算法:(1)说明该算法的功能。

(2)在空缺处填写相应的语句。

void unknown (BNODETP *L){ …p=L->next; q=p->next; r=q->next;while (q!=L){ while (p!=L) && (p->data>q->data) p=p->prior;q->prior->next=r;(1) ______;q->next=p->next;q->prior=p;(2) ______;(3) ______;q=r;p=q->prior;(4) ______;} }二、写算法1.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2) 在单链表将比正整数x小的数按递减次序排列;(3) 将正整数(比)x大的偶数从单链表中删除。

2. 设键盘输入n个英语单词,输入格式为n, w1, w2, …,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:(1)如果单词重复出现,则只在链表上保留一个。

数据结构期中考试答案解析

数据结构期中考试答案解析

数据结构期中试卷及答案解析考试说明考试说明:考察前五章小题,难度接近真题。

满分100分,共20道选择题,每题5分。

请在60分钟内完成。

C T(n)=n3+5000nD T(n)=2nlogn-1000n参考答案:C本题考察时间复杂度,多个项相加时,只保留最高阶项由于巴啦啦能量——“常<对<幂<指<阶”,因此T(n)=logn+5000n=O(n)T(n)=n2-8000n=O(n2)T(n)=n3+5000n=O(n3)T(n)=2nlogn-1000n=O(nlogn)所以O(n3)复杂度最大,选C。

3.下列叙述中正确的是()①线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比②线性表在链式存储时,查找第 i 个元素的时间同 i 的值无关③线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比A. 仅①B. 仅②C. 仅③D. ①②③参考答案:A线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比。

线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关4.若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。

A. 单链表B. 双向链表C. 单循环链表D. 顺序表参考答案:D注意到,题目要求存取第i个元素及其前驱和后继,ABC三个选项找到第i个元素的时间复杂度均为O(n),而D选项对于这3个位置的存取的时间复杂度均为O(1),故选D。

5.静态链表中next域表示的是()A 下一个元素的地址B 下一个元素的值C 当前元素的值D 下一个元素在数组中的位置参考答案:D静态链表一般保存在数组中,它和链表最大的区别是静态链表占用一段固定的区间,所以next域只需要表示下一个元素在数组中的下标即可而不是表示下一个元素的地址,选D。

6.对于不带头结点的链栈L(next域表示该结点下一个元素),top指针指向栈顶元素(栈顶在链头方向),则x结点进栈操作为A top->next=x;top=x;B top=x;top-next=x;C top=x;x->next=top;D x->next=top;top=x;参考答案:D本题考察链栈的操作x入栈之后x下一个元素为原来的top,所以先把x->next=top,然后更新top,栈顶元素指向x。

数据结构_期中试卷(含答案)

数据结构_期中试卷(含答案)

一、选择题(每小题 1分,共10分)1、队列是插入和删除受限的线性表,其删除操作是在线性表的(1)进行。

A.表头 B.表尾 C.任意位置 D.指定位置2、下述哪一条是顺序存储结构的优点(2)。

A.存储密度大 B.插入运算方便C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示3、设有一个栈,元素的进栈次序为A, B, C, D, E,下列哪个是不可能的出栈序列(3)。

A.A, B, C, D, E B.B, C, D, E, AC.E, A, B, C, D D.E, D, C, B, A4、若二叉树的根结点所在的层次为第1层,则该二叉树的第k层上至多有(4)个结点。

2k B.2k C.2k-1 D.2k+1A. 15、设单链表中指针p指向结点m,若要删除m的后继结点(假设该后继结点存在),则需修改指针的操作为(5)。

A.p->next=p->next->next; B.p=p->next;C.p=p->next->next; D.p->next=p;6、下面程序段的时间复杂度为(6)。

for(int i=0; i<m; i++)for(int j=0; j<n; j++) a[i][j] = i*j;A.O(m2) B.O(n2) C.O(m+n) D. O(m*n)7、非空的循环单链表head的尾结点指针p满足(7)。

A.p==NULL B.p== head C.p->next==head D.p->next==NULL8、已知二维数组A[0..9,0..9]中,元素a[2][0]的地址为560,每个元素占4个字节,则元素a[1][0]的地址为(8)。

A. 518B. 520C. 522D. 5249、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为(9)。

A.rear%n= = front B.(front+l)%n= = rearC.rear%n -1= = front D.(rear+l)%n= = front10、假设在一棵二叉树中,度为2的结点数为15,度为1的结点数为10个,则该二叉树的分支总数为(10)个。

答案《数据结构》期中参考试卷

答案《数据结构》期中参考试卷

厦门大学《_数据结构_》课程期中试卷信息科学与技术学院计算机科学系__年级___专业主考教师:____试卷类型:(A卷/B卷)任选5题((1,2),(3,4),(5,6),(7,8)中必须至少做一题),每题20分。

一、试设计一个双栈结构,它有两个端点end1和end2,满足从end1端插入的表目只能从end1端被删除,从end2端插入的表目只能从end2端被删除,并给出指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述。

再设计一个算法,它能够将一个有限长度的数据序列a1,a2,…,an,按照下标奇偶序号交替的方式将ai (1≤i≤n)分别从两端入栈,然后将数据出栈以实现整个数据序列的倒排。

该双栈宜采用顺序存储、栈顶迎面增长的存储方式,其形式定义如下:#define STACK_SIZE 1000typedef struct {SElemType base[STACK_SIZE];SElemType *top[3]; //top[1]表示end1端的栈顶指针,top[2]表示end2端的栈顶指针//初始值分别为base和base+STACK_SIZE-1}DSqStack;指定端i(i=1,2)的进栈push(S,e,i)和出栈pop(S,e,i)操作的算法描述如下:Status push(DSqStack &S, SElemType e, int i) {if ( S.top[1]-S.top[2]==1 ) //栈满exit(OVERFLOW);else if (i==1)*S.top[1]++ = e;else if (i==2)*S.top[2]-- = e;elsereturn ERROR;return OK;}Status pop(DSqStack &S, SElemType &e, int i) {if (i==1) {if ( S.top[1] == S.base ) return ERROR;e = *--S.top[1] = e;return OK;}else if (i==2) {if (S.top[2] == S.base+STACK_SIZE-1) return ERROR;e = *++S.top[2];return OK;} elsereturn ERROR;}基于上述结构的数据序列的倒排算法描述如下:Status resevers(DSqStack &S, SElemType a[], int n) {for (j=1;j<=n;j++)if (j%2==0) push(S, a[j-1],2);else push(S, a[j-1],1);for (j--;j>=1;j--)if (j%2==0) pop(S, a[n-j],2);else pop(S, a[n-j],1);return OK;}二、利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算。

数据结构期中考试答案

数据结构期中考试答案

9. 在 单 链 表 L 中 , 指 针 p 所 指 结 点 有 后 继 结 点 的 条 件 是 :
__(14)p->next!=NULL

10. 串是有 n(n>=0)个字符组成的有限序列;在 C 语言里用 (15)数组
存储串,并在串末尾加上 (16) ‘\0’ 作为串的结束标志。
11. 串的链式存储结构包括 (17)单字符结点链 和 (18)块 链。 12. 稀疏矩阵的压缩存储一般采用 (19)三元组 顺序表。 13. 递归算法直接或者间接调用了 (20)函数本身 。 二、 综合题(总分 60) 1.设计一数据结构,用来表示某一银行储户的基本信息: 账号、姓名、开
9. rear 是指向以循环链表表示的队列的队尾指针,EnLQueue 函数实现把 x 插入到队尾
的操作。DeLQueue 函数实现删除队头元素并赋给 x 的操作。根据题意按标号把合适的
内容填写到算法后面相应标号的位置。(队列元素的数据类型为 ElemType)【6 分】 void EnLQueue(ListNode *rear, ElemType x)
6. 在单链表中设置头结点的作用是_(9)使得删除插入等操作处理方法
相同
7. 栈是一种特殊的线性表,允许插入和删除操作的一端称为 (10)栈
顶 ,不允许插入和删除操作的一端称为 (11)栈底 。
8. 在顺序循环列队中,队空标志为____(12_cou(13)_Q->rear==Q->front&&count>0_________。
《数据结构》期中考试试卷
一、 填空题(每空 1 分,共 20 分)
1. 数据的物理结构包括 (1)顺序 的表示和 (2)链式 的表示。

最新苏州大学数据结构期中复习

最新苏州大学数据结构期中复习

一、题型(填空2*15 应用题5*10 算法设计题2*10)算法设计题,包括书上定义的各类的方法,以及自己添加的类方法或调用类的外部函数。

有30分左右的英文题目,答题可全部用中文。

二、复习素材a)课件b)书后习题及补充习题,特别是做过的习题,课件和做过的习题答案已全部放在实验平台上可供下载192.168.131.161。

c)实验题中的一些算法实现d)本复习提纲需下载的同学请至实验平台下载第7章“作业”。

第一章1、计算某一条语句执行次数2、时间复杂度计算。

3、hedge第二章栈1、栈的抽象数据类型定义和基本操作,ADT定义的两个部分。

2、线性表和数组区别3、栈的特点、性质(LIFO, overflow, underflow, push, pop后栈的状态)、双栈共享空间、利用栈的方法实现栈的其他操作的算法,如:copy_stack等。

4、栈类定义及顺序实现(包括各个方法的具体实现)5、逆波兰式计算器、括号匹配等应用第三章队列1、掌握队列的抽象数据类型定义和基本操作、扩展的队列操作。

2、队列的特点、性质(FIFO,入队、出队后不改变原序列)3、队列的类定义及顺序实现,顺序队列产生的问题!如何解决?4、利用循环队列产生的问题(队空队满条件相同的问题)?有哪些解决方案?5、循环队列实现算法。

(包括各个方法的具体实现)第四章链栈和链队列1、链表结点类定义p 1232、不使用safeguards的链栈(链队列,链表),可能会产生的一些问题剖析!如垃圾的累积,破坏封装特性等问题!举例说明?P131-136,分析算法中的错误。

3、链栈类定义、具体实现(包括各个方法的具体实现)4、链队列定义、具体实现(包括各个方法的具体实现)第五章递归1、什么是递归,递归的种类,栈与函数调用,什么是调用记录2、汉诺塔算法实现过程3、递归算法递归树的画法第六章线性表和串1、线性表的概念和基本操作2、顺序线性表的类定义和实现。

3、两种单链表的方法实现。

数据结构期中试卷参考答案

数据结构期中试卷参考答案

1.评价算法优劣的基本标准有哪些?请就每一项给出简短说明。

答:(1)正确性:对输入的合法数据(包括边界情况),都能有正确的输出结果。

(2)健壮性:对输入的非法数据,算法能适当地做出反应或进行处理,而不是产生莫名其妙的输出结果。

(3)可读性:有助于人对算法的理解,易于发现错误,便于调试和修改。

(4)效率与低存储量需求:效率和存储量需求分别指算法执行所需要的时间和最大存储空间。

2.已知一棵二叉树的中序和后序序列分别为GLDHBEIACJFK和LGHDIEBJKFCA,(1)画出这棵二叉树,对这棵二叉树的构造过程给出一个简短说明;(2)将这棵二叉树理解为“孩子-兄弟法”表示的森林,画出这个森林。

答:(1)构造出的二叉树如图1所示:图1构造过程说明:①后序序列的最后一个元素为A, 得知二叉树的根为A;②在中序序列中找到树根A, A左侧的部分GLDHBEI为左子树的中序序列,A右侧的部分CJFK为右子树的中序序列。

并得知左子树7个节点,右子树4个节点;③后序序列的前7个节点LGHDIEB是左子树的后序序列,后续序列的后4个节点JKFC是右子树的后序序列;④根据中序GLDHBEI后序LGHDIEB求左子树,根据中序CJFK后序JKFC 求右子树。

依此类推,便可唯一构造出此二叉树。

(2)“孩子-兄弟表示法”,又称二叉链表表示法,链表中结点的两个链域分别指向该结点的第一个孩子和下一个兄弟结点,一棵二叉树与森林一一对应,该森林如图2所示:图23.字符A,B,C,D,E,F,G的使用频度分别是15,8,10,21,6,19,3,写出A,B,C,D,E,F,G的Huffman编码,列出编码过程,解释Huffman 有什么优点。

解:编码过程如下:各字符编码为字符 A B C D E F G编码011 110 010 00 1111 10 1110优点:Huffman编码为前缀码,它根据结点出现的频度由低到高编码,则可以使频度较高的结点有尽可能短的编码,从而使整个发送文件的总编码长度尽可能短。

《数据结构》期中测试答案

《数据结构》期中测试答案

数据结构2010年下学期 考试时间:100分钟 考试形式:闭卷(所有答案写在答题纸上,请在答题纸上注明班级、学号) 一、概念题(每题 2 分,共 24分) 1、从逻辑角度看,数据可归结为四类基本结构:集合、线性结构、 树状结构 和 图状结构 。

2、算法效率度量分析的两个基本指标是 时间复杂度 和 空间复杂度 。

前者是基于算法执行时间的度量,后者是基于算法所需存储空间的度量。

3、线性表顺序存储的特点是:表中相邻的元素a i 和a i+1所对应的存储地址 LOC (a i )和LOC(a i+1)也是____相邻_____的。

设线性表a 的起始地址为LOC(a 1),每个数组元素所占用的存储单元数为b ,则表中第i(1≤i ≤n)个元素a i 的存储起始地址LOC(a i )可用如下公式得到__ LOC(a i )_ = LOC(a 1)+(i-1)*b ______。

4、在线性表的存储结构中,顺序表是一个可 随机存取 存取的存储结构,单链表则是一个 顺序存取 存取的存储结构。

5、设单链表的结点数据类型定义和指针变量说明如下 #define DATATYPE2 char typedef struct node { DATATYPE2 data; struct node *next; } LINKLIST; LINKLIST *p,*q,*s; 在一个单链表中,已知q 所指向结点是p 所指向结点的直接前趋结点。

若欲在q 结点和p 结点之间插入一个s 所指向的结点,则可写 q->next=s;s->next=p 6、关于选用顺序表结构或链表结构,在考虑线性表的操作的时间性能时,若线性表上的操作主要是查找、读取而很少做插入和删除操作时,以采用 顺序 表结构为宜。

但是,若线性表需频繁地进行插入和删除操作时,则采用 链表 表结构为宜。

7、如果在待排序的序列中,存在有多个关键字相同的记录,经过排序后,这些具有相同关键字的记录之间的相对次序保持不变,则称这种排序方法是 稳定 的;反之,若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是 不稳定 的。

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

苏州大学数据结构课程期中考试(共6页)学院计算机专业计算机科学与技术成绩____________________ 班级11计科学号_____________姓名_____________日期2012.11_ 一、填空(14*2 分)1x=n;y=0;while (x>=y*y)y=y+1;2、对于顺序存储的栈,因为栈的空间是有限的,在进行入栈运算时,可能发生栈的上溢(overflow),在进行出栈 _运算时,可能发生栈的下溢(underflow)。

3、以顺序结构实现的双栈类中,其私有数据成员数组S[0..n-1]存放两个栈中的所有元素,top1和top2分别指向两个栈的栈顶位置,入栈1时top1由小到大,入栈2时top2由大到小,则判断双栈栈满的条件是top1+1>=top2 ,双栈栈空的条件是top1==-1 && top2==n。

4、完成链式存储结构下Queue类的append方法,其中front和rear指针分别指示队首和队尾结点:Error_code Queue :: append(const Queue_entry &item){Node *new_rear = new Node(item);if (new_rear == NULL) return overflow;if (rear == NULL) front=rear=new_rear; ;else {rear->next=new_rear; ;rear = new_rear;}return success;}5、如果一个函数直接或间接地调用自己,则称这个函数是一个递归函数。

6、在一个长度为n的顺序表中的第position(0≤position<n)个位置删除某个元素时,需移动n-position-1个元素。

7、在线性表改进的单链表实现方法中,我们定义了一个current指针指向最近访问过的结点,请解释这样做的好处:在对表中元素进行访问时,不需要每次都从头开始,在顺序访问或从前往后的访问中能提供操作效率。

8、用抽象数据类型对数据结构进行的ADT定义通常包含两个内容,分别是这种数据结构的逻辑结构定义以及基本操作集。

9、Evaluate the postfix expression: 2 4 3 1 + * +, where each number represents.......an operand and each symbol of + and * represents an operator, please give the result of the expression on the following line 18 。

10、在高级语言中为了实现函数之间的相互调用,需要用到栈作为辅助数据结构来存放调用记录(invocation record),调用记录中主要包含该调用函数的局部变量、参数和函数返回地址。

二、应用题(46分)1、说明线性表、栈与队列的异同点。

(9分)相同点:都是线性结构,都是逻辑结构的概念。

都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表,只是对插入、删除运算加以限制。

不同点:①运算规则不同线性表可以在任何合法位置进行插入和删除;栈是只允许在一端进行插入、删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。

②用途不同线性表用于处理更一般的数据处理场合;堆栈用于子程调用和保护现场;队列用于多道作业处理、资源分配等。

2、A circular queue has the problem in which it is not easy to distinguish between full and empty queues.Draw two situations to illustrate this point.The front and rear pointers should be in the same position in each situation.Give an solution to distinguish between full and empty queues.(9分)答:用损失一个空间的方法,即人为地将队满条件修改为:front=(rear+2)%maxqueue;队空条件不变,仍为:front=(rear+1)%maxqueue;3、What is wrong with the following attempt to use the copy constructor to implement the overloaded assignment operator for a linked Stack?(9分)void Stack :: operator = (const Stack &original){Stack new_copy(original);top_node = new_copy.top_node;}Answer(1) T he assignment top_node = new_copy.top_node; leavesthe former nodes of the left hand side of the assignmentoperator as garbage.应该回收的空间没回收,结果丢了变成垃圾!(2) M oreover, when the function ends, the statically allocated Stack new_copy will be destructed, this will destroy the newly assigned left hand side of the assignment operator.把需要赋值不该回收的空间回收了。

4、简述顺序线性表和链式线性表两种存储结构的优缺点和适用场合。

(10分)顺序表的缺点:Overflow,可能溢出Must determine the maximum amount of the list,必须确定表的最大长度Insert will cause moving .插入删除带来元素的移动顺序表的优点:Random access 随机存取, 读写效率为O(1)适用场合:when the entries are individually very small;元素个体较小when the size of the list is known when the program is written;表长能事先确定when few insertions or deletions need to be made except at the end of the list; 很少在非尾部位置插入和删除when random access is important 经常需要根据位序进行读写链表的优点:Don’t worry about overflow不需要担心溢出Dynamic structure 动态的结构,不需事先申请空间Insert only need change the links. 插入删除只引起指针的变化链表的缺点:The links also take space. 链域也占空间,使存储密度降低Not to suited to random access. 不能做到随机存取,读写效率为O(n)适用场合:when the entries are large; 元素个体较大when the size of the list is not known in advance; 不能事先确定when flexibility is needed in inserting, deleting and rearranging the entries经常需要做插入、删除和元素的重排5、为了求解两个一元多项式的和,需要将多项式存储到计算机中。

请设计多项式的逻辑结构和存储结构,说明你这样设计的原因。

(9分)多项式的逻辑结构:1、由Term元素构成的线性表。

2、Term是一个结构体,包含有一个非零项的系数和指数3、此线性表为递减有序表,按各非零项的指数递减有序。

4、在做多项式加法时,从两个多项式的头上删除相应的非零项结点,进行指数的比较,生成相应的项结点,插入到结果表的尾部,所以,这个操作的特点是头上删除,尾部插入,所以可将多项式设计为一个队列。

多项式的存储结构:用链式结构比较合适。

事先不知道多项式的长度,多项式系数不连续,建议采用链式结构。

三、算法设计题(26分)1、设stack类接口定义如下,class Stack {public:Stack() ;bool empty() const ;Error_code pop() ;Error_code top(Stack_entry &item) const;Error_code push(const Stack_entry &item) ;int size();void clear() ;private:……}使用以上栈的方法,设计外部函数bottom()。

要求:如果栈非空,则返回栈底的数据元素;如果栈空,返回错误代码fail。

注意在实现bottom()后不能破坏栈原来的内容,你所书写的代码不能依赖于栈的具体存储方式,即必须使用上述的栈方法。

提示:可以使用临时栈来实现算法。

请用以下函数原型进行设计。

(8分)Error_code bottom( Stack &s, Stack_entry &item){Stack temp;Stack_entry t;if (s.empty()) return fail;while (!s.empty( )) {s.top(t);s.pop( );temp.push(t);}item=t;while (!temp.empty( )) {temp.top(t);temp.pop( );s.push(t);}return success;}2、假设用不带current指针的简单单链表作为线性表List的存储结构。

(1)为List类添加一个递归..成员函数,统计表中值为item的结点的个数。

例如:线性表为:(7,2,1,7,2,3,6,5)统计链表中值为7的结点数,返回结果应为2。

(8分)template <class List_entry>void List<List_entry> :: rec_count(Node<List_entry> *head,List_entry item,int &count){if (head==NULL)return ;elseif (head->entry==item)count++;rec_count(head->next,item,count);}(2)为List添加一个成员函数,删除线性表中所有值为item的结点。

相关文档
最新文档