2012河南省数据结构分析加强
数据结构真题2012年10月

数据结构真题2012年10月(总分:100.00,做题时间:90分钟)一、单项选择题(总题数:15,分数:30.00)1.一个算法的时间耗费的数量级称为该算法的______(分数:2.00)A.效率B.难度C.可实现性D.时间复杂度√解析:[考点] 算法的时间复杂度的概念[解析] 一个算法的时间耗费的数量级称为该算法的时间复杂度。
2.顺序表便于______(分数:2.00)A.插入结点B.删除结点C.按值查找结点D.按序号查找结点√解析:[考点] 顺序表的特征[解析] 顺序表便于按序号查找结点。
3.设带头结点的单循环链表的头指针为head,指针变量P指向尾结点的条件是______(分数:2.00)A.p->next->next==headB.p->next==head √C.p->next->next==NULLD.p->next==NULL解析:[考点] 指针变量p指向尾结点的判定条件[解析] 单循环链表的指针变量p指向尾结点的判定条件是p->next==head。
4.设以数组A[0..m-1]存放循环队列,front指向队头元素,rear指向队尾元素的下一个位置,则当前队列中的元素个数为______(分数:2.00)A.(rear-front+m)%m √B.rear-front+1C.(front-rear+m)%mD.(rear-front)%m解析:[考点] 队列中元素个数的计算[解析] 队列中元素的个数为(rear-front+m)%m5.下列关于顺序栈的叙述中,正确的是______(分数:2.00)A.入栈操作需要判断栈满,出栈操作需要判断栈空√B.入栈操作不需要判断栈满,出栈操作需要判断栈空C.入栈操作需要判断栈满,出栈操作不需要判断栈空D.入栈操作不需要判断栈满,出栈操作不需要判断栈空解析:[考点] 顺序栈的性质的判断[解析] 入栈操作需要判断栈满,出栈操作需要判断栈空。
6.A是一个10×10的对称矩阵,若采用行优先的下三角压缩存储,第一个元素a 0,0的存储地址为1,每个元素占一个存储单元,则a 7,5的地址为______(分数:2.00)A.25B.26C.33D.34 √解析:[考点] 对称矩阵的元素的地址的计算[解析] 若对称矩阵采用下三角压缩存储,根据其地址的计算公式,可得到所求元素的地址。
2012年河南省理论数据摘要

{
int i=s, j=t, x=r[s];
while(i<j){
while (i<j && r[j]>x) j=j-1; if (i<j) {r[i]=r[j];i=i+1;}
while (i<j && r[i]<x) i=i+1; if (i<j) {r[j]=r[i];j=j-1;}
}// JudgeRoot
算法中打印根时,输出顶点在邻接表中的序号(下标),若要输出顶点信息,可使用g[i].vertex。
2、设有一组初始记录关键字序列(K1,K2,…,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。
1、本题应使用深度优先遍历,从主调函数进入dfs(v)时 ,开始记数,若退出dfs()前,已访问完有向图的全部顶点(设为n个),则有向图有根,v为根结点。将n个顶点从1到n编号,各调用一次dfs()过程,就可以求出全部的根结点。题中有向图的邻接表存储结构、记顶点个数的变量、以及访问标记数组等均设计为全局变量。建立有向图g的邻接表存储结构参见上面第2题,这里只给出判断有向图是否有根的算法。
}
r[i]=x;
}
3、冒泡排序算法是把大的元素向上移(气泡的上浮),也可以把小的元素向下移(气泡的下沉)请给出上浮和下沉过程交替的冒泡排序算法。
48.有n个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)
河南省考研计算机复习资料数据结构与算法分析

