东南大学数据结构试卷
东南大学数据结构试卷A

共 11 页 第1页东 南 大 学 考 试 卷(A 卷) 课程名称 数据结构 考试学期 10-11-3 得分 适用专业 吴健雄学院610 考试形式 闭卷 考试时间长度 120分钟自 觉 遵 守 考 场 纪 律 如 考 试 作 弊 此 答卷无 效一、选择题(每题1分,共5分)1.设有一个二维数组A[m][n],如果A[0][0]的首地址为644(10进制),A[2][2]的首地址为676,每个元素占一个字节,则A[4][5]的首地址为()。
A.692 B.626 C.709 D.7242.若让元素1,2,3依次但并非连续进栈,则哪种出栈次序是不可能的()A.3,2,1 B.2,1,3C.3,1,2 D.1,2,33.设完全二叉树有82个结点,从根结点开始顺序编号,根节点为1号,其他结点自上向下,同一层次自左向右连续编号。
则第41号结点的双亲结点的编号为()A.20 B.21 C.81 D.824.采用对半搜索算法搜索长度为n的有序表,元素的平均搜索长度为()A.O(n2) B.O(n) C.O(n log2n) D.O(log2n)5.采用邻接表存储的图的深度优先遍历算法类似于二叉树的()A.中序遍历B.前序遍历C.后序遍历D.按层次遍历二、判断题(每题1分,共5分)1.邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
()2.直接选择排序是一种不稳定的排序方法。
()3.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
在设计再散列函数时,要求计算出的值与表的大小m互质。
()4.连通分量是无向图中的极小连通子图。
()5.若有一个叶子节点是二叉树中某子树的前序遍历结果序列的最后一个结点,它一定是该子树的中序遍历结果序列的最后一个结点。
()共11页第2页三、填空题(每空1分,10分)1.每次从表的无序部分取出一个元素,把它插入到表的有序部分的适当位置,此种排序方法叫作(1)排序;每次从表的无序部分中挑选出一个最小或最大元素,把它与表的有序部分的后一元素交换,此种排序方法叫作(2)排序。
东南大学十套数据结构试题及答案

