2015年澳门特别行政区学习数据库入门
2014香港特别行政区数据库入门入门
1、在有向图G中,如果r到G中的每个结点都有路径可达,则称结点r为G的根结点。
编写一个算法完成下列功能:(1).建立有向图G的邻接表存储结构;(2).判断有向图G是否有根,若有,则打印出所有根结点的值。
2、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。
(注:图中不存在顶点到自己的弧)有向图判断回路要比无向图复杂。
利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。
下面用0,1,2表示这三种状态。
前面已提到,若dfs(v)结束前出现顶点u到v的回边,则图中必有包含顶点v和u的回路。
对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。
void Print(int v,int start ) //输出从顶点start开始的回路。
{for(i=1;i<=n;i++)if(g[v][i]!=0 && visited[i]==1 ) //若存在边(v,i),且顶点i的状态为1。
{printf(“%d”,v);if(i==start) printf(“\n”); else Print(i,start);break;}//if}//Printvoid dfs(int v){visited[v]=1;for(j=1;j<=n;j++ )if (g[v][j]!=0) //存在边(v,j)if (visited[j]!=1) {if (!visited[j]) dfs(j); }//ifelse {cycle=1; Print(j,j);}visited[v]=2;}//dfsvoid find_cycle() //判断是否有回路,有则输出邻接矩阵。
visited数组为全局变量。
{for (i=1;i<=n;i++) visited[i]=0;for (i=1;i<=n;i++ ) if (!visited[i]) dfs(i);}//find_cycle3、(1)p->rchild (2)p->lchild (3)p->lchild (4)ADDQ(Q,p->lchild) (5)ADDQ(Q,p->rchild)25. (1)t->rchild!=null (2)t->rchild!=null (3)N0++ (4)count(t->lchild) (5)count(t->rchild)26. .(1)top++ (2) stack[top]=p->rchild (3)top++ (4)stack[top]=p->lchild27. (1)*ppos // 根结点(2)rpos=ipos (3)rpos–ipos (4)ipos (5)ppos+14、假设K1,…,Kn是n个关键词,试解答:试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn时,用算法建立一棵以LLINK / RLINK 链接表示的二叉查找树。
2012澳门特别行政区数据分析深入
1、连通图的生成树包括图中的全部n个顶点和足以使图连通的n-1条边,最小生成树是边上权值之和最小的生成树。
故可按权值从大到小对边进行排序,然后从大到小将边删除。
每删除一条当前权值最大的边后,就去测试图是否仍连通,若不再连通,则将该边恢复。
若仍连通,继续向下删;直到剩n-1条边为止。
void SpnTree (AdjList g)//用“破圈法”求解带权连通无向图的一棵最小代价生成树。
{typedef struct {int i,j,w}node; //设顶点信息就是顶点编号,权是整型数node edge[];scanf( "%d%d",&e,&n) ; //输入边数和顶点数。
for (i=1;i<=e;i++) //输入e条边:顶点,权值。
scanf("%d%d%d" ,&edge[i].i ,&edge[i].j ,&edge[i].w);for (i=2;i<=e;i++) //按边上的权值大小,对边进行逆序排序。
{edge[0]=edge[i]; j=i-1;while (edge[j].w<edge[0].w) edge[j+1]=edge[j--];edge[j+1]=edge[0]; }//fork=1; eg=e;while (eg>=n) //破圈,直到边数e=n-1.{if (connect(k)) //删除第k条边若仍连通。
{edge[k].w=0; eg--; }//测试下一条边edge[k],权值置0表示该边被删除k++; //下条边}//while}//算法结束。
connect()是测试图是否连通的函数,可用图的遍历实现,2、本题应使用深度优先遍历,从主调函数进入dfs(v)时,开始记数,若退出dfs()前,已访问完有向图的全部顶点(设为n个),则有向图有根,v为根结点。
access数据库入门基础
级联删除
删除主表中的记录时,同时删除相关联的子表中的记录。例如,删除 某个客户时,同时删除其下的所有订单信息。
软删除与硬删除
根据需要选择不同的删除方式,软删除可以恢复,硬删除则不可恢复。
04 数据库的维护与管理
数据库的备份与恢复
与其他数据库集成
Access可以与其他数据库系统(如SQL Server、MySQL等)进行数据交换和集成,实现跨数据库的 数据共享和操作。
数据库的扩展与定制
数据库的扩展
通过使用Access的外部数据源功能,可以 轻松地与外部数据源进行集成,扩展数据库 的应用范围。
数据库的定制
根据实际需求,可以对Access数据库进行 定制开发,如添加自定义功能、修改界面样 式等,以满足特定业务需求。
数据模型
数据模型是描述数据、数据关系和数 据操作的抽象结构,常见的数据模型 有层次模型、网状模型和关系模型。
Access数据库简介
Microsoft Access
Microsoft Access是微软公司开发的 关系型数据库管理系统,具有强大的 数据组织、用户界面和报表生成功能。
适用范围
特点
Access具有直观的用户界面、丰富的 报表生成功能和与其他Office应用程 序的集成,使得数据管理更加高效和 便捷。
Access适用于小型企业或组织的数据 库应用,可以满足日常的数据存储、 查询和管理需求。
02 数据库的创建与设计
Байду номын сангаас
创建数据库
启动Access
打开Microsoft Access应用程序,创建一个新 的数据库文件。
Access数据库入门教程
设置主键
选择一个字段作为主键, 以便唯一标识表中的每条 记录。
创建表和字段
01
打开“创建”选项卡, 选择“表”。
02
在弹出的“表设计”窗 口中,输入表名和字段 名,并选择适当的数据 类型。
03
保存表:点击“保存” 按钮,输入表名,然后 点击“确定”。
04
关闭表设计视图:在“ 视图”菜单中选择“数 据表视图”。
Access数据库可以存储多种类型的数据,包括文本、数字、 日期、图片等,并且可以通过表、查询、窗体和报表等对象 来组织和展示数据。
Acess数据库具有直观的用户界面和丰富 的向导功能,使得用户可以轻松地创建和 管理数据库。
Access数据库可以与其他微软办公软件无 缝集成,如Excel、Word等,方便数据的 导入和导出。
安全性高
Access数据库提供了强大的安全机制,可 以对数据进行加密、备份和恢复等操作, 保障数据的安全性和完整性。
Access数据库的未来发展
云端化趋势
随着云计算技术的不断发展,Access数据库可能会进一 步向云端化发展,提供更加灵活和便捷的数据存储和管理 服务。
跨平台兼容性
为了满足更多用户的需求,Access数据库可能会进一步 增强跨平台兼容性,支持更多操作系统和设备。
Access数据库入门教程
• 引言 • 创建Access数据库 • 查询数据 • 窗体和报表 • 数据库管理和安全 • 总结与展望
01
引言
什么是Access数据库
Access数据库是一种关系型数据库管理系统,由微软公司开 发,主要用于存储、管理和查询数据。它是一个桌面数据库 ,适合小型企业和个人使用。
合理布局控件、设置数据源、调整 窗体属性等,以提高用户体验。
2013年澳门特别行政区JAVA版数据结构(必备资料)
A.数据项是数据的基本单位
B.数据元素是数据的最小单位
C.数据结构是带结构的数据项的集合
D.一些表面上很不相同的数据可以有相同的逻辑结构
2、通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着 B 。
A.数据元素具有同一特点
B.不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致
D.s->next = p;s->prior = p->prior;p->prior->next = s;p->prior = s
45、若某线性表中最常用的操作是取第i个元素和找第i个元素的前驱,则采用( )存储方法最节省时间
A 顺序表 B单链表 C 双链表 D单循环链表
26、非空的循环单链表head的尾结点(由p所指向)满足 C 。
A.p->next == NULL B.p == NULL
C.p->next ==head D.p == head
27、在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 B 。
A.数据的存储结构 B.数据结构 C.数据的逻辑结构 D.数据元素之间的关系
33、一个栈的入栈序列是1,2,3,4,5,则不可能的出栈序列是( )
A 5,4,3,2,1 B 4,5,3,2,1 C 4,3,5,1,2 D 1,2,3,4,5
A.p->prior = s;s->next = p;p->prior->next = s;s->prior = p->prior
B.p->prior = s;p->prior->next = s;s->next = p;s->prior = p->prior
2015年澳门特别行政区数据概述入门
if(pre==null) {head=bt; pre=bt;} //处理第一个叶子结点
else{pre->rchild=bt; pre=bt; } //将叶子结点链入链表
void PreToPost(ElemType pre[] ,post[],int l1,h1,l2,h2)
//将满二叉树的先序序列转为后序序列,l1,h1,l2,h2是序列初始和最后结点的下标。
{if(h1>=l1)
{post[h2]=pre[l1]; //根结点
half=(h1-l1)/2; //左或右子树的结点数
else s[++top]=x; //x入栈。
else //读入的整数等于-1时退栈。
{if(top==0){printf(“栈空\n”);exit(0);}
else printf(“出栈元素是%d\n”,s[top--]);}
}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类型的队列,容量足够大
LinkedList head,pre=null; //全局变量
LinkedList InOrder(BiTree bt)
//中序遍历二叉树bt,将叶子结点从左到右链成一个单链表,表头指针为head
2024年注册测绘师之测绘综合能力题库附答案(典型题)
2024年注册测绘师之测绘综合能力题库附答案(典型题)单选题(共45题)1、基金销售机构应监测客户现金收支或款项划转情况,对符合大额交易标准的,在该大额交易发生后()个工作日内,向中国反洗钱监测分析中心报告。
A.1B.2C.5D.10【答案】 C2、关于隧道控制测量,以下说法错误的是()。
A.洞外高程控制测量通常使用水准测量B.每个洞口应埋设不少于两个水准点,最好是一站可以观测这两点的高差C.洞外平面控制测量可以使用GPS定位D.洞内平面控制测量可以使用GPS定位【答案】 D3、国家基础地理信息要素分类与代码规定,要素可分为()个大类。
A.7B.8C.9D.10【答案】 B4、基金市场营销的()是指基金营销作为一种理财产品或服务,需要制度化、规范化的持续性服务的特性。
A.服务性B.专业性C.持续性D.适用性【答案】 C5、地下管线点相对于邻近控制点的测量点位中误差最大为()cm。
A.±1B.±3C.±5D.±7【答案】 C6、下列质量检查项中,不属于栅格数据质量检查内容的是()。
A.几何精度B.逻辑一致性C.数据完整性D.接边精度【答案】 C7、下列测量工作中.不属于房产测量工作内容的是()。
A.控制测量B.变更测量C.界址测量D.竣工测量【答案】 D8、下列关于成套房屋套内建筑面积构成关系的表述中正确的是()。
A.套内建筑面积=套内使用面积+套内阳台面积B.套内建筑面积=套内使用面积+套内墙体面积+套内阳台面积C.套内建筑面积=套内使用面积+分摊得到的共有建筑面积D.套内建筑面积=套内使用面积+分摊得到的共有建筑面积+套内墙体面积【答案】 B9、()不属于基金销售结算资金。
A.基金赎回资金B.基金申购资金C.基金投资收益D.基金现金分红【答案】 C10、血浆中运输内源性胆固醇的脂蛋白是A.CMB.VLDLC.LDLD.HDL 2E.HDL 3【答案】 C11、在()办理私募基金管理人登记。
2015年澳门特别行政区数据总结大纲
1、连通图的生成树包括图中的全部n个顶点和足以使图连通的n-1条边,最小生成树是边上权值之和最小的生成树。
故可按权值从大到小对边进行排序,然后从大到小将边删除。
每删除一条当前权值最大的边后,就去测试图是否仍连通,若不再连通,则将该边恢复。
若仍连通,继续向下删;直到剩n-1条边为止。
void SpnTree (AdjList g)//用“破圈法”求解带权连通无向图的一棵最小代价生成树。
{typedef struct {int i,j,w}node; //设顶点信息就是顶点编号,权是整型数node edge[];scanf( "%d%d",&e,&n) ; //输入边数和顶点数。
for (i=1;i<=e;i++) //输入e条边:顶点,权值。
scanf("%d%d%d" ,&edge[i].i ,&edge[i].j ,&edge[i].w);for (i=2;i<=e;i++) //按边上的权值大小,对边进行逆序排序。
{edge[0]=edge[i]; j=i-1;while (edge[j].w<edge[0].w) edge[j+1]=edge[j--];edge[j+1]=edge[0]; }//fork=1; eg=e;while (eg>=n) //破圈,直到边数e=n-1.{if (connect(k)) //删除第k条边若仍连通。
{edge[k].w=0; eg--; }//测试下一条边edge[k],权值置0表示该边被删除k++; //下条边}//while}//算法结束。
connect()是测试图是否连通的函数,可用图的遍历实现,2、我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置(下标)。
用j 记住局部平台的起始位置,用i指示扫描b数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于l时,则修改最长平台的长度k(l=i-j)和其在b中的起始位置(k=j),直到b数组结束,l即为所求。
2015年澳门特别行政区数据库入门基础
1、两棵空二叉树或仅有根结点的二叉树相似;对非空二叉树,可判左右子树是否相似,采用递归算法。
int Similar(BiTree p,q) //判断二叉树p和q是否相似{if(p==null && q==null) return (1);else if(!p && q || p && !q) return (0);else return(Similar(p->lchild,q->lchild) && Similar(p->rchild,q->rchild)) }//结束Similar2、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。
29. ①试找出满足下列条件的二叉树1)先序序列与后序序列相同 2)中序序列与后序序列相同3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同3、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。
20分void Hospital(AdjMatrix w,int n)//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。
{for (k=1;k<=n;k++) //求任意两顶点间的最短路径for (i=1;i<=n;i++)for (j=1;j<=n;j++)if (w[i][k]+w[k][j]<w[i][j]) w[i][j]=w[i][k]+w[k][j];m=MAXINT; //设定m为机器内最大整数。
for (i=1;i<=n;i++) //求最长路径中最短的一条。
{s=0;for (j=1;j<=n;j++) //求从某村庄i(1<=i<=n)到其它村庄的最长路径。
Access数据库入门指南
Access数据库入门指南数据库是现代信息管理的重要工具之一,它可以帮助我们有效地存储、管理和检索大量的数据。
Access数据库是一种常用的关系型数据库管理系统(RDBMS),它提供了用户友好的界面和强大的功能,使得用户可以轻松创建、管理和操作数据库。
本文将为您提供Access数据库的入门指南,帮助您快速上手并熟练运用该工具。
1. 安装和启动Access数据库首先,您需要先下载和安装Access数据库软件。
安装完成后,双击桌面上的Access图标即可启动软件。
在打开的窗口中,您可以选择创建一个新的数据库或打开一个已有的数据库文件。
2. 创建数据库和表格在Access中,数据库由多个表格组成。
每个表格用于存储一类相关的数据。
在创建数据库时,您可以通过“新建表格”选项来创建一个空的表格,然后定义表格的字段和数据类型。
您可以为字段设置主键、索引等约束条件,以确保数据的完整性和准确性。
3. 添加数据创建表格后,您可以开始添加数据。
可以通过直接在表格中输入数据的方式,也可以通过导入外部文件的方式添加数据。
在输入数据时,请确保数据的格式正确,并遵循数据库设计的规范。
4. 查询数据Access提供了强大的查询功能,可以帮助您从数据库中检索符合特定条件的数据。
您可以使用查询设计器来创建查询,选择要检索的字段和条件,并设置排序、过滤等选项。
查询结果可以直接显示在查询结果窗口中,也可以导出为其他文件格式。
5. 更新和删除数据在数据库中,数据可能会随着时间的推移发生变化。
Access提供了更新和删除数据的功能,使您可以轻松修改和删除已有的数据记录。
只需选择要更新或删除的记录,并进行相应操作即可。
6. 数据报表数据报表是一种方便展示和呈现数据的方式。
在Access中,您可以使用报表设计器来创建各种样式和格式的报表。
您可以选择要包含的字段和数据,并进行排序、分组等操作。
生成的报表可以输出为打印版或电子版,以满足不同的需求。
access数据库入门(第2课)
第2课:Access数据库基本操作一、数据库表的创建和管理1. 打开Access软件,点击“新建”按钮,选择“空白数据库”。
2. 在弹出窗口中输入数据库名称,点击“创建”按钮,即可创建一个空白数据库。
3. 在创建好的数据库中,点击“表格设计”按钮,弹出新建表格的窗口。
4. 在新建表格的窗口中,输入字段名、数据类型、字段属性等信息,点击“保存”按钮完成表格的创建。
5. 双击表格名称,在表格中输入数据,点击“保存”按钮保存数据。
二、查询数据1. 在Access中,点击“查询设计”按钮,弹出新建查询的窗口。
2. 在新建查询的窗口中,选择要查询的表格或查询的字段,将字段拖入查询设计视图中。
3. 在查询设计视图中,设置查询条件,如筛选条件、排序规则等。
4. 点击“运行”按钮,即可查看符合条件的数据。
三、表格之间的关系1. 在Access中,点击“数据库工具”菜单,选择“关系”按钮,弹出“关系”窗口。
2. 在“关系”窗口中,将需要建立关系的表格拖入窗口中,建立表格之间的关系线。
3. 设置关系的连接字段和关系类型,如一对一、一对多等。
4. 点击“保存”按钮,保存表格之间的关系设置。
四、报表的生成1. 在Access中,点击“报表设计”按钮,弹出新建报表的窗口。
2. 在新建报表的窗口中,选择要包含在报表中的字段,将字段拖入报表设计视图中。
3. 设置报表的布局、格式、标题等内容。
4. 点击“预览”按钮,即可预览生成的报表。
五、表单的创建1. 在Access中,点击“表单设计”按钮,弹出新建表单的窗口。
2. 在新建表单的窗口中,选择要包含在表单中的字段,将字段拖入表单设计视图中。
3. 设置表单的布局、格式、标题等内容。
4. 点击“保存”按钮,即可保存生成的表单。
以上是Access数据库基本操作的介绍,通过学习这些内容,可以初步掌握Access数据库的基本使用方法。
在实际应用中,可以根据具体需求进行进一步的学习和实践,提升数据库操作的能力和水平。
2015年澳门特别行政区数据整理基础
1、证明由二叉树的中序序列和后序序列,也可以唯一确定一棵二叉树。
当n=1时,只有一个根结点,由中序序列和后序序列可以确定这棵二叉树。
设当n=m-1时结论成立,现证明当n=m时结论成立。
设中序序列为S1,S2,…,Sm,后序序列是P1,P2,…,Pm。
因后序序列最后一个元素Pm是根,则在中序序列中可找到与Pm相等的结点(设二叉树中各结点互不相同)Si(1≤i≤m),因中序序列是由中序遍历而得,所以Si是根结点,S1,S2,…,Si-1是左子树的中序序列,而Si+1,Si+2,…,Sm是右子树的中序序列。
若i=1,则S1是根,这时二叉树的左子树为空,右子树的结点数是m-1,则{S2,S3,…,Sm}和{P1,P2,…,Pm-1}可以唯一确定右子树,从而也确定了二叉树。
若i=m,则Sm是根,这时二叉树的右子树为空,左子树的结点数是m-1,则{S1,S2,…,Sm-1}和{P1,P2,…,Pm-1}唯一确定左子树,从而也确定了二叉树。
最后,当1<i<m时,Si把中序序列分成{S1,S2,…,Si-1}和{Si+1,Si+2,…,Sm}。
由于后序遍历是“左子树—右子树—根结点”,所以{P1,P2,…,Pi-1}和{Pi,Pi+1,…Pm-1}是二叉树的左子树和右子树的后序遍历序列。
因而由{S1,S2,…,Si-1}和{P1,P2,…,Pi-1}可唯一确定二叉树的左子树,由{Si+1,Si+2,…,Sm}和{Pi,Pi+1,…,Pm-1}可唯一确定二叉树的右子树。
2、对一般二叉树,仅根据一个先序、中序、后序遍历,不能确定另一个遍历序列。
但对于满二叉树,任一结点的左右子树均含有数量相等的结点,根据此性质,可将任一遍历序列转为另一遍历序列(即任一遍历序列均可确定一棵二叉树)。
void PreToPost(ElemType pre[] ,post[],int l1,h1,l2,h2)//将满二叉树的先序序列转为后序序列,l1,h1,l2,h2是序列初始和最后结点的下标。
清华大学计算机系考研难度解析
清华大学计算机系考研难度解析2015-05-17 15:41考研资讯一、清华大学计算机系考研难不难,跨专业的学生多不多?最近几年计算机技术考研很火,特别是清华大学这样的名校。
清华大学2015年计算机系研究生共招收16人,相对于清华其他专业招生人数还是比较多的,从这方面来说清华计算机系考研难度不大,专业课复习较为容易,考试题目难度不大。
在考研复试的时候,老师更看重跨专业学生的能力,而不是本科背景。
其次,考试科目里,计算机学科专业基础综合本身知识点难度并不大,跨专业的学生完全能够学得懂。
即使本科学计算机的同学,专业课也不见得比你强多少(大学学的内容本身就非常浅)。
所以记住重要的不是你之前学得如何,而是从决定考研起就要抓紧时间完成自己的计划,下定决心,就全身心投入,要相信付出总会有回报。
在凯程辅导班里很多这样三跨考生,都考的不错,主要是看你努力与否。
二、清华大学计算机系硕士毕业生就业怎么样?作为名牌院校的清华大学,本身的学术氛围好,有良好的师资力量,校友众多,人脉资源也不错,出国机会也不少,硕士毕业生社会认可度高,就业自然就没有问题。
2014年清华大学硕士毕业生就业率高达99.2%。
清华大学计算机系毕业生就业的主要去向:近3年来热门就业单位除微软、Google、雅虎、搜狐、网易、百度、IBM、INTEL等知名公司外,还包括众多的国家重点单位,如:中国出口信用保险公司,中华人民共和国审计署,中国农业银行总行,中央人民政府驻澳门特别行政区联络办公室,中国航空结算有限责任公司,中国国际电子商务中心,中国进出口银行,中国工商银行总行,中国银行股份有限公司北京市分行,中国建设银行股份有限公司,中国化工新材料总公司,大亚湾核电运营管理有限责任公司,中科软科技股份有限公司等等。
三、清华大学计算机系各招生专业介绍2015年清华大学计算机系研究生学费总额为1.6万元,学制2年。
有以下三个学术型专业招生:081200计算机科学与技术01计算机系统结构复试时专业综合考试内容:计算机系统结构(必考);编译原理、软件工程(二选一)。
2015澳门特别行政区数据结构基础考试答题技巧
8、以下属于顺序存储结构优点的是( A )。
A) 存储密度大 B) 插入运算方便
C)删除运算方便 D)可方便地用于各种逻辑结构的存储表示
9、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
3、已知广义表L=((x,y,z),a,(u,t,w)),从L 表中取出原子项t 的操作是( D )。
A) Head(Head(Tail(Tail(L))))
B) Tail(Head(Head(Tail(L))))
C) Head(Tail(Head(Tail(L))))
1、串的逻辑结构与( D )的逻辑结构不同。
A)线性表 B)栈
C)队列 D)树
2、栈进行插入和删除操作的特点是( A )。
A)LIFO B)FIFO
C)FCFS D)HPF
C)p=p->next->next; D) p->next=p;
40、设有一个栈,元素的进栈次序为A, B, C, D, E,下列是不可能的出栈序列是( C )。
A) A, B, C, D, E
B) B, C, D, E, A
C) E, A, B, C, D
D) E, D, C, B, A
41、下列各种数据结构中属于线性结构的有( A )。
A)栈 B) 二叉树
C) 广义表 D) 图
42、有一个有序表{1,4,6,10,18,35,42,53,67,71,78,84,92,99}。当用二分查找法查找键值为84的结点时,经( B )比较后查找成功。
A)(a,b) B)(c,d)
2015年香港特别行政区重要数据要领
1、因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。
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)}//结束LongestPath2、设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
3、设t是给定的一棵二叉树,下面的递归程序count(t)用于求得:二叉树t中具有非空的左,右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点个数NR和叶子结点个数N0。
N2、NL、NR、N0都是全局量,且在调用count(t)之前都置为0.typedef struct node{int data; struct node *lchild,*rchild;}node;int N2,NL,NR,N0;void count(node *t){if (t->lchild!=NULL) if (1)___ N2++; else NL++;else if (2)___ NR++; else (3)__ ;if(t->lchild!=NULL)(4)____; if (t->rchild!=NULL) (5)____;}26.树的先序非递归算法。
2015年澳门特别行政区基础数据入门
1、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。
(注:图中不存在顶点到自己的弧)有向图判断回路要比无向图复杂。
利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。
下面用0,1,2表示这三种状态。
前面已提到,若dfs(v)结束前出现顶点u到v的回边,则图中必有包含顶点v和u的回路。
对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。
void Print(int v,int start ) //输出从顶点start开始的回路。
{for(i=1;i<=n;i++)if(g[v][i]!=0 && visited[i]==1 ) //若存在边(v,i),且顶点i的状态为1。
{printf(“%d”,v);if(i==start) printf(“\n”); else Print(i,start);break;}//if}//Printvoid dfs(int v){visited[v]=1;for(j=1;j<=n;j++ )if (g[v][j]!=0) //存在边(v,j)if (visited[j]!=1) {if (!visited[j]) dfs(j); }//ifelse {cycle=1; Print(j,j);}visited[v]=2;}//dfsvoid find_cycle() //判断是否有回路,有则输出邻接矩阵。
visited数组为全局变量。
{for (i=1;i<=n;i++) visited[i]=0;for (i=1;i<=n;i++ ) if (!visited[i]) dfs(i);}//find_cycle2、题目中要求矩阵两行元素的平均值按递增顺序排序,由于每行元素个数相等,按平均值排列与按每行元素之和排列是一个意思。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BiTree p=(BiTree)malloc(sizeof(BiNode)); //生成根结点
p->data=level[0]; p->lchild=null; p->rchild=null; //填写该结点数据
}
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 //根结点有左子树和右子树
for(i=0;i<n;i++)
{pre=h;
p=h->next;
while(p!=h && p->data<A[i])
{pre=p; p=p->next;} //查找A[i]的插入位置
if(p==h || p->data!=A[i]) //重复数据不再输入
{s=(LinkedList)malloc(sizeof(LNode));
s->data=A[i]; pre->next=s; s->next=p;//将结点s链入链表中
}
}//for
return(h);
}算法结束
8、设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
InOrder(bt->rchild); //中序遍历左子树
pre->rchild=null; //设置链表尾
}
return(head); } //InOrder
时间复杂度为O(n),辅助变量使用head和pre,栈空间复杂度O(n)
i++; j=i; } //新平台起点
printf(“最长平台长度%d,在b数组中起始下标为%d”,l,k);
}// Platform
6、二部图(bipartite graph) G=(V,E)是一个能将其结点集V分为两不相交子集V 1和V2=V-V1的无向图,使得:V1中的任何两个结点在图G中均不相邻,V2中的任何结点在图G中也均不相邻。
}
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))
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);
void PreToPost(ElemType pre[] ,post[],int l1,h1,l2,h2)
//将满二叉树的先序序列转为后序序列,l1,h1,l2,h2是序列初始和最后结点的下标。
{if(h1>=l1)
{post[h2]=pre[l1]; //根结点
half=(h1-l1)/2; //左或右子树的结点数
{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)) //当队列不空,进行循环,构造二叉树的左右子树
{
lklist *p,*q,*t;
for(p=ha,hc=0;p!=0;p=p->next)
{ for(q=hb;q!=0;q=q->next) if (q->data==p->data) break;
if(q!=0){ t=(lklist *)malloc(sizeof(lklist)); t->data=p->data;t->next=hc; hc=t;}
9、 二叉树的层次遍历序列的第一个结点是二叉树的根。实际上,层次遍历序列中的每个结点都是“局部根”。确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左根右”三部分。若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。这样,定义一个全局变量指针R,指向层次序列待处理元素。算法中先处理根结点,将根结点和左右子女的信息入队列。然后,在队列不空的条件下,循环处理二叉树的结点。队列中元素的数据结构定义如下:
return(p);
}//算法结束
10、对一般二叉树,仅根据一个先序、中序、后序历,不能确定另一个遍历序列。但对于满二叉树,任一结点的左右子树均含有数量相等的结点,根据此性质,可将任一遍历序列转为另一遍历序列(即任一遍历序列均可确定一棵二叉树)。
void PreToPost(ElemType pre[] ,post[],int l1,h1,l2,h2)
//将满二叉树的先序序列转为后序序列,l1,h1,l2,h2是序列初始和最后结点的下标。
4、设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示。
typedef struct node {int data; struct node *next;}lklist;
void intersection(lklist *ha,lklist *hb,lklist *&hc)
LinkedList head,pre=null; //全局变量
LinkedList InOrder(BiTree bt)
//中序遍历二叉树bt,将叶子结点从左到右链成一个单链表,表头指针为head
{if(bt){InOrder(bt->lchild); //中序遍历左子树
LinkedList creat(ElemType A[],int n)
//由含n个数据的数组A生成循环链表,要求链表有序并且无值重复结点
{LinkedList h;
h=(LinkedList)malloc(sizeof(LNode));//申请结点
h->next=h; //形成空循环链表
}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类型的队列,容量足够大
typedef struct
{ int lvl; //层次序列指针,总是指向当前“根结点”在层次序列中的位置
int l,h; //中序序列的下上界
int f; //层次序列中当前“根结点”的双亲结点的指针
int lr; // 1—双亲的左子树 2—双亲的右子树
(1).请各举一个结点个数为5的二部图和非二部图的例子。
(2).请用C或PASCAL编写一个函数BIPARTITE判断一个连通无向图G是否是二部图,并分析程序的时间复杂度。设G用二维数组A来表示,大小为n*n(n为结点个数)。请在程序中加必要的注释。若有必要可直接利用堆栈或队列操作。【
7、本题要求建立有序的循环链表。从头到尾扫描数组A,取出A[i](0<=i<n),然后到链表中去查找值为A[i]的结点,若查找失败,则插入。
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)
}
}
5、我们用l代表最长平台的长度,用k指示最长平台在数组b中的起始位置(下标)。用j记住局部平台的起始位置,用i指示扫描b数组的下标,i从0开始,依次和后续元素比较,若局部平台长度(i-j)大于l时,则修改最长平台的长度k(l=i-j)和其在b中的起始位置(k=j),直到b数组结束,l即为所求。
if(bt->lchild==null && bt->rchild==null) //叶子结点
if(pre==null) {head=bt; pre=bt;} //处理第一个叶子结点
else{pre->rchild=bt; pre=bt; } //将叶子结点链入链表
1、设指针变量p指向双向链表中结点A,指针变量q指向被插入结点B,要求给出在结点A的后面插入结点B的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。