河南省考研计算机复习资料数据结构与算法分析数据结构与算法是计算机科学与技术领域的重要基础知识,对于河南省考研计算机专业的学生而言,掌握数据结构与算法的分析方法和应用技巧具有重要意义。
本篇文章将对河南省考研计算机复习资料中的数据结构与算法分析进行详细讲解和总结,帮助考生更好地理解和掌握相关知识。
一、线性表线性表是最简单、最基本的数据结构之一,包括顺序表和链表两种实现方式。
顺序表利用数组对数据进行存储,具有随机访问的特点,适用于频繁查找的场景;链表则利用指针对数据进行存储,具有灵活插入和删除的特点,适用于频繁插入和删除的场景。
在复习资料中,需要掌握线性表的结构和常见操作,如插入、删除和查找等,以及各种实现方式之间的优缺点。
二、栈和队列栈和队列是两种特殊的线性表,栈具有后进先出(LIFO)的特点,而队列具有先进先出(FIFO)的特点。
栈和队列在计算机科学与技术中有着广泛的应用,比如函数调用、表达式求值、迷宫求解等。
在复习资料中,需要掌握栈和队列的定义、基本操作以及应用场景,例如用栈实现递归、用队列实现广度优先搜索等。
三、树和二叉树树是一种非线性的数据结构,具有层次结构。
在树的基础上演化而来的二叉树是最常用的树形结构,每个节点最多有两个子节点。
树和二叉树在计算机科学与技术中有着广泛的应用,例如文件系统、数据库索引等。
在复习资料中,需要掌握树和二叉树的定义、遍历方式(前序、中序、后序)以及常见操作,如插入、删除和查找等。
四、图图是一种拓扑结构,由节点(顶点)和边组成,用于描述不同实体之间的关系。
图是计算机科学与技术中最复杂的数据结构之一,具有非常广泛的应用领域,如社交网络、路线规划等。
在复习资料中,需要掌握图的定义、表示方式(邻接矩阵、邻接表)以及常见操作,如深度优先搜索和广度优先搜索等。
五、排序和查找排序和查找是数据结构与算法中的经典问题,对于河南省考研计算机专业的学生而言,熟练掌握各种排序算法和查找算法的实现和分析方法具有重要意义。
河南省考研计算机复习资料数据结构与算法总结

河南省考研计算机复习资料数据结构与算法总结数据结构和算法作为计算机科学的核心议题,是计算机考研中不可忽视的重要内容。
在河南省考研中,数据结构与算法占据了相当大的比重。
为了帮助考生更好地复习和总结这一部分内容,本文将对数据结构与算法的重点知识点进行总结。
一、数据结构部分1. 线性表线性表是数据结构中最基本的形式之一,包括数组、链表、栈和队列等。
考生需要了解其中的定义、存储结构、基本操作和应用等方面的内容。
2. 树结构树结构是计算机领域中应用最广泛的数据结构之一。
其中二叉树、二叉搜索树、平衡二叉树等都是考生需要掌握的重要知识点。
3. 图结构图结构是一种非线性数据结构,由节点和节点间的边组成。
深度优先搜索和广度优先搜索是图的遍历算法,考生需要熟练掌握。
二、算法部分1. 排序算法排序算法是算法中非常重要的一部分。
考生需要了解常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序等,并能够分析算法的时间复杂度和空间复杂度。
2. 查找算法查找算法是在一个数据集合中找到指定元素的过程。
二分查找是最常用的查找算法,但还有其他的查找算法,如插值查找、哈希查找等,考生需要了解这些算法的原理和应用。
3. 图算法图算法是解决图结构问题的算法,包括最短路径算法、最小生成树算法和拓扑排序算法等。
考生需要掌握常用的图算法,并能够运用到实际问题中。
三、复习方法1. 制定计划复习数据结构与算法需要有一个系统的计划,合理分配时间,对每个知识点进行有针对性的学习和理解。
2. 理解概念数据结构与算法中有许多抽象概念,考生要注重理解其内涵和基本特征。
3. 多做题通过大量的练习题目,考生可以熟悉不同类型的题目,加深对知识点的理解,提高解题的能力。
4. 查漏补缺复习过程中,考生要时刻关注自己的知识盲点,通过查漏补缺,使复习内容更加完整。
总结:数据结构与算法是计算机考研的重要内容,考生需要熟练掌握其中的知识点和算法。
通过合理制定学习计划,理解概念,多做题目和查漏补缺,考生可以在复习中取得好的成绩。
河南工业大学数据结构2012级试卷A

