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

合集下载

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

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

}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 图

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

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

苏州大学数据结构课程期中考试(共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指针指向最近访问过的结点,请解释这样做的好处:在对表中元素进行访问时,不需要每次都从头开始,在顺序访问或从前往后的访问中能提供操作效率。

数据结构期中笔试题答案

数据结构期中笔试题答案

《数据结构》期中考试题答案一、填空题(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分)。

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

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

一、判断题: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、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。

()29、希尔排序在较率上较直接接入排序有较大的改进。

数据结构期中考试试题答案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 。
  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;}he assignment top_node = new_copy.top_node; leaves the 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的结点。

相关文档
最新文档