首页
试卷库
试题库
当前位置:
X题卡
>
所有题目
>
题目详情
关系数据库用 (6) 来表示实体之间的联系。关系的完整性约束有三方面的内容,其中,由数据库管理系统自动完成的是 (7) 。
查看本题答案
包含此试题的试卷
中级软件设计师《单项选择》真题及答案
点击查看
你可能感兴趣的试题
关系数据库实现表与表之间的联系是通过
实体完整性规则
参照完整性规则
用户定义的完整性
值域
关系数据库中实现表与表之间的联系是通过______
实体完整性规则
参照完整性规则
用户定义的完整性
值域
关系数据库的关系模型中采用表达实体集以及实体集之间的联系关系数据库的3种完整性约束中规定基本关
树形结构
网络结构
表格结构
实体结构
关系数据库用来表示实体之间的联系关系的完整性约束有三方面的内容其中由数据库管理系统自动完成的是
树结构
网结构
二维表
线性表
在关系数据库的关系模型中采用21表达实体集以及实体集之间的联系关系数据库的3种完整性约束中22规定基
树形结构
网络结构
表格结构
实体结构
表示实体类型及实体间联系的模型称为数据模型其中关系模型主要特征是用表示实体集表示实体间联系关系
二维表
三维表
树节点
对象
关系数据库中表与表之间的联系是通过______来实现的
实体完整性规则
参照完整性规则
用户自定义的完整性
值域
关系数据库用6来表示实体之间的联系关系的完整性约束有三方面的内容其中由数据库管理系统自动完成的是7
树结构
网结构
二维表
线性表
关系数据库用来表示实体之间的联系关系的完整性约束有三方面的内容其中由数据库管理系统自动完成的是
实体完整性
参照完整性
A、B都是
用户定义的完整性
关系数据库中表与表之间的联系是通过来实现的
实体完整性规则
参照完整性规则
用户自定义的完整性
域完整性规则
表示实体类型及实体间联系的模型称为数据模型其中关系模型主要特征是用表示实体集表示实体间联系关系
主键
外键
关系
链接
关系数据库中是通过______来实现表与表之间的联系的
实体完整性规则
值域
用户自定义的完整性
参照完整性规则
关系数据库的关系模型中采用表达实体集以及实体集之间的联系关系数据库的3种完整性约束中规定基本关
实体完整性
参照完整性
用户定义完整性
三种都是
在关系数据库的关系模型中采用21表达实体集以及实体集之间的联系关系数据库的3种完整性约束中22规定基
实体完整性
参照完整性
用户定义完整性
三种都是
热门试题
更多
阅读下列函数说明和C代码将应填入n处的字句写在对应栏内 [说明] 函数intToplogicalLinkedWDigraphG的功能是对图G中的顶点进行拓扑排序并返回关键路径的长度其中图G表示一个具有n个顶点的AOE网图中顶点从1~n依次编号图G的存储结构采用邻接表表示其数据类型定义如下 typedefstructGnode/*邻接表的表结点类型*/ intadjvex/*邻接顶点编号*/ intweight/*弧上的权值*/ structGnode*nextarc/*指示下一个弧的结点*/ Gnode typedefstructAdjlist/*邻接表的头结点类型*/ charvdata/*顶点的数据信息*/ structGnode*Firstadj/*指向邻接表的第一个表结点*/ Adjulist typedefstructLinkedWDigraph/*图的类型*/ intne/*图中顶点个数和边数*/ structAdjlist*head/*指向图中第一个顶点的邻接表的头结点*/ LinkedWDigraph 例如某AOE网如图21-1所示其邻接表存储结构如图21-2所示 [本题函数] intToplogicalLinkedWDigraphG Gnode*p intjWtop=0 int*Stack*ve*indegree ve=int*mallocG.n+1*sizeofint indegree=int*maZZocG.n+1*sizeofint/*存储网中各顶点的入度*/ Stack=int*mallocG.n+1*sizeofint/*存储入度为0的顶点的编号*/ if!ve||!indegree||!Stackexit0 forj=1j<=G.nj++ ve[j]=0indegree[j]=0 /*for*/ forj=1j<=G.nj++/*求网中各顶点的入度*/ p=G.head[j].Firstadj whilep 1p=p->nextarc /*while*/ /*for*/ forj=1j<=G.nj++/*求网中入度为0的顶点并保存其编号*/ if!indegree[j]stack[++top]=j whiletop>0 w=2 printf"%c"G.head[w].vdata p=G.head[w].Firstadj whilep 3 if!indegree[p->adjvex] Stack[++top]=p->adjvex if4 ve[p->adjvex]=ve[w]+p->weight p=p->nextarc /*while*/ /*while*/ return5 /*Toplogical*/ 5
在软件设计和编码过程中采取的做法将使软件更加容易理解和维护
阅读以下说明图和C代码将应填入n处的字句写在对应栏内 [说明] 一般的树结构常采用孩子一兄弟表示法表示即用二叉链表作为树的存储结构链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点例如如图21-6a所示的树的孩子一兄弟表示如图21-6b所示 函数LevelTraverse0的功能是对给定树进行层序遍历例如对如图21-6a所示的树进行层序遍历时结点的访问次序为DBAEFPC 对树进行层序遍历时使用了队列结构实现队列基本操作的函数原型如表21-1所示 表21-1实现队列基本操作的函数原型表 函数原型 说明 VoidInitQueueQueue*Q 初始化队列 BoolIsEmptyQueueQ 判断队列是否为空若是则返回TRUE否则返回FALSE VoidEnQueueQueue*QTreeNodep 元素入队列 VoidDeQueueQueue*QTreeNode*p 元素出队列 BoolStatus类型定义如下 typedefenumFALSE=0TRUE=1Bool typedefenumOVERFLOW=-2UNDERFLOW=-1ERROR=0OK=1Status树的二叉链表结点定义如下 typedefstructNode chardata structNode*fimstchild*nextbrother Node*TreeNode [本题函数] StatusLeveiTraverseTreeNoderoot /*层序遍历树树采用孩子一兄弟表示法root是树根结点的指针*/ QueuetemQ TreeNodeptrbrotherptr if!root returnERROR InitQueue&tempQ 1 brotherptr=root->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 2 /-end-while*/ while3 4 printf"%c/t"ptr->data if5continue 6 brotherptr=ptr->firstchild->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 7 /*end-while*/ /*end-while*/ returnOK /*LevelTraverse*/ 6
阅读下列说明图和C代码将应填入n处的字句写在对应栏内 [说明1] B树是一种多叉平衡查找树一棵m阶的B树或为空树或为满足下列特性的m叉树 ①树中每个结点至多有m棵子树 ②若根结点不是叶子结点则它至少有两棵子树 ③除根之外的所有非叶子结点至少有[m/2]棵子树 ④所有的非叶子结点中包含下列数据信息 nA0K1A1K2A2…K11A11 其中Ki=12…n为关键字且K<Ki+1i=12…n-1Aii=01…n为指向子树根结点的指针且指针Ai-1所指子树中所有结点的关键字均小于KiAi+1所指子树中所有结点的关键字均大于Kin为结点中关键字的数目 ⑤所有的叶子结点都出现在同一层次上并且不带信息可以看作是外部结点或查找失败的结点实际上这些结点不存在指向这些结点的指针为空 例如一棵4阶B树如图21-4所示结点中关键字的数目省略 B树的阶mBool类型关键字类型及B树结点的定义如下 #defineM4/*B树的阶数*/ typedefenumFALSE=0TRUE=1bool typedefintE1emKeyType typedefstructBTreeNode intnumkeys/*结点中关键字的数目*/ structBTreeNode*parent/*指向父结点的指针树根的父结点指针为空*/ StructBTreeNode*A[M]/*指向子树结点的指针数组*/ ElemKeyTypeK[M]/*存储关键字的数组K[0]闲置不用*/ BTreeNode 函数SearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr的功能是在给定的一棵m阶B树中查找关键字akey所在结点若找到则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针参数ptr返回akey所在结点的指针若akey不在该B树中则ptr返回查找失败时空指针所在结点的指针例如在如图21-4所示的4阶B树中查找关键字akey时ptr返回指向结点e的指针 注在结点中查找关键字akey时采用二分法 [本题函数] boolSearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr intlwhikmid BTreeNode*P=root *ptr=NULL whilep lw=1hi=1 whilelw<=hi mid=lw+hi/2 ifp->K[mid]==akey *ptr=p returnTRUE else if2 hi=mid-1 else lw=mid+1 *ptr=p p=3 returnFALSE [说明2] 在m阶B树中插入一个关键字时首先在最接近外部结点的某个非叶子结点中增加一个关键字若该结点中关键字的个数不超过m-1则完成插入否则要进行结点的“分裂”处理所谓“分裂”就是把结点中处于中间位置上的关键字取出来并插入其父结点中然后以该关键字为分界线把原结点分成两个结点“分裂”过程可能会一直持续到树根若树根结点也需要分裂则整棵树的高度增1 例如在如图21-4所示的B树中插入关键字25时需将其插入结点e中由于e中已经有3个关键字因此将关键字24插入结点e的父结点b中并以24为分界线将结点e分裂为e1和e2两个结点结果如图21-5所示 函数IsgrowingBTreeNode*rootElemKeyTypeakey的功能是判断在给定的m阶B树中插入关键字akey后该B树的高度是否增加若增加则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针 在函数Isgrowing中首先调用函数SearchBtree查找关键字akey是否在给定的m阶B树中若在则返回FALSE表明无须插入关键字akey树的高度不会增加否则通过判断结点中关键字的数目考察插入关键字akey后该B树的高度是否增加 [本题函数] boolIsgrowingBTreeNode*rootElenlKeyTypeakey BTreeNode*t*f if!SearchBtree4 t=f while5 t=t->parent if!t returnTRUE:// returnFALSE:// 3
阅读下列说明和C代码将应填入n处的字句写在对应栏内 [说明] 栈Stack结构是计算机语言实现中的一种重要数据结构对于任意栈进行插入和删除操作的一端称为栈顶StackTop而另一端称为栈底StackBottom栈的基本操作包括创建栈NewStack判断栈是否为空IsEmpty判断栈是否已满IsFull获取栈顶数据Top压栈/入栈Push弹栈/出栈Pop 当设计栈的存储结构时可以采取多种方式其中采用链式存储结构实现的栈中各数据项不必连续存储如图21-9所示 以下C代码采用链式存储结构实现一个整数栈操作 [C代码] typedefstructList intdata//栈数据 structList*next//上次入栈的数据地址 List typedefstructStack List*pTop//当前栈顶指针 Stack Stack*NewStackreturnStack*calloc1sizeofStack intIsEmptyStack*S//判断栈S是否为空栈 if1return1 return0 intTopStack*S//获取栈顶数据若栈为空则返回机器可表示的最小整数 ifIsEmptySreturnINT_MIN return2 voidPushStack*SinttheData//将数据theData压栈 List*newNode newNode=List*calloc1sizeofList newNode->data=theData newNode->next=S->pTop S->pTop=3 voidPopStack*S//弹栈 List*lastTop ifIsEmptySreturn lastTop=S->pTop S->pTop=4 freelastTop #defineMDaa<<2 intmain inti Stack*myStack myStack=NewStack PushmyStackMD1 PushmyStackMD2 PopmyStack PushmyStackMD3+1 while!IsEmptymyStack printf"%d"TopmyStack PopmyStack return0 以上程序运行时的输出结果为5 1
阅读下列说明和C代码将应填入n处的字句写在对应栏内 [说明] 栈Stack结构是计算机语言实现中的一种重要数据结构对于任意栈进行插入和删除操作的一端称为栈顶StackTop而另一端称为栈底StackBottom栈的基本操作包括创建栈NewStack判断栈是否为空IsEmpty判断栈是否已满IsFull获取栈顶数据Top压栈/入栈Push弹栈/出栈Pop 当设计栈的存储结构时可以采取多种方式其中采用链式存储结构实现的栈中各数据项不必连续存储如图21-9所示 以下C代码采用链式存储结构实现一个整数栈操作 [C代码] typedefstructList intdata//栈数据 structList*next//上次入栈的数据地址 List typedefstructStack List*pTop//当前栈顶指针 Stack Stack*NewStackreturnStack*calloc1sizeofStack intIsEmptyStack*S//判断栈S是否为空栈 if1return1 return0 intTopStack*S//获取栈顶数据若栈为空则返回机器可表示的最小整数 ifIsEmptySreturnINT_MIN return2 voidPushStack*SinttheData//将数据theData压栈 List*newNode newNode=List*calloc1sizeofList newNode->data=theData newNode->next=S->pTop S->pTop=3 voidPopStack*S//弹栈 List*lastTop ifIsEmptySreturn lastTop=S->pTop S->pTop=4 freelastTop #defineMDaa<<2 intmain inti Stack*myStack myStack=NewStack PushmyStackMD1 PushmyStackMD2 PopmyStack PushmyStackMD3+1 while!IsEmptymyStack printf"%d"TopmyStack PopmyStack return0 以上程序运行时的输出结果为5 3
阅读下列说明和C代码将应填入n处的字句写在对应栏内 [说明] 栈Stack结构是计算机语言实现中的一种重要数据结构对于任意栈进行插入和删除操作的一端称为栈顶StackTop而另一端称为栈底StackBottom栈的基本操作包括创建栈NewStack判断栈是否为空IsEmpty判断栈是否已满IsFull获取栈顶数据Top压栈/入栈Push弹栈/出栈Pop 当设计栈的存储结构时可以采取多种方式其中采用链式存储结构实现的栈中各数据项不必连续存储如图21-9所示 以下C代码采用链式存储结构实现一个整数栈操作 [C代码] typedefstructList intdata//栈数据 structList*next//上次入栈的数据地址 List typedefstructStack List*pTop//当前栈顶指针 Stack Stack*NewStackreturnStack*calloc1sizeofStack intIsEmptyStack*S//判断栈S是否为空栈 if1return1 return0 intTopStack*S//获取栈顶数据若栈为空则返回机器可表示的最小整数 ifIsEmptySreturnINT_MIN return2 voidPushStack*SinttheData//将数据theData压栈 List*newNode newNode=List*calloc1sizeofList newNode->data=theData newNode->next=S->pTop S->pTop=3 voidPopStack*S//弹栈 List*lastTop ifIsEmptySreturn lastTop=S->pTop S->pTop=4 freelastTop #defineMDaa<<2 intmain inti Stack*myStack myStack=NewStack PushmyStackMD1 PushmyStackMD2 PopmyStack PushmyStackMD3+1 while!IsEmptymyStack printf"%d"TopmyStack PopmyStack return0 以上程序运行时的输出结果为5 5
阅读下列函数说明和C代码将应填入n处的字句写在对应栏内 [说明] 函数intToplogicalLinkedWDigraphG的功能是对图G中的顶点进行拓扑排序并返回关键路径的长度其中图G表示一个具有n个顶点的AOE网图中顶点从1~n依次编号图G的存储结构采用邻接表表示其数据类型定义如下 typedefstructGnode/*邻接表的表结点类型*/ intadjvex/*邻接顶点编号*/ intweight/*弧上的权值*/ structGnode*nextarc/*指示下一个弧的结点*/ Gnode typedefstructAdjlist/*邻接表的头结点类型*/ charvdata/*顶点的数据信息*/ structGnode*Firstadj/*指向邻接表的第一个表结点*/ Adjulist typedefstructLinkedWDigraph/*图的类型*/ intne/*图中顶点个数和边数*/ structAdjlist*head/*指向图中第一个顶点的邻接表的头结点*/ LinkedWDigraph 例如某AOE网如图21-1所示其邻接表存储结构如图21-2所示 [本题函数] intToplogicalLinkedWDigraphG Gnode*p intjWtop=0 int*Stack*ve*indegree ve=int*mallocG.n+1*sizeofint indegree=int*maZZocG.n+1*sizeofint/*存储网中各顶点的入度*/ Stack=int*mallocG.n+1*sizeofint/*存储入度为0的顶点的编号*/ if!ve||!indegree||!Stackexit0 forj=1j<=G.nj++ ve[j]=0indegree[j]=0 /*for*/ forj=1j<=G.nj++/*求网中各顶点的入度*/ p=G.head[j].Firstadj whilep 1p=p->nextarc /*while*/ /*for*/ forj=1j<=G.nj++/*求网中入度为0的顶点并保存其编号*/ if!indegree[j]stack[++top]=j whiletop>0 w=2 printf"%c"G.head[w].vdata p=G.head[w].Firstadj whilep 3 if!indegree[p->adjvex] Stack[++top]=p->adjvex if4 ve[p->adjvex]=ve[w]+p->weight p=p->nextarc /*while*/ /*while*/ return5 /*Toplogical*/ 3
阅读以下说明和C程序将应填入n处的字句写在对应栏内[说明]假设需要将N个任务分配给N个工人同时去完成每个人都能承担这N个任务但费用不同下面的程序用回溯法计算总费用最小的一种工作分配方案在该方案中为每个人分配1个不同的任务程序中N个任务从0开始依次编号N个工人也从0开始依次编号主要的变量说明如下c[i][i]将任务i分配给工人j的费用task[i]值为0表示任务i未分配值为j表示任务i分配给工人jworker[k]值为0表示工人k未分配任务值为1表示工人k已分配任务mincost最小总费用[程序]#include<stdio.h>#defineN8/*N表示任务数和工人数*/intc[N][N]unsignedintmincost=65535/*设置min的初始值大于可能的总费用*/inttask[N]temp[N]worker[N]voidplanintkunsignedintcostintiif1&&cost<mincostmincost=costfori=0i<Ni++temp[i]=task[i]eisefori=0i<Ni++/*分配任务k*/ifworker[i]==0&&2worker[i]=1task[k]=3plan4cost+c[k][i]5task[k]=0/*if*//*plan*/voidmainintijfori=0i<Ni++/*设置每个任务由不同工人承担时的费用及全局数组的初值*/worker[i]=0task[i]=0temp[i]=0forj=0j<Nj++scanf%d&c[i][j]plan00/*从任务0开始分配*/printf/n最小费用=%d/nmincostfori=0i<Ni++printfTask%disassignedtoWorker%d/nitemp[i]/*main*/
阅读以下说明和C语言函数将应填入n处的字句写在对应栏内 [说明] 在一个分布网络中资源石油天然气电力等可从生产地送往其他地方在传输过程中资源会有损耗例如天然气的气压会减少电压会降低我们将需要输送的资源信息称为信号在信号从信源地送往消耗地的过程中仅能容忍一定范围的信号衰减称为容忍值分布网络可表示为一个树形结构如图21-7所示信号源是树根树中的每个结点除了根表示一个可以放置放大器的子结点其中某些结点同时也是信号消耗点信号从一个结点流向其子结点 每个结点有一个d值表示从其父结点到该结点的信号衰减量例如在图21-7中结点wpq的d值分别为213树根结点表示信号源其d值为0 每个结点有一个M值表示从该结点出发到其所有叶子结点的信号衰减量的最大值显然叶子结点的M值为0对于非叶子结点jM[j=maxMk+dkk是j的孩子结点在此公式中要计算结点的M值必须先算出其所有子结点的M值 在计算M值的过程中对于某个结点i其有一个子结点k满足dk+Mk大于容忍值则应在k处放置放大器否则从结点i到某叶子结点的信号衰减量会超过容忍值使得到达该叶子结点时信号不可用而在结点i处放置放大器并不能解决到达叶子结点的信号衰减问题 例如在图21-7中从结点p到其所有叶子结点的最大衰减值为4若容忍值为3则必须在s处放置信号放大器这样可使得结点p的M值为2同样需要在结点qv处放置信号放大器如图21-8中阴影结点所示若在某结点放置了信号放大器则从该结点输出的信号与信号源输出的信号等价 函数placeBoostersTreeNode*root的功能是对于给定树形分布网络中各个结点计算其信号衰减量的最大值并确定应在树中的哪些结点放置信号放大器 全局变量Tolerance保存信号衰减容忍值 树的结点类型定义如下 typedefstructTreeNDde intid/*当前结点的识别号*/ intchildNum/*当前结点的子结点数目*/ intd/*父结点到当前结点的信号衰减值*/ structTreeNde**childptr/*向量存放当前结点到其所有子结点的指针*/ intM/*当前结点到其所有子结点的信号衰减值中的最大值*/ boolboost/*是否在当前结点放置信号放大器的标志*/ TreeNode [C语言函数] voidplaceB00stersTreeNode*root /*计算root所指结点处的衰减量如果衰减量超出了容忍值则放置放大器*/ TreeNode*p intidegradation if1 degradation=0root->M=0 i=0 ifi>=root->ChildNum return p=2 fori<root->ChildNum&&pi++p=3 p->M=0 4 ifp->d+p->M>Tolerance/*在p所指结点中放置信号放大器*/ p->Doost=true p->M=0 ifp->d+p->M>degradation degradation=p->d+p->M root->M=5 1
阅读下列函数说明和C代码将应填入n处的字句写在对应栏内 [说明] 函数intToplogicalLinkedWDigraphG的功能是对图G中的顶点进行拓扑排序并返回关键路径的长度其中图G表示一个具有n个顶点的AOE网图中顶点从1~n依次编号图G的存储结构采用邻接表表示其数据类型定义如下 typedefstructGnode/*邻接表的表结点类型*/ intadjvex/*邻接顶点编号*/ intweight/*弧上的权值*/ structGnode*nextarc/*指示下一个弧的结点*/ Gnode typedefstructAdjlist/*邻接表的头结点类型*/ charvdata/*顶点的数据信息*/ structGnode*Firstadj/*指向邻接表的第一个表结点*/ Adjulist typedefstructLinkedWDigraph/*图的类型*/ intne/*图中顶点个数和边数*/ structAdjlist*head/*指向图中第一个顶点的邻接表的头结点*/ LinkedWDigraph 例如某AOE网如图21-1所示其邻接表存储结构如图21-2所示 [本题函数] intToplogicalLinkedWDigraphG Gnode*p intjWtop=0 int*Stack*ve*indegree ve=int*mallocG.n+1*sizeofint indegree=int*maZZocG.n+1*sizeofint/*存储网中各顶点的入度*/ Stack=int*mallocG.n+1*sizeofint/*存储入度为0的顶点的编号*/ if!ve||!indegree||!Stackexit0 forj=1j<=G.nj++ ve[j]=0indegree[j]=0 /*for*/ forj=1j<=G.nj++/*求网中各顶点的入度*/ p=G.head[j].Firstadj whilep 1p=p->nextarc /*while*/ /*for*/ forj=1j<=G.nj++/*求网中入度为0的顶点并保存其编号*/ if!indegree[j]stack[++top]=j whiletop>0 w=2 printf"%c"G.head[w].vdata p=G.head[w].Firstadj whilep 3 if!indegree[p->adjvex] Stack[++top]=p->adjvex if4 ve[p->adjvex]=ve[w]+p->weight p=p->nextarc /*while*/ /*while*/ return5 /*Toplogical*/ 1
软件风险一般包含两个特性
某项目制定的开发计划中定义了3个任务其中任务A首先开始且需要3周完成任务B必须在任务A启动1周后开始且需要2周完成任务C必须在任务A完成后才能开始且需要2周完成该项目的进度安排可用下面的甘特图来描述
阅读下列说明图和C代码将应填入n处的字句写在对应栏内 [说明1] B树是一种多叉平衡查找树一棵m阶的B树或为空树或为满足下列特性的m叉树 ①树中每个结点至多有m棵子树 ②若根结点不是叶子结点则它至少有两棵子树 ③除根之外的所有非叶子结点至少有[m/2]棵子树 ④所有的非叶子结点中包含下列数据信息 nA0K1A1K2A2…K11A11 其中Ki=12…n为关键字且K<Ki+1i=12…n-1Aii=01…n为指向子树根结点的指针且指针Ai-1所指子树中所有结点的关键字均小于KiAi+1所指子树中所有结点的关键字均大于Kin为结点中关键字的数目 ⑤所有的叶子结点都出现在同一层次上并且不带信息可以看作是外部结点或查找失败的结点实际上这些结点不存在指向这些结点的指针为空 例如一棵4阶B树如图21-4所示结点中关键字的数目省略 B树的阶mBool类型关键字类型及B树结点的定义如下 #defineM4/*B树的阶数*/ typedefenumFALSE=0TRUE=1bool typedefintE1emKeyType typedefstructBTreeNode intnumkeys/*结点中关键字的数目*/ structBTreeNode*parent/*指向父结点的指针树根的父结点指针为空*/ StructBTreeNode*A[M]/*指向子树结点的指针数组*/ ElemKeyTypeK[M]/*存储关键字的数组K[0]闲置不用*/ BTreeNode 函数SearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr的功能是在给定的一棵m阶B树中查找关键字akey所在结点若找到则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针参数ptr返回akey所在结点的指针若akey不在该B树中则ptr返回查找失败时空指针所在结点的指针例如在如图21-4所示的4阶B树中查找关键字akey时ptr返回指向结点e的指针 注在结点中查找关键字akey时采用二分法 [本题函数] boolSearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr intlwhikmid BTreeNode*P=root *ptr=NULL whilep lw=1hi=1 whilelw<=hi mid=lw+hi/2 ifp->K[mid]==akey *ptr=p returnTRUE else if2 hi=mid-1 else lw=mid+1 *ptr=p p=3 returnFALSE [说明2] 在m阶B树中插入一个关键字时首先在最接近外部结点的某个非叶子结点中增加一个关键字若该结点中关键字的个数不超过m-1则完成插入否则要进行结点的“分裂”处理所谓“分裂”就是把结点中处于中间位置上的关键字取出来并插入其父结点中然后以该关键字为分界线把原结点分成两个结点“分裂”过程可能会一直持续到树根若树根结点也需要分裂则整棵树的高度增1 例如在如图21-4所示的B树中插入关键字25时需将其插入结点e中由于e中已经有3个关键字因此将关键字24插入结点e的父结点b中并以24为分界线将结点e分裂为e1和e2两个结点结果如图21-5所示 函数IsgrowingBTreeNode*rootElemKeyTypeakey的功能是判断在给定的m阶B树中插入关键字akey后该B树的高度是否增加若增加则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针 在函数Isgrowing中首先调用函数SearchBtree查找关键字akey是否在给定的m阶B树中若在则返回FALSE表明无须插入关键字akey树的高度不会增加否则通过判断结点中关键字的数目考察插入关键字akey后该B树的高度是否增加 [本题函数] boolIsgrowingBTreeNode*rootElenlKeyTypeakey BTreeNode*t*f if!SearchBtree4 t=f while5 t=t->parent if!t returnTRUE:// returnFALSE:// 5
阅读以下说明和C代码将应填入n处的字句写在对应栏内[说明]在一个简化的绘图程序中支持的图形种类有点point和圆ckcle在设计过程中采用面向对象思想认为所有的点和圆都是一种图形shape并定义了类型shape_tpoint_t和circle_t分别表示基本图形点和圆并且点和圆具有基本图形的所有特征[C代码]typedefenumpointcircleshape_type/*程序中的两种图形点和圆*/typedefstruct/*基本的图形类型*/shape_typetype/*图形种类标识点或者圆*/void*destroy/*销毁图形操作的函数指针*/void*draw/*绘制图形操作的函数指针*/shape_ttypedefstructshape_tcommonintxintypoint_t/*定义点类型xy为点坐标*/voiddestroyPointpoint_t*thisfreethisprintfPointdestoryed!/n/*销毁点对象*/voiddrawPointpoint_t*thisprintfP%d%dthis->xthis->y/*绘制点对象*/shape_t*createPointva_list*ap/*创建点对象并设置其属性*/point_t*p_pointifp_point=point_t*mallocsizeofpoint_t==NULLreturnNULLp_point->common.type=pointp_point->common.destroy=destroyPointp_point->common.draw=drawPointp_point->x=va_arg*apint/*设置点的横坐标*/p_point->y=va_arg*apint/*设置点的纵坐标*/returnshape_t*p_point/*返回点对象指针*/typedefstruct/*定义圆类型*/shape_tcommonpoint_t*center/*圆心点*/intradius/*圆半径*/circle_tvoiddestroyCircleCircle_t*thisfree1freethisprintfCircledestoryed!/nvoiddrawCircleCircle_t*thisprintf<C<>2.drawthis->center/*绘制圆心*/printf.%dthis->radiusshape_t*createCircleva_list*ap/*创建一个圆并设置其属性*/Circle_t*p_circleifp_circle=circle_t*mallocSizeofcircle_t==NULLreturnNULLp_circle->common.type=circlep_circle->common.destroy=destroyCirclep_circle->common.draw=drawCircle3=createPointap/*设置圆心*/p_circle->radius=va_arg*apint/*设置圆半径*/returnp_circleshape_t*createShapeshape_typest/*创建某一种具体的图形*/va_listap/*可变参数列表*/shape_t*p_shape=NULL4apstifst==pointp_shape=createPoint&ap/*创建点对象*/ifst==circlep_shape=createCircle&ap/*创建圆对象*/va_endapreturnp_shapeintmaininti/*循环控制变量用于循环计数*/shape_t*shapes[2]/*图形指针数组存储图形的地址*/shapes[0]=createShapepoint23/*横坐标为2纵坐标为3*/shapes[1]=createShapeCircle204010/*圆心坐标为2040半径为10*/fori=0i<2i++shapes[i]->drawshapes[i]printf/n/*绘制数组中图形*/fori=1i>=0i--shapes[i]->destroyshapes[i]/*销毁数组中图形*/return0[运行结果]P235Circledestoryed!Pointdestoryed!
阅读下列说明图和C代码将应填入n处的字句写在对应栏内 [说明1] B树是一种多叉平衡查找树一棵m阶的B树或为空树或为满足下列特性的m叉树 ①树中每个结点至多有m棵子树 ②若根结点不是叶子结点则它至少有两棵子树 ③除根之外的所有非叶子结点至少有[m/2]棵子树 ④所有的非叶子结点中包含下列数据信息 nA0K1A1K2A2…K11A11 其中Ki=12…n为关键字且K<Ki+1i=12…n-1Aii=01…n为指向子树根结点的指针且指针Ai-1所指子树中所有结点的关键字均小于KiAi+1所指子树中所有结点的关键字均大于Kin为结点中关键字的数目 ⑤所有的叶子结点都出现在同一层次上并且不带信息可以看作是外部结点或查找失败的结点实际上这些结点不存在指向这些结点的指针为空 例如一棵4阶B树如图21-4所示结点中关键字的数目省略 B树的阶mBool类型关键字类型及B树结点的定义如下 #defineM4/*B树的阶数*/ typedefenumFALSE=0TRUE=1bool typedefintE1emKeyType typedefstructBTreeNode intnumkeys/*结点中关键字的数目*/ structBTreeNode*parent/*指向父结点的指针树根的父结点指针为空*/ StructBTreeNode*A[M]/*指向子树结点的指针数组*/ ElemKeyTypeK[M]/*存储关键字的数组K[0]闲置不用*/ BTreeNode 函数SearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr的功能是在给定的一棵m阶B树中查找关键字akey所在结点若找到则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针参数ptr返回akey所在结点的指针若akey不在该B树中则ptr返回查找失败时空指针所在结点的指针例如在如图21-4所示的4阶B树中查找关键字akey时ptr返回指向结点e的指针 注在结点中查找关键字akey时采用二分法 [本题函数] boolSearchBtreeBTreeNode*rootElemKeyTypeakeyBTreeNode**ptr intlwhikmid BTreeNode*P=root *ptr=NULL whilep lw=1hi=1 whilelw<=hi mid=lw+hi/2 ifp->K[mid]==akey *ptr=p returnTRUE else if2 hi=mid-1 else lw=mid+1 *ptr=p p=3 returnFALSE [说明2] 在m阶B树中插入一个关键字时首先在最接近外部结点的某个非叶子结点中增加一个关键字若该结点中关键字的个数不超过m-1则完成插入否则要进行结点的“分裂”处理所谓“分裂”就是把结点中处于中间位置上的关键字取出来并插入其父结点中然后以该关键字为分界线把原结点分成两个结点“分裂”过程可能会一直持续到树根若树根结点也需要分裂则整棵树的高度增1 例如在如图21-4所示的B树中插入关键字25时需将其插入结点e中由于e中已经有3个关键字因此将关键字24插入结点e的父结点b中并以24为分界线将结点e分裂为e1和e2两个结点结果如图21-5所示 函数IsgrowingBTreeNode*rootElemKeyTypeakey的功能是判断在给定的m阶B树中插入关键字akey后该B树的高度是否增加若增加则返回TRUE否则返回FALSE其中root是指向该m阶B树根结点的指针 在函数Isgrowing中首先调用函数SearchBtree查找关键字akey是否在给定的m阶B树中若在则返回FALSE表明无须插入关键字akey树的高度不会增加否则通过判断结点中关键字的数目考察插入关键字akey后该B树的高度是否增加 [本题函数] boolIsgrowingBTreeNode*rootElenlKeyTypeakey BTreeNode*t*f if!SearchBtree4 t=f while5 t=t->parent if!t returnTRUE:// returnFALSE:// 1
阅读以下说明图和C代码将应填入n处的字句写在对应栏内 [说明] 一般的树结构常采用孩子一兄弟表示法表示即用二叉链表作为树的存储结构链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点例如如图21-6a所示的树的孩子一兄弟表示如图21-6b所示 函数LevelTraverse0的功能是对给定树进行层序遍历例如对如图21-6a所示的树进行层序遍历时结点的访问次序为DBAEFPC 对树进行层序遍历时使用了队列结构实现队列基本操作的函数原型如表21-1所示 表21-1实现队列基本操作的函数原型表 函数原型 说明 VoidInitQueueQueue*Q 初始化队列 BoolIsEmptyQueueQ 判断队列是否为空若是则返回TRUE否则返回FALSE VoidEnQueueQueue*QTreeNodep 元素入队列 VoidDeQueueQueue*QTreeNode*p 元素出队列 BoolStatus类型定义如下 typedefenumFALSE=0TRUE=1Bool typedefenumOVERFLOW=-2UNDERFLOW=-1ERROR=0OK=1Status树的二叉链表结点定义如下 typedefstructNode chardata structNode*fimstchild*nextbrother Node*TreeNode [本题函数] StatusLeveiTraverseTreeNoderoot /*层序遍历树树采用孩子一兄弟表示法root是树根结点的指针*/ QueuetemQ TreeNodeptrbrotherptr if!root returnERROR InitQueue&tempQ 1 brotherptr=root->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 2 /-end-while*/ while3 4 printf"%c/t"ptr->data if5continue 6 brotherptr=ptr->firstchild->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 7 /*end-while*/ /*end-while*/ returnOK /*LevelTraverse*/ 2
阅读以下说明和C代码将应填入n处的字句写在对应栏内[说明]在一个简化的绘图程序中支持的图形种类有点point和圆ckcle在设计过程中采用面向对象思想认为所有的点和圆都是一种图形shape并定义了类型shape_tpoint_t和circle_t分别表示基本图形点和圆并且点和圆具有基本图形的所有特征[C代码]typedefenumpointcircleshape_type/*程序中的两种图形点和圆*/typedefstruct/*基本的图形类型*/shape_typetype/*图形种类标识点或者圆*/void*destroy/*销毁图形操作的函数指针*/void*draw/*绘制图形操作的函数指针*/shape_ttypedefstructshape_tcommonintxintypoint_t/*定义点类型xy为点坐标*/voiddestroyPointpoint_t*thisfreethisprintfPointdestoryed!/n/*销毁点对象*/voiddrawPointpoint_t*thisprintfP%d%dthis->xthis->y/*绘制点对象*/shape_t*createPointva_list*ap/*创建点对象并设置其属性*/point_t*p_pointifp_point=point_t*mallocsizeofpoint_t==NULLreturnNULLp_point->common.type=pointp_point->common.destroy=destroyPointp_point->common.draw=drawPointp_point->x=va_arg*apint/*设置点的横坐标*/p_point->y=va_arg*apint/*设置点的纵坐标*/returnshape_t*p_point/*返回点对象指针*/typedefstruct/*定义圆类型*/shape_tcommonpoint_t*center/*圆心点*/intradius/*圆半径*/circle_tvoiddestroyCircleCircle_t*thisfree1freethisprintfCircledestoryed!/nvoiddrawCircleCircle_t*thisprintf<C<>2.drawthis->center/*绘制圆心*/printf.%dthis->radiusshape_t*createCircleva_list*ap/*创建一个圆并设置其属性*/Circle_t*p_circleifp_circle=circle_t*mallocSizeofcircle_t==NULLreturnNULLp_circle->common.type=circlep_circle->common.destroy=destroyCirclep_circle->common.draw=drawCircle3=createPointap/*设置圆心*/p_circle->radius=va_arg*apint/*设置圆半径*/returnp_circleshape_t*createShapeshape_typest/*创建某一种具体的图形*/va_listap/*可变参数列表*/shape_t*p_shape=NULL4apstifst==pointp_shape=createPoint&ap/*创建点对象*/ifst==circlep_shape=createCircle&ap/*创建圆对象*/va_endapreturnp_shapeintmaininti/*循环控制变量用于循环计数*/shape_t*shapes[2]/*图形指针数组存储图形的地址*/shapes[0]=createShapepoint23/*横坐标为2纵坐标为3*/shapes[1]=createShapeCircle204010/*圆心坐标为2040半径为10*/fori=0i<2i++shapes[i]->drawshapes[i]printf/n/*绘制数组中图形*/fori=1i>=0i--shapes[i]->destroyshapes[i]/*销毁数组中图形*/return0[运行结果]P235Circledestoryed!Pointdestoryed!
阅读以下函数说明图和C代码将应填入n处的字句写在对应栏内 [说明] 散列文件的存储单位称为桶Bucket假如一个桶能存放m个记录当桶中已有m个同义词散列函数值相同的记录时存放第m+1个同义词会发生“溢出”此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中相对地称存放前m个同义词的桶为“基桶”溢出桶和基桶大小相同用指针链接查找指定元素记录时首先在基桶中查找若找到则成功返回否则沿指针到溢出桶中进行查找 例如设散列函数为HashKey=Keymod7记录的关键字序列为151421879629335241491963161037751531453565168705453建立的散列文件内容如图21-3所示 为简化起见散列文件的存储单位以内存单元表示 函数InsertToHashTableintNewElemKey的功能是若新元素NewElemKey正确插入散列文件中则返回值1否则返回值0 采用的散列函数为HashNewElemKey=NewElemKey%P其中P为设定的基桶数目 函数中使用的预定义符号如下 #defineNULLKey-1/*散列桶的空闲单元标识*/ #defineP7/*散列文件中基桶的数目*/ #defineITEMS3/*基桶和溢出桶的容量*/ typedefstructBucketNode/*基桶和溢出桶的类型定义*/ intKeyData[ITEMS] structBucketNode*Link BUCKET BUCKETBucket[P]/*基桶空间定义*/ [本题函数] intInsertToHashTableintNewElemKey /*将元素NewElemKey插入散列桶中若插入成功则返回0否则返回-1*/ /*设插入第一个元素前基桶的所有KeyData[]Link域已分别初始化为NULLKEYNULL*/ intIndex/*基桶编号*/ intik BUCKET*s*front*t 1 fori=0i<ITEMSi++/*在基桶查找空闲单元若找到则将元素存入*/ ifBucket[Index].KeyData[i]==NULLKEY Bucket[Index].KeyData[i]=NewElemKeybreak if2return0 /*若基桶己满则在溢出桶中查找空闲单元若找不到则申请新的溢出桶*/ 3t=Bucket[Index].Link ift!=NULL/*有溢出桶*/ whilet!=NULL fork=0k<ITEMSk++ ift->KeyData[k]==NULLKEY/*在溢出桶链表中找到空闲单元*/ t->KeyData[k]=NewElemKeybreak /*if*/ if4t=t->Link elsebreak /*while*/ /*if*/ if5/*申请新溢出桶并将元素存入*/ s=BUCKET*mallOCsizeofBUCKET if!sreturn-1 s->Link=NULL fork=0k<ITEMSk++ s->KeyData[k]=NULLKEY s->KeyData[0]=NewElemKey 6 /*if*/ return0 /*InsertToHashTable*/ 3
阅读以下说明和C语言函数将应填入n处的字句写在对应栏内 [说明] 在一个分布网络中资源石油天然气电力等可从生产地送往其他地方在传输过程中资源会有损耗例如天然气的气压会减少电压会降低我们将需要输送的资源信息称为信号在信号从信源地送往消耗地的过程中仅能容忍一定范围的信号衰减称为容忍值分布网络可表示为一个树形结构如图21-7所示信号源是树根树中的每个结点除了根表示一个可以放置放大器的子结点其中某些结点同时也是信号消耗点信号从一个结点流向其子结点 每个结点有一个d值表示从其父结点到该结点的信号衰减量例如在图21-7中结点wpq的d值分别为213树根结点表示信号源其d值为0 每个结点有一个M值表示从该结点出发到其所有叶子结点的信号衰减量的最大值显然叶子结点的M值为0对于非叶子结点jM[j=maxMk+dkk是j的孩子结点在此公式中要计算结点的M值必须先算出其所有子结点的M值 在计算M值的过程中对于某个结点i其有一个子结点k满足dk+Mk大于容忍值则应在k处放置放大器否则从结点i到某叶子结点的信号衰减量会超过容忍值使得到达该叶子结点时信号不可用而在结点i处放置放大器并不能解决到达叶子结点的信号衰减问题 例如在图21-7中从结点p到其所有叶子结点的最大衰减值为4若容忍值为3则必须在s处放置信号放大器这样可使得结点p的M值为2同样需要在结点qv处放置信号放大器如图21-8中阴影结点所示若在某结点放置了信号放大器则从该结点输出的信号与信号源输出的信号等价 函数placeBoostersTreeNode*root的功能是对于给定树形分布网络中各个结点计算其信号衰减量的最大值并确定应在树中的哪些结点放置信号放大器 全局变量Tolerance保存信号衰减容忍值 树的结点类型定义如下 typedefstructTreeNDde intid/*当前结点的识别号*/ intchildNum/*当前结点的子结点数目*/ intd/*父结点到当前结点的信号衰减值*/ structTreeNde**childptr/*向量存放当前结点到其所有子结点的指针*/ intM/*当前结点到其所有子结点的信号衰减值中的最大值*/ boolboost/*是否在当前结点放置信号放大器的标志*/ TreeNode [C语言函数] voidplaceB00stersTreeNode*root /*计算root所指结点处的衰减量如果衰减量超出了容忍值则放置放大器*/ TreeNode*p intidegradation if1 degradation=0root->M=0 i=0 ifi>=root->ChildNum return p=2 fori<root->ChildNum&&pi++p=3 p->M=0 4 ifp->d+p->M>Tolerance/*在p所指结点中放置信号放大器*/ p->Doost=true p->M=0 ifp->d+p->M>degradation degradation=p->d+p->M root->M=5 3
RUP在每个阶段都有主要目标并在结束时产生一些制品在结束时产生在适当的平台上集成的软件产品
WebSQLisaSQL-like76languageforextractinginformationfromtheweb.Itscapabilitiesforperformingnavigationofweb77makeitausefultoolforautomatingseveralweb-relatedtasksthatrequirethesystematicprocessingofeitherailthefinksina78allthepagesthatcanbereachedfromagivenURLthrough79thatmatchapatternoracombinationofboth.WebSQLalsoprovidestransparentaccesstoindexserversthatcanbequeriedviatheCommon80Interface. 77是
在模拟环境下常采用黑盒测试检验所开发的软件是否与需求规格说明书一致其中有效性模测试属于中的一个步骤
阅读以下说明和C语言函数将应填入n处的字句写在对应栏内 [说明] 在一个分布网络中资源石油天然气电力等可从生产地送往其他地方在传输过程中资源会有损耗例如天然气的气压会减少电压会降低我们将需要输送的资源信息称为信号在信号从信源地送往消耗地的过程中仅能容忍一定范围的信号衰减称为容忍值分布网络可表示为一个树形结构如图21-7所示信号源是树根树中的每个结点除了根表示一个可以放置放大器的子结点其中某些结点同时也是信号消耗点信号从一个结点流向其子结点 每个结点有一个d值表示从其父结点到该结点的信号衰减量例如在图21-7中结点wpq的d值分别为213树根结点表示信号源其d值为0 每个结点有一个M值表示从该结点出发到其所有叶子结点的信号衰减量的最大值显然叶子结点的M值为0对于非叶子结点jM[j=maxMk+dkk是j的孩子结点在此公式中要计算结点的M值必须先算出其所有子结点的M值 在计算M值的过程中对于某个结点i其有一个子结点k满足dk+Mk大于容忍值则应在k处放置放大器否则从结点i到某叶子结点的信号衰减量会超过容忍值使得到达该叶子结点时信号不可用而在结点i处放置放大器并不能解决到达叶子结点的信号衰减问题 例如在图21-7中从结点p到其所有叶子结点的最大衰减值为4若容忍值为3则必须在s处放置信号放大器这样可使得结点p的M值为2同样需要在结点qv处放置信号放大器如图21-8中阴影结点所示若在某结点放置了信号放大器则从该结点输出的信号与信号源输出的信号等价 函数placeBoostersTreeNode*root的功能是对于给定树形分布网络中各个结点计算其信号衰减量的最大值并确定应在树中的哪些结点放置信号放大器 全局变量Tolerance保存信号衰减容忍值 树的结点类型定义如下 typedefstructTreeNDde intid/*当前结点的识别号*/ intchildNum/*当前结点的子结点数目*/ intd/*父结点到当前结点的信号衰减值*/ structTreeNde**childptr/*向量存放当前结点到其所有子结点的指针*/ intM/*当前结点到其所有子结点的信号衰减值中的最大值*/ boolboost/*是否在当前结点放置信号放大器的标志*/ TreeNode [C语言函数] voidplaceB00stersTreeNode*root /*计算root所指结点处的衰减量如果衰减量超出了容忍值则放置放大器*/ TreeNode*p intidegradation if1 degradation=0root->M=0 i=0 ifi>=root->ChildNum return p=2 fori<root->ChildNum&&pi++p=3 p->M=0 4 ifp->d+p->M>Tolerance/*在p所指结点中放置信号放大器*/ p->Doost=true p->M=0 ifp->d+p->M>degradation degradation=p->d+p->M root->M=5 5
软件文档按照其产生和使用的范围可分为开发文档管理文档和用户文档其中开发文档不包括
阅读以下说明图和C代码将应填入n处的字句写在对应栏内 [说明] 一般的树结构常采用孩子一兄弟表示法表示即用二叉链表作为树的存储结构链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点例如如图21-6a所示的树的孩子一兄弟表示如图21-6b所示 函数LevelTraverse0的功能是对给定树进行层序遍历例如对如图21-6a所示的树进行层序遍历时结点的访问次序为DBAEFPC 对树进行层序遍历时使用了队列结构实现队列基本操作的函数原型如表21-1所示 表21-1实现队列基本操作的函数原型表 函数原型 说明 VoidInitQueueQueue*Q 初始化队列 BoolIsEmptyQueueQ 判断队列是否为空若是则返回TRUE否则返回FALSE VoidEnQueueQueue*QTreeNodep 元素入队列 VoidDeQueueQueue*QTreeNode*p 元素出队列 BoolStatus类型定义如下 typedefenumFALSE=0TRUE=1Bool typedefenumOVERFLOW=-2UNDERFLOW=-1ERROR=0OK=1Status树的二叉链表结点定义如下 typedefstructNode chardata structNode*fimstchild*nextbrother Node*TreeNode [本题函数] StatusLeveiTraverseTreeNoderoot /*层序遍历树树采用孩子一兄弟表示法root是树根结点的指针*/ QueuetemQ TreeNodeptrbrotherptr if!root returnERROR InitQueue&tempQ 1 brotherptr=root->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 2 /-end-while*/ while3 4 printf"%c/t"ptr->data if5continue 6 brotherptr=ptr->firstchild->nextbrother whilebrotherptr EnQueue&tempQbrotherptr 7 /*end-while*/ /*end-while*/ returnOK /*LevelTraverse*/ 4
阅读以下函数说明图和C代码将应填入n处的字句写在对应栏内 [说明] 散列文件的存储单位称为桶Bucket假如一个桶能存放m个记录当桶中已有m个同义词散列函数值相同的记录时存放第m+1个同义词会发生“溢出”此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中相对地称存放前m个同义词的桶为“基桶”溢出桶和基桶大小相同用指针链接查找指定元素记录时首先在基桶中查找若找到则成功返回否则沿指针到溢出桶中进行查找 例如设散列函数为HashKey=Keymod7记录的关键字序列为151421879629335241491963161037751531453565168705453建立的散列文件内容如图21-3所示 为简化起见散列文件的存储单位以内存单元表示 函数InsertToHashTableintNewElemKey的功能是若新元素NewElemKey正确插入散列文件中则返回值1否则返回值0 采用的散列函数为HashNewElemKey=NewElemKey%P其中P为设定的基桶数目 函数中使用的预定义符号如下 #defineNULLKey-1/*散列桶的空闲单元标识*/ #defineP7/*散列文件中基桶的数目*/ #defineITEMS3/*基桶和溢出桶的容量*/ typedefstructBucketNode/*基桶和溢出桶的类型定义*/ intKeyData[ITEMS] structBucketNode*Link BUCKET BUCKETBucket[P]/*基桶空间定义*/ [本题函数] intInsertToHashTableintNewElemKey /*将元素NewElemKey插入散列桶中若插入成功则返回0否则返回-1*/ /*设插入第一个元素前基桶的所有KeyData[]Link域已分别初始化为NULLKEYNULL*/ intIndex/*基桶编号*/ intik BUCKET*s*front*t 1 fori=0i<ITEMSi++/*在基桶查找空闲单元若找到则将元素存入*/ ifBucket[Index].KeyData[i]==NULLKEY Bucket[Index].KeyData[i]=NewElemKeybreak if2return0 /*若基桶己满则在溢出桶中查找空闲单元若找不到则申请新的溢出桶*/ 3t=Bucket[Index].Link ift!=NULL/*有溢出桶*/ whilet!=NULL fork=0k<ITEMSk++ ift->KeyData[k]==NULLKEY/*在溢出桶链表中找到空闲单元*/ t->KeyData[k]=NewElemKeybreak /*if*/ if4t=t->Link elsebreak /*while*/ /*if*/ if5/*申请新溢出桶并将元素存入*/ s=BUCKET*mallOCsizeofBUCKET if!sreturn-1 s->Link=NULL fork=0k<ITEMSk++ s->KeyData[k]=NULLKEY s->KeyData[0]=NewElemKey 6 /*if*/ return0 /*InsertToHashTable*/ 5
阅读以下说明和C程序将应填入n处的字句写在对应栏内[说明]假设需要将N个任务分配给N个工人同时去完成每个人都能承担这N个任务但费用不同下面的程序用回溯法计算总费用最小的一种工作分配方案在该方案中为每个人分配1个不同的任务程序中N个任务从0开始依次编号N个工人也从0开始依次编号主要的变量说明如下c[i][i]将任务i分配给工人j的费用task[i]值为0表示任务i未分配值为j表示任务i分配给工人jworker[k]值为0表示工人k未分配任务值为1表示工人k已分配任务mincost最小总费用[程序]#include<stdio.h>#defineN8/*N表示任务数和工人数*/intc[N][N]unsignedintmincost=65535/*设置min的初始值大于可能的总费用*/inttask[N]temp[N]worker[N]voidplanintkunsignedintcostintiif1&&cost<mincostmincost=costfori=0i<Ni++temp[i]=task[i]eisefori=0i<Ni++/*分配任务k*/ifworker[i]==0&&2worker[i]=1task[k]=3plan4cost+c[k][i]5task[k]=0/*if*//*plan*/voidmainintijfori=0i<Ni++/*设置每个任务由不同工人承担时的费用及全局数组的初值*/worker[i]=0task[i]=0temp[i]=0forj=0j<Nj++scanf%d&c[i][j]plan00/*从任务0开始分配*/printf/n最小费用=%d/nmincostfori=0i<Ni++printfTask%disassignedtoWorker%d/nitemp[i]/*main*/
WebSQLisaSQL-like76languageforextractinginformationfromtheweb.Itscapabilitiesforperformingnavigationofweb77makeitausefultoolforautomatingseveralweb-relatedtasksthatrequirethesystematicprocessingofeitherailthefinksina78allthepagesthatcanbereachedfromagivenURLthrough79thatmatchapatternoracombinationofboth.WebSQLalsoprovidestransparentaccesstoindexserversthatcanbequeriedviatheCommon80Interface. 79是
阅读以下函数说明图和C代码将应填入n处的字句写在对应栏内 [说明] 散列文件的存储单位称为桶Bucket假如一个桶能存放m个记录当桶中已有m个同义词散列函数值相同的记录时存放第m+1个同义词会发生“溢出”此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中相对地称存放前m个同义词的桶为“基桶”溢出桶和基桶大小相同用指针链接查找指定元素记录时首先在基桶中查找若找到则成功返回否则沿指针到溢出桶中进行查找 例如设散列函数为HashKey=Keymod7记录的关键字序列为151421879629335241491963161037751531453565168705453建立的散列文件内容如图21-3所示 为简化起见散列文件的存储单位以内存单元表示 函数InsertToHashTableintNewElemKey的功能是若新元素NewElemKey正确插入散列文件中则返回值1否则返回值0 采用的散列函数为HashNewElemKey=NewElemKey%P其中P为设定的基桶数目 函数中使用的预定义符号如下 #defineNULLKey-1/*散列桶的空闲单元标识*/ #defineP7/*散列文件中基桶的数目*/ #defineITEMS3/*基桶和溢出桶的容量*/ typedefstructBucketNode/*基桶和溢出桶的类型定义*/ intKeyData[ITEMS] structBucketNode*Link BUCKET BUCKETBucket[P]/*基桶空间定义*/ [本题函数] intInsertToHashTableintNewElemKey /*将元素NewElemKey插入散列桶中若插入成功则返回0否则返回-1*/ /*设插入第一个元素前基桶的所有KeyData[]Link域已分别初始化为NULLKEYNULL*/ intIndex/*基桶编号*/ intik BUCKET*s*front*t 1 fori=0i<ITEMSi++/*在基桶查找空闲单元若找到则将元素存入*/ ifBucket[Index].KeyData[i]==NULLKEY Bucket[Index].KeyData[i]=NewElemKeybreak if2return0 /*若基桶己满则在溢出桶中查找空闲单元若找不到则申请新的溢出桶*/ 3t=Bucket[Index].Link ift!=NULL/*有溢出桶*/ whilet!=NULL fork=0k<ITEMSk++ ift->KeyData[k]==NULLKEY/*在溢出桶链表中找到空闲单元*/ t->KeyData[k]=NewElemKeybreak /*if*/ if4t=t->Link elsebreak /*while*/ /*if*/ if5/*申请新溢出桶并将元素存入*/ s=BUCKET*mallOCsizeofBUCKET if!sreturn-1 s->Link=NULL fork=0k<ITEMSk++ s->KeyData[k]=NULLKEY s->KeyData[0]=NewElemKey 6 /*if*/ return0 /*InsertToHashTable*/ 1
热门题库
更多
中级信息系统管理工程师
初级程序员
中级软件设计师
初级网络管理员
初级信息处理技术员
中级数据库系统工程师
中级多媒体应用设计师
高级系统分析师
高级网络规划设计师
高级系统架构师
中级信息系统监理师
初级通信工程师
中级通信工程师
通信新技术、新业务知识
无线通信专业技术
移动通信专业技术