学院名称 专业班级: 姓名: 学号: 我密 封 线 内 不 要 答 题┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃ 密┃┃┃┃┃┃┃┃┃┃┃ 封┃┃┃┃┃┃┃┃┃┃┃ 线┃┃┃┃┃┃┃┃┃┃┃┃┃┃┃2012 至 2013 学年第 2 学期数据结构与算法试卷A 卷出卷教师: 适应班级:空信1201-1202 考试方式:闭卷 本试卷考试分数占学生总评成绩的 80 %题号 一 二 三 四 总分 核分人得分复查总分 总复查人一、选择题(本题15分,每小题1分)请将正确的答案填入下面的表格中:1 2 3 4 5 6 7 8 9 10 11 12 13 14 151. 算法分析的目的是 。
A 、找出数据结构的合理性B 、研究算法中的输入和输出关系C 、分析算法的效率以求改进D 、分析算法的易懂性和文档性2. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址__ ____。
A 、必须是连续的B 、部分地址必须是连续的C 、一定是不连续的D 、连续或不连续都可以3. 在一个具有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是_________。
A 、O(1)B 、O(n)C 、O(n 2)D 、O(nlog 2n) 4. 栈的插入和删除操作在___ ___进行。
A 、栈顶B 、栈底C 、任意位置D 、指定位置 5. 稀疏矩阵一般的压缩存储方法有两种,即____ ___。
A 、二维数组和三维数组 B 、三元组和散列C 、三元组和十字链表D 、散列和十字链表6. 依次在初始为空的队列中插入元素为a,b,c,d 以后,紧接着作了两次删除操作,此时的队头元素是( )A. aB. bC. cD. d 7. 广义表((a ))的表尾是____ ___。
A 、a B 、(a ) C 、( ) D 、((a )) 8. 下面4棵二叉树,是平衡二叉树的是____ ___。
A B C D 9. 求字符串T 在字符串S 中首次出现的位置的操作称为 ( ) A. 串的模式匹配 B. 求子串 C. 求串的长度 D. 串的连接 10. 深度为5的二叉树至多有____ ___个结点。
2012年全国数据整理加强

(1)s-w[n],n-1 //Knap(s-w[n],n-1)=true
for (i=0; i<n; i++) //在中序序列中查找根结点,然后,左右子女信息入队列
if (in[i]==level[0]) break;
if (i==0) //根结点无左子树,遍历序列的1—n-1是右子树
{p->lchild=null;
s.lvl=++R; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(Q,s);
}
else if (i==n-1) //根结点无右子树,遍历序列的1—n-1是左子树
{p->rchild=null;
s.lvl=++R; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);
}
else //根结点有左子树和右子树
{s.lvl=++R; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(Q,s);//左子树有关信息入队列
s.lvl=++R; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(Q,s);//右子树有关信息入队列
}
while (!empty(Q)) //当队列不空,进行循环,构造二叉树的左右子树
教高〔2012〕1185号