数据结构试卷(一)三、计算题(每题6 分,共24分)1.在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。
A 0 1 2 3 4 5 6 7data 60 50 78 90 34 40next 3 5 7 2 0 4 12.请画出下图的邻接矩阵和邻接表。
3.已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
4.画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。
四、阅读算法(每题7分,共14分)1.LinkList mynote(LinkList L){//L是不带头结点的单链表的头指针if(L&&L->next){q=L;L=L->next;p=L;S1:while(p->next) p=p->next;S2:p->next=q;q->next=NULL;}return L;}请回答下列问题:(1)说明语句S1的功能;(2)说明语句组S2的功能;(3)设链表表示的线性表为(a1,a2, …,a n),写出算法执行后的返回值所表示的线性表。
2.void ABC(BTNode * BT){if BT {ABC (BT->left);ABC (BT->right);cout<<BT->data<<' ';}}该算法的功能是:五、算法填空(共8分)二叉搜索树的查找——递归算法:bool Find(BTreeNode* BST,ElemType& item){if (BST==NULL)return false; //查找失败else {if (item==BST->data){item=BST->data;//查找成功return ___________;}else if(item<BST->data)return Find(______________,item);else return Find(_______________,item);}//if}六、编写算法(共8分)统计出单链表HL中结点的值等于给定值X的结点数。
东南大学数据结构1998真题

东南大学1998年研究生入学考试:数据结构试题一、简要回答下列问题(共40分)1、设胜者树(selection tree)由k个记录缓冲区和k-1个非叶结点构成。
概念上非叶结点表示其两个子女中关键字较小者,而实际上非叶结点存放的是什么?(5分)2、索引顺序存取方法(ISAM)中,主文件已按主关键字(primary key)排序,为什么还需要主关键字索引?(6分)3、一棵前序序列为1,2,3,4的二叉树,其中序序列可能是4,1,2,3吗?设一棵二叉树的前序序列为1,2,3,4,5 ,6,7,8,9,其中序序列为2,3,1,5,4,7,8,6,9,试画出该二叉树。
(7分)4、构造最佳二叉检索树的前提条件是什么?在动态情况下,一般AVL树的查询性能不如完全二叉检索树的,为什么人们却采用AVL树呢?(8分)5、将两个栈存入数组V[1、、m]中应如何安排最好?这时栈空栈满的条件是什么?(6分)6、已知无向图G,V(G)={1,2,3,4},E(G)={(1,2),(1,3),(2,3),(2,4),(3,4)},试画出G的邻接多表(Adjacency Mul tilists),并说明,若已知点i,如何根据邻接多表找到与i相邻的点j?(8分)二、写出用堆排序(heap sort)算法对文件F=(12,3,15,30,9,28)进行排序时,初始堆及以后每挑好一个元素重新调整后堆的状态,并指出这里的堆和败者树(tree of loser)的一个主要区别。
(8分)三、设数组A存放一n位二进制数,试说明下列算法X的功能。
假设无溢出,算法X的最坏时间复杂度是什么?分析它的平均时间复杂性。
(8分)type Num=array[1、、n] of [0、、1];procedure X(var A:Num);;var j:integer;begin i:=n;;while A[i]=1 dobeginA[i]:=0;;。
东南大学数据结构考研真题1993

东南大学93考研题注意事项:(1) 答卷上需写清题号,不必抄题(2) 描述可用你熟悉的一种类高级语言,如类Pascal,所用主要数据结构及变量的意义须加以注释。
必要时算法中应加注释。
一、回答下列问题: (共 35分)l与链式结构相比,线性表的顺序存贮的一个主要优点和一个主要缺点分别是什么 ?(4分)2在表达式中,有的运算符要求从右到左计算,如A**B**C的计算次序应为(A**(B**C)),这在由中缀生成后缀的算法中是怎样实现的?(以**为例说明) (6分)3.给出KMP算法中失败函数f的定义,并说明利用f进行串模式匹配的规则,该算法的技术特点是什么?(9分)4二叉树的中序与后序序列能唯一地定义一棵二叉树吗?这里所指序列中的符号代素树结点中的标识符吗?二叉村的前序与后序序列能唯一地定义一棵二叉树吗?为什么?(8分) 5在什么情况下m阶B树(m>>2)比A VL树有效?分析其原因·(8分)二。
将n个队列顺序映射到数组v[l···m]中,每一队列在v中表示为一,循环队列。
试画出其示意图并写出对应这种表示的addq和deleteq过程。
(20分)三、给出中序线索树的结点结构并画出一个具有头结点的中序线索树,使其树结点至少应有6个,写一算法在不使用栈和递归的情况下前序遍历一中序线索树,并分析其时间复杂度,(20分)四、证明:具有n个点和多于n-1条边的无向连通图G一定不是树(10分)五、若S是n个元素的集合,则S的幂集P(S)定义为S所有子集的集合。
例如,S=(a,b,c),P(S)={() ,(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}给定S,写一递归算法求P(S)。
(15分)。
东南大学数据结构试卷-推荐下载

共8页
第3页
五、综合算法题(每空 2.5 分,共 55 分)
1.完善改进的归并排序算法。*this是一个待排序的表,而表L2是一个辅助的工作表,帮
助完成排序的中间步骤,最终完成*this的排序。所谓改进指在把元素序列复制到辅助表
中时,把第2个表的元素顺序逆转,这样两个待归并的表从两端开始处理,向中间归并。
可以省去检查子表是否结束的判断。
template <typename T>void Orderedlist<T>::MergeSort(int left, int rig
improvedMergeSort(L2, left, right);
template <typename T>
(1)
template <typename T>
void Orderedlist<T>::improvedMerge(Orderedlist<T> &L2, int left, int mid, int right){
} }
int s1 = left, s2 = right, t = left, k ; //s1,s2是检测指针,t是存放指针
for (k = left; k <= mid; k++){
(2)
} for (k = mid + 1; k <= right; k++){
(3) } while (t <= right){
if(L2.slist[s1] <= L2.slist[s2]) (4)
else (5)
;
2.完成二叉树前序遍历的非递归算法和层次序遍历算法操作。 //非递归前序遍历。每访问一个结点后,在向左子树遍历下去之前,利用栈记录该结点的 右子女结点的地址,以便在左子树退回时可以直接从栈顶取得右子树的根结点,继续右
数据结构-东南大学

★数据结构是一门研究非数值计算的程序设计问题中的(A )以及它们之间的(B )和运算的学科。
A .操作对象 B .计算方法 C .逻辑存储 D .数据映象 A .结构 B .关系 C .运算 D .算法★ 试举例说明,如果两个数据结构的逻辑结构和存储结构相同,但基本运算(操作)不同,则这两个数据结构就是不同的。
例如二叉树和二叉排序树在逻辑结构上都是二叉树,都采用二叉链表形式存储,但是对于某些运算的定义不同,例如插入操作,二叉树需指明作为哪个结点的左孩子还是右孩子插入,而二叉排序树无需指明,由二叉排序树的形状决定插入位置★算法有哪些特点?为什么说一个具备了所有特点的算法,不一定就是实用的算法?答:特点:输入、输出、确定性、有穷性、有效性;一般地说,只有多项式时间度杂度的算法才是实用的。
★如何评价算法的好坏? 答:正确性(四个层面);可读性;健壮性;时空效率(复杂性)。
★程序段for (i=n-1; i>=1; i++) for (j=1; j<=i; j++) if (A[j]>A[j+1])A[j]与A[j+1]对换;其中n 为正整数,则最后一行的语句频度在最坏情况下是(D ) A. O(n) B. O(nlog2n) C. O(n3) D. O(n2)★分析以递归方式求阶乘的算法的时间复杂度。
long Factorial ( long n ) {if ( n = = 1 ) return 1; // 递归终止 else return n*Factorial ( n-1); // 递归})()1())2(()1(2))1(()1())((n O O n n T O O n T O O n T O =⨯==-+⨯=-+=★分析二分查找函数的时间复杂度。
int BinarySearch(int *a, const int x, const int n) {for(int left = 0, right = n –1; left <= right;){ int middle = (left + right)/2; switch(compare(x, a[middle])){ case ‘>’: left = middle + 1; break; // x > a[middle] ca se ‘<’: right = middle – 1; break; // x < a[middle] case ‘=’: found x; // x == a[middle] } }return –1; // not found }实例特性是数组a 中元素的个数n 。
东南大学数据结构考研真题1999

东南大学99考研题试题科目:数据结构一.简要回答下列问题(共40分)1.利用两个栈s1,s2模拟一个时,如何用栈的运算实现队列的插入删除及判队空算法。
请简述算法思想。
(7分)2.二叉树有n个顶点,编号为1,2,3,、、、、、n设:*T中任一定点V的编号等于左子树中最小编号减1;*T中任一顶点V的右子树中的最小编号等于其左子树中的最大编号加1;试描绘该二叉树。
(7分)3.设某文件经内排序后得到100个初始归并段,若使用多路归并排序算法,并要求三趟归并完成排序,归并路数最少为多少?(5分)4.若一棵树中有度数为1至m的各种结点数分别为n1,n2、、、、nm(nm表示度数n为的结点个数,试推导出该树中共有多少个叶结点n0的公式。
(8分)5.试举例分析堆排序法是否稳定(5分)6.试利用KMP算法和改进算法分别求p1=‘abaabaa’和p2=‘aabbaab’的NEXT函数和NEXTV AL函数。
(8分)二.阅读下列算法,指出算法的功能和时间复杂性(10分)procedure A(h,g:pointer);(h,g分别为单循还列表中两个结点指针)procedure B(s,q:pointer)var p:pointer;beginp:=s;while p^.next<>q do p:=p^.next;p^.next:=s;end;beginB(h,g); B(g,h);End;三.已知无向图采用邻接表存储方式,试写出删除边( i,j )的算法。
(10分)四.线性表中有个n元素,每个元素是一个字符,存在向量R[1。
n]中,试一写算法,使其中的字符按字母字符,数字字符和其字符的顺序排列,要求利用原空间。
且元素移动的次数最少。
(15分)五.四阶B树中(如图所述),插入关键字87,试画出插入调整后树的形状。
东南大学数据结构2000真题

东南大学2000年考研专业课试卷数据结构试题一:简要回答下列问题(共40分)1.假设一棵二叉树的层序序列是ABCDEFGHIJ和中序序列是DBGEHJACIF,请画出该树.(6分)2.简单比较文件的多重表和倒排表组织方式各自的特点.(6分)3.画出对算术表达式A-B*C/D+E^F求值时操作数栈和运算符栈的变化过程.(6分)4.找出所有满足下列条件的二叉树6分)a)它们在先序遍历和中序遍历时,得到的结点访问序列相同;b)它们在后序遍历和中序遍历时,得到的结点访问序列相同;c)它们在先序遍历和后序遍历时,得到的结点访问序列相同.5.对一个由n个关键字不同的记录构成的序列,能否用比2n-3少的次数选出该序列中关键字取最大值和关键字取最小值的记录?请说明如何实现?在最坏情况下至少进行多少次比较?(8分)6.已知某文件经过置换选择排序后,得到长度分别为47,9,31,18,4,12,23,7的8个初始归并段.试为3路平衡归并设计读写外存次数最少的归并方案,并求出读写外存的次数.(8分)二:已知L是无表头结点的单链表,其中P结点既不是首元结点,也不是尾元结点,(10分)a)在P结点后插入S结点的语句序列是______b)在P结点前插入S结点的语句序列是______c)在表首插入S结点的语句序列是______d)在表尾插入S结点的语句序列是______(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:=NIL;(7) Q:=P;(8) WHILE P^.next<>Q DO P:=P^.next;(9) WHILE P^.next<>NIL DO P:=P^.next;(10) P:=Q;(11) P:=L;(12) L:=S;(13) L:=P;三:设计一个符号表的表示方法,编写算法使得在该表中进行查询,插入和删除任何一个标识符X的操作在O(1)的时间内.假设1<=x<=m,n为要插入的个数,所需空间为m+n. (10分)四:试利用Dijkstra算法求下图中从顶点a到其它各顶点的最短路径,写出执行算法过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.若对一棵完全二叉树从 0 开始编号, 并按此编号把它顺序存储到一维数组
元素的左孩子结点为 (4)
,右孩子结点为 (5)
亲结点为 (6)
。
5.对用邻接矩阵表示的图进行任何一种遍历时,其时间复杂度为 对用邻接表表示的图进行任何一种遍历时,其时间复杂度为
(7) (8)
6.折半插入排序的时间复杂度为 (9)
right){
int s1 = left, s2 = right, t = left, k ;
//s1,s2 是检测指针, t 是存放
指针 for (k = left; k <= mid; k++){
// 正向复制
(2)
;
} for (k = mid + 1; k <= right; k++){
// 反向复制
// 取图中顶点个数
bool *visited = new bool[n];
// 创建辅助数组
for (i = 0; i < n; i++){
// 辅助数组 visited 初始化
visited[i] = false;
}
for(i=0;i<n;i++){
// 从每个顶点开始,各做一次遍历。
if( (20)
// 从中间划分为两个子序列 // 对左侧子序列进行归并排序
improvedMergeSort(L2, mid + 1, right); //
对右侧子序列进行归并排序
(1)
;
// 二路归并
}
template <typename T>
void Orderedlist<T>::improvedMerge(Orderedlist<T> &L2, int left, int mid, int
else (8)
;
// 左子树为空,由堆栈弹出
} } // 层次序遍历。在访问二叉树某一层结点时,把下一层结点指针预先记忆在队列中,利用 队列安排逐层访问的次序。因此每当访问一个结点时,将它的子女依次加到队尾。然后访 问已在队头的结点。 template <typename T>void BinaryTree<T>::levelOrder (void (*visit) (BinTreeNode<T> *t)) {
入
(18)
;
//
移动
(19)
;
} heap[i]=k; return &x; }
4.完成的深度优先遍历图算法。
// 深度优先遍历图,输出所有的连通分量
template<typename T, typename E> void Graph<T,E>::DFS(){
int i, n = NumberOfVertices();
;
} w = getNextNeighbor(v, w); } }
// 取 v排在 w后的下一个邻接顶点
BinTreeNode<T> *p = root;
S.Push (NULL);
while (p != NULL) {
visit(p);
// 访问结点
if (p->rightChild != NULL)
(6)
; //Biblioteka 预留右指针在栈中if (p->leftChild != NULL)
(7)
;
// 进左子树
int i;
if(n==MaxSize){
cerr<<"heap is full.\n";
return;
}
n++;
for(i=n;i>1;){
//i==1
表示已达到根节点
if( (13)
) break; //
新元素不大于结点 i 的双亲,不处
理
(14)
;//
此时 heap[i] 未占用, 将双亲结点元素移
。
a 中,则 a[i] ,双
。 。
四、简答简述题(每题 8 分,共 24 分)
1.设有一组关键码输入序列 {55 , 31, 12, 37, 46, 73, 63, 02, 07} ,从空树开始构造 平衡二叉搜索树,画出每加入一个新结点时的二叉树形态,需标出平衡因子。包括发 生不平衡时,旋转的各步的二叉树形态,并标注旋转类型。
右子女结点的地址,以便在左子树退回时可以直接从栈顶取得右子树的根结点,继续右子
树的前序遍历。
template <typename T>void BinaryTree<T>::PreOrder1(void
(*visit) (BinTreeNode<T>
*t) ) {
LinkedStack<BinTreeNode<T>*> S;
入
(15)
;
//i
继续向上
}
heap[i]=x;
//
位置定了数值再放进去
}
template<typename T>Element<T>* Maxheap<T>::Delete(Element<T>& x){
int i,j;
if(!n){
cerr<<"heap is empty.\n";
return NULL;
24
18 12
4 22 3
五、综合算法题(每空 2.5 分,共 55 分) 1.完善改进的归并排序算法。 *this 是一个待排序的表,而表 L2是一个辅助的工作表,帮
助完成排序的中间步骤,最终完成 *this 的排序。所谓改进指在把元素序列复制到辅助表
中时,把第 2个表的元素顺序逆转,这样两个待归并的表从两端开始处理,向中间归并。
2.已知一棵二叉树的前序遍历的结果为 ABECDFGHI,J 中序遍历的结果是 EBCDAFHIG,J 试
画出这棵二叉树。请用图表示逐步形成二叉树的过程(也可以用文字)
。
3.请用 Kruskal 算法,逐步画出下面有权无向图的最小生成树。必须每次添加一条边。
0 28 1
10
11 14
16
5
25
6 15 2
void show() ;
};
template<typename T>Maxheap<T>::Maxheap(int sz){
MaxSize=sz;
n=0;
heap= new Element<T>[MaxSize+1]; // 注意 heap[0] 不用,从 heap[1] 开始
}
template<typename T>void Maxheap<T>::Insert(Element<T>& x){
)条边。
二、判断题(每题 1 分,共 5 分) 1.链式存储的线性表所有存储单元的地址可连续可不连续。 2.存储有向图的邻接矩阵是对称的,所以可以仅存矩阵上三角部分。 3.在采用闭散列法解决冲突时,不要立刻做物理删除,否则搜索时会出错。 4.二叉树中序遍历结果序列的最后一个结点必是前序遍历的最后一个结点。 5.堆排序的时间复杂度是 O(n log 2 n) ,但需要额外存储空间。
visit (p->leftChild);
(11)
;
} if (p->rightChild != NULL) {
visit (p->rightChild);
(12)
;
} } }
3.完成利用最大堆实现的优先级队列类定义。注意
heap[0] 不用,从 heap[1] 开始
template<typename T>class Maxheap{
(
)
A.在链头插入,链尾删除。
B .在链尾插入,链头删除。
C.在链尾插入,链尾删除。
D .在链头插入,链头删除。
2.对线性表进行对半搜索时,要求线性表必须(
)
A .以数组方式存储
B
.以数组方式存储并按关键码排序
C.以链表方式存储
D
.以链表方式存储并按关键码排序
3.对包含 n 个元素的散列表进行搜索,平均搜索长度为(
(3)
;
} while (t <= right){
// 归并过程
if(L2.slist[s1] <= L2.slist[s2]) (4)
;
else (5)
;
} }
2.完成二叉树前序遍历的非递归算法和层次序遍历算法操作。 // 非递归前序遍历。每访问一个结点后,在向左子树遍历下去之前,利用栈记录该结点的
}
x=heap[1];
Element<T> k=heap[n];
n--;
for(i=1,j=2;j<=n;){
//j
是 i 的子女
if(j<n) if( (16)
) j++; //j
指向较大子女
if(heap[j]<=k) break;
//
候补的结点大,不再移动
(17)
;
//
还需移动, 将较大子女直接移
可以省去检查子表是否结束的判断。
template <typename T>void Orderedlist<T>::MergeSort(int left, int right){