河南省教育厅教高…2012‟1185号河南省教育厅关于公布2012年度河南省高等学校精品资源共享课程及双语教学示范课程名单的通知各高等学校:按照《河南省教育厅关于做好2012年度河南省高等学校教学工程项目申报工作的通知》(教高…2012‟639号)要求,经学校申报、资格审查、网络评审、会议终审和网上公示,评选出了郑州大学《化工原理》、郑州牧业工程高等专科学校《动物细胞培养技术》等2012年度河南省高校精品资源共享课程75门(本科50门、高职25门)以及郑州大学《高分子化学》等双语教学示范课程20门,现予以公布(附件)。
— 1 —河南省高等学校精品资源共享课程和双语教学示范课程视为职务作品。
课程所在高等学校和主讲教师被视为同意将其上网内容的非商业性使用权自然授予全省各高等学校。
课程所在高校要提供建设经费,保证课程网站畅通,免费开放课程资源,并不断更新上网内容。
我厅将不定期对省精品资源共享课程和双语教学示范课程进行复核,根据复核情况决定是否保留或取消其荣誉称号。
用户可登录“河南省高校精品课程建设网”(网址为),免费浏览河南省高等学校精品资源共享课程和双语教学示范课程。
未经著作权人许可,任何人不得将课程内容用作以营利为目的的活动。
各高等学校要加强政策引导,加大精品资源共享课程和双语教学示范课程经费投入,推进优质课程资源的建设与共享,进一步巩固教学工作的中心地位,不断提高教育教学质量。
附件:1.2012年度河南省高等学校精品资源共享课程名单2.2012年度河南省高等学校双语教学示范课程名单二○一二年十二月十九日— 2 —附件12012年度河南省高等学校精品资源共享课程名单— 3 —— 4 —— 5 —— 6 —— 7 —— 8 —附件22012年度河南省高等学校双语教学示范课程名单— 9 —— 10 —— 11 —。
2012河南省JAVA版数据结构最新考试试题库

27、下列各种数据结构中属于线性结构的有( A )。
A)栈 B) 二叉树
C) 广义表 D) 图
28、采用链结构存储线性表时,其地址( B )。
A)必须是连续的 B)连续不连续都可以
A) rear=rear->next; B) front=front->next;
C) rear=front->next; D) front=rear->next ;
23、向一个栈顶指针为hs的链栈中插入一个s结点时,应执行( D )。
A) hs->next=s; B) s->next=hs->next; hs->next=s;
A) 4 B)3 C)2 D)12
6、下列各种数据结构中属于线性结构的有( A )。
A)栈 B) 二叉树
C) 广义表 D) 图
7、下列序列中,执行第一趟快速排序后得到的序列是( A )。
C) rear=front->next; D) front=rear->next ;
16、采用链结构存储线性表时,其地址( B )。
A)必须是连续的 B)连续不连续都可以
C)部分地址必须是连续 D)必须是不连续的
17、n个顶点的图的最小生成树必定( D ),是不正确的描述。
A) 存储密度大 B) 插入运算方便
C)删除运算方便 D)可方便地用于各种逻辑结构的存储表示
26、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( D )存储方式最节省时间。
A)顺序表 B)双链表 C)带头结点的双循环链表 D)单循环链表
A)不唯一 B)权的总和唯一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、设一棵二叉树的结点结构为 (LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p 和q分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(ROOT,p,q,r),该算法找到p和q的最近共同祖先结点r。
2、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。
29. ①试找出满足下列条件的二叉树
1)先序序列与后序序列相同 2)中序序列与后序序列相同
3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同
3、4、void LinkList_reverse(Linklist &L)
//链表的就地逆置;为简化算法,假设表长大于2
{
p=L->next;q=p->next;s=q->next;p->next=NULL;
while(s->next)
{
q->next=p;p=q;
q=s;s=s->next; //把L的元素逐个插入新表表头
}
q->next=p;s->next=q;L->next=s;
}//LinkList_reverse
4、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。
(20分)
5、二路插入排序是将待排关键字序列r[1..n]中关键字分二路分别按序插入到辅助向量d[1..n]前半部和后半部(注:向量d可视为循环表),其原则为,先将r[l]赋给d[1],再从r[2] 记录开始分二路插入。
编写实现二路插入排序算法。
6、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>}
写出G的拓扑排序的结果。
G拓扑排序的结果是:V1、V2、V4、V3、V5、V6、V7
7、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。
29. ①试找出满足下列条件的二叉树
1)先序序列与后序序列相同 2)中序序列与后序序列相同
3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同
8、二叉树的层次遍历序列的第一个结点是二叉树的根。
实际上,层次遍历序列中的每个结点都是“局部根”。
确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。
若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。
这样,定义一个全局变量指针R,指向层次序列待处理元素。
算法中先处理根结点,将根结点和左右子女的信息入队列。
然后,在队列不空的条件下,循环处理二叉树的结点。
队列中
元素的数据结构定义如下:
typedef struct
{ int lvl; //层次序列指针,总是指向当前“根结点”在层次序列中的位置int l,h; //中序序列的下上界
int f; //层次序列中当前“根结点”的双亲结点的指针
int lr; // 1—双亲的左子树 2—双亲的右子树
}qnode;
BiTree Creat(datatype in[],level[],int n)
//由二叉树的层次序列level[n]和中序序列in[n]生成二叉树。
n是二叉树的结点数{if (n<1) {printf(“参数错误\n”); exit(0);}
qnode s,Q[]; //Q是元素为qnode类型的队列,容量足够大
init(Q); int R=0; //R是层次序列指针,指向当前待处理的结点
BiTree p=(BiTree)malloc(sizeof(BiNode)); //生成根结点
p->data=level[0]; p->lchild=null; p->rchild=null; //填写该结点数据
for (i=0; i<n; i++) //在中序序列中查找根结点,然后,左右子女信息入队列
if (in[i]==level[0]) break;
if (i==0) //根结点无左子树,遍历序列的1—n-1是右子树
{p->lchild=null;
s.lvl=++R; s.l=i+1; s.h=n-1; s.f=p; s.lr=2; enqueue(Q,s);
}
else if (i==n-1) //根结点无右子树,遍历序列的1—n-1是左子树
{p->rchild=null;
s.lvl=++R; s.l=1; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);
}
else //根结点有左子树和右子树
{s.lvl=++R; s.l=0; s.h=i-1; s.f=p; s.lr=1;enqueue(Q,s);//左子树有关信息入队列s.lvl=++R; s.l=i+1;s.h=n-1;s.f=p; s.lr=2;enqueue(Q,s);//右子树有关信息入队列}
while (!empty(Q)) //当队列不空,进行循环,构造二叉树的左右子树
{ s=delqueue(Q); father=s.f;
for (i=s.l; i<=s.h; i++)
if (in[i]==level[s.lvl]) break;
p=(bitreptr)malloc(sizeof(binode)); //申请结点空间
p->data=level[s.lvl]; p->lchild=null; p->rchild=null; //填写该结点数据 if (s.lr==1) father->lchild=p;
else father->rchild=p; //让双亲的子女指针指向该结点
if (i==s.l)
{p->lchild=null; //处理无左子女
s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s);
}
else if (i==s.h)
{p->rchild=null; //处理无右子女
s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);
}
else{s.lvl=++R; s.h=i-1; s.f=p; s.lr=1; enqueue(Q,s);//左子树有关信息入队列
s.lvl=++R; s.l=i+1; s.f=p; s.lr=2; enqueue(Q,s); //右子树有关信息入队列}
}//结束while (!empty(Q))
return(p);
}//算法结束
9、因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。
void LongestPath(BiTree bt)//求二叉树中的第一条最长路径长度
{BiTree p=bt,l[],s[]; //l, s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点
int i,top=0,tag[],longest=0;
while(p || top>0)
{ while(p) {s[++top]=p;tag[top]=0; p=p->Lc;} //沿左分枝向下
if(tag[top]==1) //当前结点的右分枝已遍历
{if(!s[top]->Lc && !s[top]->Rc) //只有到叶子结点时,才查看路径长度
if(top>longest) {for(i=1;i<=top;i++) l[i]=s[i]; longest=top; top--;}
//保留当前最长路径到l栈,记住最高栈顶指针,退栈
}
else if(top>0) {tag[top]=1; p=s[top].Rc;} //沿右子分枝向下
}//while(p!=null||top>0)
}//结束LongestPath。