• 272.50 KB
  • 2022-04-22 11:32:16 发布

《数据结构》期中题库及答案.doc

  • 67页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'一、判断题: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、希尔排序在较率上较直接接入排序有较大的改进。但是不稳定的。(  )30、在平均情况下,快速排序法最快,堆积排序法最节省空间。(    )31、快速排序法是一种稳定性排序法。(    )32、算法一定要有输入和输出。(     )33、算法分析的目的旨在分析算法的效率以求改进算法。(      )34、非空线性表中任意一个数据元素都有且仅有一个直接后继元素。(      )35、数据的存储结构不仅有顺序存储结构和链式存储结构,还有索引结构与散列结构。(      )36、若频繁地对线性表进行插入和删除操作,该线性表采用顺序存储结构更合适。(      )37、若线性表采用顺序存储结构,每个数据元素占用4个存储单元,第12个数据元素的存储地址为144,则第1个数据元素的存储地址是101。(     ) 38、若长度为n的线性表采用顺序存储结构,删除表的第i个元素之前需要移动表中n-i+1个元素。(      )39、符号p->next出现在表达式中表示p所指的那个结点的内容。(      )40、要将指针p移到它所指的结点的下一个结点是执行语句p←p->next。(       )41、若某堆栈的输入序列为1,2,3,4,则4,3,1,2不可能是堆栈的输出序列之一。(     )42、线性链表中各个链结点之间的地址不一定要连续。(    )43、程序就是算法,但算法不一定是程序。(     )44、线性表只能采用顺序存储结构或者链式存储结构。(    )45、线性表的链式存储结构是通过指针来间接反映数据元素之间逻辑关系的。(    )46、除插入和删除操作外,数组的主要操作还有存取、修改、检索和排序等。(      )47、稀疏矩阵中0元素的分布有规律,因此可以采用三元组方法进行压缩存储。(     )48、不管堆栈采用何种存储结构,只要堆栈不空,可以任意删除一个元素。(    )49、确定串T在串S中首次出现的位置的操作称为串的模式匹配。(     )50、深度为h的非空二叉树的第i层最多有2i-1 个结点。(    )51、满二叉树也是完全二叉树。(    )52、已知一棵二叉树的前序序列和后序序列可以唯一地构造出该二叉树。(     )53、非空二叉排序树的任意一棵子树也是二叉排序树。(    )54、对一棵二叉排序树进行前序遍历一定可以得到一个按值有序的序列。(    )55、一个广义表的深度是指该广义表展开后所含括号的层数。(   )56、散列表的查找效率主要取决于所选择的散列函数与处理冲突的方法。(     )57、序列初始为逆序时,冒泡排序法所进行的元素之间的比较次数最多。(     ) 58、已知指针P指向键表L中的某结点,执行语句P=P-〉next不会删除该链表中的结点。(     )59、在链队列中,即使不设置尾指针也能进行入队操作。(    )60、如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。(       )61、设与一棵树T所对应的二叉树为BT,则与T中的叶子结点所对应的BT中的结点也一定是叶子结点。(     )62、若图G的最小生成树不唯一,则G的边数一定多于n-1,并且权值最小的边有多条(其中n为G的顶点数)。(    )63、给出不同的输入序列建造二叉排序树,一定得到不同的二叉排序树。(     )64、由于希尔排序的最后一趟与直接插入排序过程相同,因此前者一定比后者花费的时间多。(     )65、程序越短,程序运行的时间就越少。(      )66、采用循环链表作为存储结构的队列就是循环队列。(      )67、堆栈是一种插入和删除操作在表的一端进行的线性表。(     )68、一个任意串是其自身的子串。(     )69、哈夫曼树一定是完全二叉树。(     )70、带权连通图中某一顶点到图中另一定点的最短路径不一定唯一。(    )71、折半查找方法可以用于按值有序的线性链表的查找。(     )72、稀疏矩阵压缩存储后,必会失效掉随机存取功能。(      )73、由一棵二叉树的前序序列和后序序列可以唯一确定它。(     )74、在n个结点的元向图中,若边数在于n-1,则该图必是连通图。(      )75、在完全二叉树中,若某结点元左孩子,则它必是叶结点。(    ) 76、若一个有向图的邻接矩阵中,对角线以下元素均为0,则该图的拓扑有序序列必定存在。(   )77、树的带权路径长度最小的二叉树中必定没有度为1的结点。(    )78、二叉树可以用0≤度≤2的有序树来表示。(     )79、一组权值,可以唯一构造出一棵哈夫曼树。(     ) 80、101,88,46,70,34,39,45,58,66,10)是堆;(   )81、将一棵树转换成二叉树后,根结点没有左子树;(    )82、用树的前序遍历和中序遍历可以导出树的后序遍历;(    )83、在非空线性链表中由p所指的结点后面插入一个由q所指的结点的过程是依次执行语句:q->next=p->next;p->next=q。(    )84、非空双向循环链表中由q所指的结点后面插入一个由p指的结点的动作依次为:p->prior=q, p->next=q->next,q->next=p,q->prior->next←p。(    )85、删除非空链式存储结构的堆栈(设栈顶指针为top)的一个元素的过程是依次执行:p=top,top= p->next,free (p)。(   )86、哈希的查找无需进行关键字的比较。(   )87、一个好的哈希函数应使函数值均匀的分布在存储空间的有效地址范围内,以尽可能减少冲突。(     )88、排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。(    )89、队列是一种可以在表头和表尾都能进行插入和删除操作的线性表。(     )90、在索引顺序表上实现分块查找,在等概率查找情况下,其平均查找长度不与表的个数有关,而与每一块中的元素个数有关。(   )91、对于有向图,顶点的度分为入度和出度,入度是以该顶点为终点的入边数目;出度是以该顶点为起点的出边数目,该顶点的度等于其入度和出度之和。(    ) 92、无向图的邻接矩阵是对称的有向图的邻接矩阵是不对称的。(    )93、具有n个顶点的连通图的生成树具有n-1条边(   )二、填空题:1、《数据结构》课程讨论的主要内容是数据的逻辑结构、存储结构和______________。2、数据结构算法中,通常用时间复杂度和__________________两种方法衡量其效率。3、一个算法一该具有______,______,____,______和____这五种特性。4、若频繁地对线性表进行插入与删除操作,该线性表应采用____________存储结构。5、在非空线性表中除第一个元素外,集合中每个数据元素只有一个_______;除最后一个元素之外,集合中每个数据元素均只有一个_________。6、线性表中的每个结点最多有________前驱和____________后继。7、______链表从任何一个结点出发,都能访问到所有结点。8、链式存储结构中的结点包含____________域,_______________域。9、在双向链表中,每个结点含有两个指针域,一个指向______结点,另一个指向________结点。10、某带头结点的单链表的头指针head,判定该单链表非空的条件______________。11、在双向链表中,每个结点含有两个指针域,一个指向_______结点,另一个指向_____结点。12、已知指针p指向单链表中某个结点,则语句p->next=p->next->next的作用__删除p 的后继结点_。13、已知在结点个数大于1的单链表中,指针p指向某个结点,则下列程序段结束时,指针q指向*p的_____________结点。q=p;while(q->next!=p)  q=q->next;14、若要在单链表结点*P后插入一结点*S,执行的语句_______________。15、线性表的链式存储结构地址空间可以_________,而向量存储必须是地址空间___________。16、栈结构允许进行删除操作的一端为_____________。17、在栈的顺序实现中,栈顶指针top,栈为空条件______________。18、对于单链表形式的队列,其空队列的F指针和R指针都等于__________________。19、若数组s[0..n-1]为两个栈s1和s2的共用存储空间,仅当s[0..n-1]全满时,各栈才不能进行栈操作,则为这两个栈分配空间的最佳方案是:s1和s2的栈顶指针的初值分别为_________。20、允许在线性表的一端插入,另一端进行删除操作的线性表称为_______。插入的一端为______,删除的一端为______。21、设数组A[m]为循环队列Q的存储空间,font为头指针,rear为尾指针,判定Q为空队列的条件____________________。22、对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R。若在逻辑上看一个环,则队列中元素的个数为___________。23、已知循环队列的存储空间为数组data[21],且头指针和尾指针分别为8和3,则该队列的当前长度__________。24、一个串的任意个连续的字符组成的子序列称为该串的________,包含该子串的串称为________。25、求串T在主串S中首次出现的位置的操作是________________。26、在初始为空的队列中插入元素A,B,C,D以后,紧接着作了两次删除操作,此时的队尾元素是__________。27、在长度为n的循环队列中,删除其节点为x的时间复杂度为_______________。 28、已知广义表L为空,其深度为___________。29、已知一顺序存储的线性表,每个结点占用k个单元,若第一个结点的地址为DA1,则第i个结点的地址为______________。30、设一行优先顺序存储的数组A[5][6],A[0][0]的地址为1100,且每个元素占2个存储单元,则A[2][3]的地址为_____________。31、设有二维数组A[9][19],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6,6]的存储地址为______________,按列优顺序存储,元素A[6,6]的存储地址为______________。32、在进行直接插入排序时, 其数据比较次数与数据的初始排列________关;而在进行直接选择排序时,其数据比较次数与数据的初始排列__________关。33、假设以行为优先存储的三维数组A[5][6][7],A[0][0][0]的地址为1100,每个元素占两个存储单元,则A[4][3][2]的地址为_______。34、设二维数组A[m][n]按列优先存储,每个元素占1个存储单元,元素A00的存储地址loc(A00),则Aij的存储地址loc(Aij)=____________________。35、稀疏矩阵一般采用__________方法进行压缩存储。36、稀疏矩阵可用_________进行压缩存储,存储时需存储非零元的________、________、________。37、若矩阵中所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为__________。38、若一个n 阶矩阵A中的元素满足:Aij=Aji (0<=I ,j<=n-1)则称A为____________矩阵;若主对角线上方(或下方)的所有元素均为零时,称该矩阵为______________。39、对于上三角形和下三角形矩阵,分别以按行存储和按列存储原则进行压缩存储到数组M[k]中,若矩阵中非0元素为Aij,则k对应为________和__________。40、设有一上三角形矩阵A[5][5]按行压缩存储到数组B中,B[0]的地址为100,每个元素占2个单元,则A[3][2]地址为____________。41、广义表(A,(a,b),d,e,((i,j),k)),则广义表的长度为___________,深度为___________。 42、已知广义表A=((a,b,c),(d,e,f)),则运算head(head (tail(A))))=___ ________。43、已知广义表ls =(a,(b,c,d),e),运用head和tail函数取出ls中的原子b的运算是_____。44、在树结构里,有且仅有一个结点没有前驱,称为根。非根结点有且仅有一个___________,且存在一条从根到该结点的_______________。45、度数为0的结点,即没有子树的结点叫作__________结点或_________结点。同一个结点的儿子结点之间互称为___________结点。 46、假定一棵树的广义表为A(B(e),C(F(h,i,j),g),D),则该树的度为___________,树的深度为_________,终端结点为______,单分支结点为,双分支结点个数为 _______,三分支结点为_______,C结点的双亲结点是______,孩子结点是______。48、完全二叉树、满二叉树、线索二叉树和二叉排序树这四个名词术语中,与数据的存储结构有关系的是_____________。47、有三个结点的二叉树,最多有________种形状。48、每一趟排序时从排好序的元素中挑出一个值最小的元素与这些未排小序的元素的第一个元素交换位置,这种排序方法成为_____________排序法。49、高度为k的二叉树具有的结点数目,最少为_____,最多为_____。50、对任何一棵二叉树,若n0,n1,n2分别是度为0,1,2的结点的个数,则n0=_______。51、在含100个结点的完全二叉树,叶子结点的个数为_______。52、将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫_____。53、若一棵满二叉树含有121个结点,则该树的深度为_________。54、一个具有767个结点的完全二叉树,其叶子结点个数为________。55、深度为90的满二叉树,第11层有________个结点。56、有100个结点的完全二叉树,深度为________。 57、设一棵二叉树中度为2的结点10个,则该树的叶子个数为________。58、若待散列的序列为(18,25,63,50,42,32,9),散列函数为H(key)=key MOD 9,与18发生冲突的元素有_____________个。59、含有3个2度结点和4个叶结点的二叉树可含__________个1度结点。60、一棵具有5层满二叉树中节点总数为___________。61、一棵含有16个结点的完全二叉树,对他按层编号,对于编号为7的结点,他的双亲结点及左右结点编号为______、______、_______。62、深度为k(设根的层数为1)的完全二叉树至少有_______个结点, 至多有_______个结点。63、若要对某二叉排序树进行遍历,保证输出所有结点的值序列按增序排列,应对该二叉排序树采用________遍历法。64、在序列(2,5,8,11,15,16,22,24,27,35,50)中采用折半查找(二分查找)方法查找元素24,需要进行______________次元素之间的比较。65、设有10个值,构成哈夫曼树,则该哈夫曼树共有______个结点。66、从树中一个结点到另一个结点之间的分支构成这两个结点之间的____________。67、关键字自身作为哈希函数,即H(k)=k,也可自身加上一个常数作为哈希函数,即H(k)=k+C这种构造哈希函数的方式叫____________。68、对于一个图G,若边集合E(G)为无向边的集合,则称该图为____________。69、对于一个图G,若边集合E(G)为有向边的集合,则称该图为____________。70、对于有向图,顶点的度分为入度和出度,以该顶点为终点的边数目叫________;以该顶点为起点的边数目叫_________。71、一个无向图采用邻接矩阵存储方法,其邻接矩阵一定是一个______________。72、有一个n个顶点的有向完全图的弧数_____________。73、在无向图中,若从顶点A到顶点B存在_________,则称A与B之间是连通的。 74、在一个无向图中,所有顶点的度数之和等于所有边数的___________倍。75、一个连通图的生成树是该图的____________连通子图。若这个连通图有n个顶点, 则它的生成树有__________条边。76、无向图的邻接矩阵是一个_____________矩阵。77、如果从一无向图的任意顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是_____ _______。78、若采用邻接表的存储结构,则图的广度优先搜索类似于二叉树的____________遍历。79、若图的邻接矩阵是对称矩阵,则该图一定是________________。80、从如图所示的临接矩阵可以看出,该图共有______个顶点。如果是有向图,该图共有______条弧;如果是无向图,则共有________条边。81、如果从一个顶点出发又回到该顶点,则此路径叫做___________。82、一个具有个n顶点的无向图中,要连通全部顶点至少需要________条边。83、给定序列{100, 86, 48, 73, 35, 39, 42, 57, 66, 21}, 按堆结构的定义, 则它一定_________堆。84、从未排序序列中选择一个元素,该元素将当前参加排序的那些元素分成前后两个部分,前一部分中所有元素都小于等于所选元素,后一部分中所有元素都大于或等于所选元素,而此时所选元素处在排序的最终位置。这种排序法称为_____________排序法。85、折半搜索只适合用于___________________。86、结点关键字转换为该结点存储单元地址的函数H称为_____________或叫__________。87、在索引查找中,首先查找________,然后查找相应的_________,整个索引查找的平均查找长度等于查找索引表的平均长度与查找相应子表的平均查找长度的_______。三、选择题:(   )1.数据结构通常是研究数据的   及它们之间的联系。A存储和逻辑结构  B存储和抽象   C理想和抽象    D理想与逻辑(   )2.在堆栈中存取数据的原则是   。A先进先出        B后进先出     C先进后出      D随意进出(   )3.将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子的编号为______。A.98           B.99          C.50           D.48(   )4.对于如图所示二叉树采用中根遍历,正确的遍历序列应为(    )A.ABCDEF                    B.ABECDFC.CDFBEA                    D.CBDAEF(   )5.设有100个元素,用折半查找法进行查找时,最大比较次数是_____ 。A.25    B.50     C.10        D.7(   )6.快速排序在_____情况下最易发挥其长处。A.被排序数据中含有多个相同排序码 B.被排序数据已基本有序C.被排序数据完全无序            D.被排序数据中最大值和最小值相差悬殊(    )7.由两个栈共享一个向量空间的好处是______。     A减少存取时间,降低下溢发生的机率 B节省存储空间,降低上溢发生的机率C减少存取时间,降低上溢发生的机率 D节省存储空间,降低下溢发生的机率(    )8.某二叉树的前序和后序序列正好相反,则该二叉树一定是_____的二叉树 A空或者只有一个结点   B高度等于其结点数C任一结点无左孩子     D任一结点无右孩子(    )9.设散列表长m=14,散列函数H(K)=K%11,已知表中已有4个结点:r(15)=4; r(38)=5; r(61)=6;r(84)=7,其他地址为空,如用二次探测再散列处理冲突,关键字为49的结点地址是________。A8         B3      C5           D9(   )10.在含有n个项点有e条边的无向图的邻接矩阵中,零元素的个数为________。A.e         B.2e         C.n2-e         D.n2-2e(     )11.图的深度优先遍历类似于二叉树的_______。A.先序遍历       B.中序遍历   C.后序遍历          D.层次遍历(    )12.设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为_______。A. O(1)       B. O(log2n)      C. O(n)           D. O(n2)(    )13.堆的形状是一棵_______。A.二叉排序树             B.满二叉树    C.完全二叉树            D.平衡二叉树(    )14.一个无向连连通图的生成树是含有该连通图的全部项点的_______。A.极小连通子图            B.极小子图     C.极大连通子图           D.极大子图(    )15.一个序列中有10000个元素,若只想得到其中前10个最小元素,最好采用_______方法A.快速排序              B.堆排序    C.插入排序                     D.二路归并排序(   )16.设单链表中结点的结构为  typedef struct node { file://链表结点定义  ElemType data; file://数据  struct node * Link; file://结点后继指针  } ListNode;  已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列哪一个操作______。A. s->link = p; p->link = s;  B. s->link = p->link; p->link = s;C. s->link = p->link; p = s;    D. p->link = s; s->link = p;(   )17.设单链表中结点的结构为typedef struct node { file://链表结点定义ElemType data; file://数据struct node * Link; file://结点后继指针} ListNode;非空的循环单链表first的尾结点(由p所指向)满足:______A. p->link == NULL;   B. p == NULL; C. p->link == first;  D. p == first;(    )18.计算机识别、存储和加工处理的对象被统称为_________A.数据       B.数据元素    C.数据结构            D.数据类型(   )19.在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是________A.O(1)      B.O(n) C.O(nlogn)D.O(n2)(   )20.队和栈的主要区别是________A.逻辑结构不同             B.存储结构不同C.所包含的运算个数不同     D.限定插入和删除的位置不同(    )21.链栈与顺序栈相比,比较明显的优点是________A.插入操作更加方便      B.删除操作更加方便C.不会出现下溢的情况    D.不会出现上溢的情况(    )22.在目标串T[0…n-1]=”xwxxyxy”中,对模式串p[0…m-1]=”xy”进行子串定位操作的结果_______A.0            B.2C.3        D.5(   )23.已知广义表的表头为A,表尾为(B,C),则此广义表为________A.(A,(B,C))  B.(A,B,C)C.(A,B,C)      D.(( A,B,C)) (   )24.二维数组A按行顺序存储,其中每个元素占1个存储单元。若A[1][1]的存储地址为420,A[3][3]的存储地址为446,则A[5][5]的存储地址为_______A.470         B.471C.472         D.473(    )25.二叉树中第5层上的结点个数最多为________A.8          B.15C.16              D.32(   )26.如果某图的邻接矩阵是对角线元素均为零的上三角矩阵,则此图是_______A.有向完全图    B.连通图C.强连通图D.有向无环图(    )27.对n个关键字的序列进行快速排序,平均情况下的空间复杂度为_______A.O(1)          B.O(logn)C.O(n)          D.O(nlogn)(   )28.对于哈希函数H(key)=key%13,被称为同义词的关键字是_______A.35和41         B.23和39C.15和44             D.25和51(   )29. 由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为________。A、 24                             B、 48      C、 72                             D、 53(   )30.对包含N个元素的散列表进行检索,平均检索长度 ________A、为 o(log2N)             B、为o(N)  C、不直接依赖于N          D、上述三者都不是(   )31. 向堆中插入一个元素的时间复杂度为________。A、 O(log2n)                      B、 O(n)      C、 O(1)                          D、 O(nlog2n)(    )32.下面关于图的存储的叙述中,哪一个是正确的。 ________A.用相邻矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关 B.用相邻矩阵法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关C.用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关D.用邻接表法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关(    )33.输入序列为(A,B,C,D),不可能得到的输出序列是______.A. (A,B,C,D)                B.(D,C,B,A)C.(A, C,D,B)                D.(C,A,B,D)(   )34.在长度为n的顺序存储的线性表中,删除第i个元素(1≤i≤n)时,需要从前向后依次前移____个元素。A、n-i                         B、n-i+1           C、n-i-1                       D、i(   )35.设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度为____。A、O(1)                     B、O(n)           C、O(n2)                    D、O(log 2 n)(   )36.假定一个顺序队列的队首和队尾指针分别为f和r,则判断队空的条件为 ____。A、f+1==r                      B、r+1==f          C、f==0                        D、f==r(   )37.从堆中删除一个元素的时间复杂以为____。A、O(1)                      B、O(log 2 n)      C、O(n)                      D、O(nlog 2 n)(   )38.若需要利用形参直接访问实参,则应把形参变量说明为____参数。A.指针                      B.引用       C.值              D.变量(    )39.在一个单链表HL中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行____。A. q一>next=p一>next;p一>next=q;C. q一>next=p一>next;p一>next=q;B. p一>next=q一>next;q=p;        D. p一>next=q一>next;q一>next=p;(    )40.在一个顺序队列中,队首指针指向队首元素的____位置。A.前一个                  B.后一个          C.当前                    D.最后一个(   )41.向二叉搜索树中插入一个元素时,其时间复杂度大致力____。A  O(1)                         B  O(1og2n)C  O(n)                         D  O(nlog2n)(   )42.算法指的是________A.计算机程序    B.解决问题的计算方法C.排序算法D.解决问题的有限运算序列(   )43.线性表采用链式存储时,结点的存储地址________ A.必须是不连续的    B.连续与否均可C.必须是连续的D.和头结点的存储地址相连续(   )44.将长充为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为________A.O(1)       B.O(n)C.O(m)           D.O(m+n)(   )45.由两个栈共享一个向量空间的好处是:________A.减少存取时间,降低下溢发生的机率 B.节省存储空间,降低上溢发生的机率C.减少存取时间,降低上溢发生的机率 D.节省存储空间,降低下溢发生的机率(   )46.设数组DAtA[m]作为循环队列SQ的存储空间,front为队头指针,reAr为队尾指针,则执行出队操作后其头指针front值为________A. front=front+1            B. front=(front+1)%(m-1)C. front=(front-1)%m        D. front=(front+1)%m(  )47.如下陈述中正确的是________A. 串是一种特殊的线性表         B. 串的长度必须大于零C. 串中元素只能是字母         D. 空串就是空白串(   )48.若目标串的长充为n,模式串的长度为[n/3],则执行模式匹配算法时,在最坏情况下的时间复杂度是________A.O(1)           B.O(n)C.O(n2)           D.O(n3)(   )49.一个非空广义表的表头________A.不可能是子表B.只能是子表 C.只能是原子    D.可以是子表或原子(   )50. 从堆中删除一个元素的时间复杂度为________。A、 O(1)                         B、 O(n)      C、 O(log2n)                     D、 O(nlog2n)(    )51.一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数为________A.4          B.5C.6          D.7(   )52. 从二叉搜索树中查找一个元素时,其时间复杂度大致为________。A、 O(n)                        B、 O(1)      C、 O(log2n)                    D、 O(n2)(   )53. 根据n个元素建立一棵二叉搜索树时,其时间复杂度大致为________。A、 O(n)                     B、 O(log2n )      C、 O(n2)                    D、 O(nlog2n)(   )54.用某种排序方法对关键字序列(25,84,21,47,15,27,68,35,20)进行排序时,序列的变化情况是如下________:         20,15,21,25,47,27,68,35,84         15,20,21,25,35,27,47,68,84         15,20,21,25,27,35,47,68,84则所采用的排序方法是________A.选择排序               B.希尔排序C.归并排序               D.快速排序 (   )55.适于对动态查找表进行高效率查找的组织结构是________A.有序表             B.分块有序表C.二叉排序树         D.线性链表(    )56. 若需要利用形参直接访问实参,则应把形参变量说明为________参数。 A 指针                       B 引用         C 值                         D 常量 (     )57.链式栈与顺序栈相比,一个比较明显的优点是________。 A. 插入操作更加方便            B. 通常不会出现栈满的情况 C. 不会出现栈空的情况            D. 删除操作更加方便 (    )58.设单链表中结点的结构为(data, link)。已知指针q所指结点是指针p所指结点的直接前驱,若在*q与*p之间插入结点*s,则应执行下列哪一个操作________ A. s->link = p->link; p->link = s;     B. p->link = s; s->link = q;C. p->link = s->link; s->link = p;     D. q->link = s; s->link = p;(     )59.若让元素1,2,3依次进栈,则出栈次序不可能出现________种情况。 A. 3, 2, 1                          B. 2, 1, 3 C. 3, 1, 2                          D. 1, 3, 2 (   )60.线性链表不具有的特点是________。 A. 随机访问                       B. 不必事先估计所需存储空间大小 C. 插入与删除时不必移动元素       D. 所需空间与线性表长度成正比 (   )61.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。 A.行号                   B.列号           C.元素值                 D.地址 (    )62.假定一个顺序队列的队首和队尾指针分别为front和rear,存放该队列的数组长度为N,则判断队空的条件为________。 A.(front+1)% N == rear           C. front == 0B.(rear+1)% N == front           D. front == rear(   )63.栈的插入和删除操作在___进行. (A).栈顶                 (B).栈底(C).任意位置              (D).指定位置 (    )64. 在一个顺序循环队列中,队首指针指向队首元素的________位置。 A. 后两个                B. 后一个C. 当前                  D.前一个 (    )65.下面算法的时间复杂度为__。 int f(int n){ if (n==0)return 1; else  return  n*f(n-1);} A.O(1)             B.O(n)   C.O(n²)           D.O(n!)(    )66.数据结构是一门研究非数值计算的程序设计问题中计算机的( ① )以及它们之间的( ② )和运算的学科  ①A、操作对象 B、计算方法 C、逻辑存储 D、数据映象②A、结构   B、关系   C、运算   D、算法 (    )67.数据结构被形式地定义为(K,R),其中K是( ① )的有限集合,R是K上( ② )的有限集合①A、算法 B、数据元素 C、数据操作 D、逻辑结韵②A、操作 B、映象   C、存储   D、关系(    )68.在数据结构中,从逻辑上可以把数据结构分为________A、动态结构和静态结构  B、紧凑结构和非紧凑结构C、线性结构和非线性结构 D、内部结构和外部结构(    )69.线性表的顺序存储结构是一种_________的存储结构,线性表的链式存储结构是一种________的存储结构A、随机存取                B、顺序存取  C、索引存取              D、HASH存取(    )70.算法分析的目的是( ① ),算法分析的两个主要方面是( ② )①A、找出数据结构的合理性       C、分析算法的效率以求改进   B、研究算法中的输入和输出的关系D、分析算法的易懂性和文档性②A、空间复杂性和时间复杂性   C、可读性和文档性B、正确性和简明性           D、数据复杂性和程序复杂性(    )71.计算机算法指的是( ① ),它必具备输入、输出和( ② )等五个特性①A、计算方法 B、排序方法 C、解决莱一问题的有限运算序列 D、调度方法②A、可执行性、可移植性和可扩充性      C、确定性、有穷性和稳定性B、可执行性、确定性和有穷性          D、易谩性、稳定性和安全性(    )72.线性表若采用链表存储结构时,要求内存中可用存储单元的地址________ A、必须是连续的   B、部分地址必须是连续的C、一定是不连续的  D、连续不连续都可以(    )73.在以下的叙述中,正确的是__________A、线性表的线性存储结构优于链表存储结构        C、栈的操作方式是先进先出B、二维数组是它的每个数据元素为一个线性表的线性表D、队列的操作方式是先进后出(   )74. 一个数组元素A[i]与________的表示等价。A、 *(A+i)      B、 A+i         C、 *A+i        D、 &A+i (   )75. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。A、 参数类型             B、 参数个数    C、 函数类型       D、函数变量(    )76. 若需要利用形参直接访问实参,则应把形参变量说明为________参数A、 指针              B、 引用        C、 值D、函数(   )77.下面程序段的时间复杂度为____________。        for(int i=0; inext = HL; C、p->next = HL;   p = HL;B、p->next = HL;  HL = p; D、p->next = HL->next;  HL->next = p;(   )84.在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点,则执行_____。A、q->next = p->next ;  p->next = q; C、q->next = p->next;  p->next = q;B、p->next = q->next;  q = p;        D、p->next = q->next ;  q->next = p;(   )85.在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行_____。A、p = q->next ;  p->next = q->next; C、p = q->next ;  q->next = p->next;B、p = q->next ;  q->next = p; D、q->next = q->next->next;  q->next = q;(   )86. 在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的________。A、 行号        B、 列号      C、 元素值      D、 地址(   )87. 设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度为_______。A、 O(1)       B、 O(n)      C、 O(n2)      D、 O(log2n)(   )88.栈的插入与删除操作在_____进行。A、栈顶          B、栈底           C、任意位置      D、指定位置(   )89.当利用大小为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则向这个栈插入一个元素时,首先应执行_____语句修改top指针。A、top++          B、top--         C、top=0          D、top(   )90.若让元素1,2,3依次进栈,则出栈次序不可能出现_____种情况。A、3,2,1          B、2,1,3       C、3,1,2          D、1,3,2(   )91.在一个循环顺序队列中,队首指针指向队首元素的_____位置。A、前一个                B、后一个        C、当前                  D、后面(   )92.当利用大小为N的一维数组顺序存储一个循环队列时,该队列的最大长度为_____。A、N-2                   B、N-1           C、N                     D、N+1(   )93.从一个循环顺序队列删除元素时,首先需要_____。A、前移一位队首指针                 B、后移一位队首指针C、取出队首指针所指位置上的元素     D、取出队尾指针所指位置上的元素(   )94.假定一个循环顺序队列的队首和队尾指针分别为f和r,则判断队空的条件是_____。A、f+1==r                         B、r+1==f         C、f==0                           D、f==r (   )95.假定一个链队的队首和队尾指针分别为front和rear,则判断队空的条件是_____。A、front==rear                B、front!=NULL    C、rear!=NULL                 D、front==NULL四、应用题:1、栈和队列都是特殊线性表,其特殊性是什么?2、设有一顺序队列sq,容量为5,初始状态sq.front=sq.rear=0,划出作完下列操作的队列及其头尾指针变化状态,若不能入队,简述理由后停止。1)d,e,b 入队。2)d,e 出队。3) i,j 入队。4)b 出队。  5)n,o,p 入队。3、设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?4、将两个栈存入数组V[1..m]中应如何安排最好?这时栈空、栈满的条件是什么?5、已知稀疏矩阵如下:请写出该稀疏矩阵三元组表示。6、广义表A=(a,b,(c,d),(e,(f,g))),求其长度,及深度。7、请画出下面广义表相应的加入表头结点的单链表表示,D(A(x,y,L(a,b)),B(z,A(x,y,L(a,b))))。 8、一棵具有n个结点的理想平衡二叉树(即除离根最远的最底层外其他各层都是满的,最底层有若干结点)有多少层?若设根结点在第0层,则树的高度h如何用n来表示(注意n可能为0)? 9、设二叉树后根遍历为BAC,画出所有可能的二叉树。10、假设一棵二叉树的层序序列是ABCDEFGHIJ和中序序列是DBGEHJACIF,请画出该树。11、有一个完全二叉树按层次顺序存放在一维数组中,如下所示: 请指出结点P的父结点,左子女,右子女。12、给出下列二叉树的先序序列。13、已知某非空二叉树采用顺序存储结构,树中结点的数据信息依次存放在一个一维数组中,即ABC□DFE□□G□□H□□,该二叉树的中序遍历序列为:14、设一棵二叉树的前序序列为1,2,3,4,5,6,7,8,9,其中序序列为2,3,1,5,4,7,8,6,9,试画出该二叉树。15、已知一组元素为(46,25,78,62,12,37,70,29),试画出按元素排列次序插入生成的一棵二叉树。16、由于元素插入的次序不同,所构成的二叉排序树也有不同的状态,请画出一棵含有1,2,3,4,5,6六个结点且以1为根,深度为4的二叉排序树。17、什么是线索二叉树?为什么要线索化? 18、有n个顶点的有向连通图最多有多少条边?最少有多少条边?19、下图中给出由7个顶点组成的无向图。从顶点1出发,对它进行深度优先遍历得到的顶点序列是:进行广度优先遍历得到的顶点序列是:20、什么是连通图的生成树? 21、什么是哈夫曼(Huffman)树?22、已知结点a,b,c,d及其权值写出哈夫曼树的构造过程。      a     b     c     d      7     5     2     423、已知图G={V , E}  V={ a, b, c, d, e }  E={(a, b),(b, d),(c, d),(d, e),(e, a),(a, c)}画出图G,画出图G的邻接表。24、考虑下图:1)从顶点A出发,求它的深度优先生成树。2)从顶点E出发,求它的广度优先生成树。3)根据普里姆(Prim)算法,求它的最小生成树。 25、设有关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进行排序。若采用初始步长为4的Shell排序法,则一趟扫描的结果是:若采用以第一个元素为分界元素的快速排序法,则一趟扫描的结果是:26、一个对象序列的排序码为{46,79,56,38,40,84},采用快速排序以位于最左位置的对象为基准而得到的第一次划分结果为:27、用二分法对一个长度为10的有序表进行查找,填写查找每个元素需要的比较次数。      下标: 0    1     2     3     4      5      6       7      8      9  比较次数: 28、若对序列(49,38,27,13,97,76,50,65)采用泡排序法(按照值的大小从小到大)进行排序,请分别在下表中写出每一趟排序的结果。原始序列        49  38   27   13   97   76   50   65第1趟的结果第2趟的结果第3趟的结果第4趟的结果29、给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程:1)归并排序  每归并一次书写一个次序。2)快速排序  每划分一次书写一个次序。3)堆排序 先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。30、给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18)。写出用下列算法从小到大排序时第一趟结束时的序列:1)希尔排序(第一趟排序的增量为5)2)快速排序(选第一个记录为枢轴(分隔))3)链式基数排序(基数为10)31、若杂凑表的地址范围为[0:9],杂凑函数为H(key)=(key2+2)MOD 9,并且采用链地址方法处理冲突,请画出元素7,4,5,3,6,2,8,9,1依次插入该杂凑表以后,该杂凑表的状态。32、已知二叉树采用二叉链表存储结构,链结点的构造为lchild | data | rchild ,根结点的指针为T。下面是利用中序遍历的方法统计二叉树中度为1的结点的个数的算法,算法中设置了一顺序存储结构的堆栈STACK [1:M],栈顶指针为top,请在算法的空缺处填入适当内容,使之能正常工作。 33、设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为多少?34、设有一个关键码的输入序列 { 55, 31, 11, 37, 46, 73, 63, 02, 07} ,   (1) 从空树开始构造平衡二叉搜索树, 画出每加入一个新结点时二叉树的形态。若发生不平衡, 指明需做的平衡旋转的类型及平衡旋转的结果。   (2) 计算该平衡二叉搜索树在等概率下的查找成功的平均查找长度和查找不成功的平均查找长度。35、关键码的输入序列 { 55, 31, 11, 37, 46, 73, 63, 02, 07 }请计算在二分法查找、二叉排序树两种的情况下等概率下查找成功的平均查找长度。36、 广义表A=(a,b,(c,d),(e,(f,g))),计算下面式子的值Head(Tail(Head(Tail(Tail(A)))))37、 下图是用邻接表存储的图,画出此图,并写出从C点开始按深度优先、广度优先遍历该图的结果。38、 用序列(46,88,45,39,70,58,101,10,66,34)建立一个排序二叉树,画出该树,并求在等概率情况下查找成功的平均查找长度。39、 判断下列序列是否为堆,如果不是请调整为堆,如果是请判断是什么类型的堆(101,88,46,70,34,39,45,58,66,10)40、 假设一棵二叉树的层序序列是ABCDEFGHIJ和中序序列是DBGEHJACIF,请画出该树。41、 找出所有满足下列条件的二叉树a) 它们在先序遍历和中序遍历时,得到的结点访问序列相同;b) 它们在后序遍历和中序遍历时,得到的结点访问序列相同;c) 它们在先序遍历和后序遍历时,得到的结点访问序列相同。42、 已知L是无表头结点的单链表,其中P结点既不是首元结点,也不是尾元结点。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 P=P->next;(9) WHILE P->next!=NULL  P=P->next;(10) P=Q;(11) P=L;(12) L=S;(13) L=P;43、 已知树T的先序遍历序列为ABCDEFGHIJKL,后序遍历序列为CBEFDJIKLHGA,请画出树T。44、 对关键字序列(72,87,61,23,94,16,5,58)进行堆排序、快速排序、直接选择排序,使之关键字递增有序,请写出每个排序的前三趟结果。45、 请画出广义表D的图形表示D=(D,(a,b),((a,b),c),( )) 46、 若一二叉树有2度结点100个,则其叶结点有多少个?该二叉树可以有多少个1度顶点?47、 对于单链表、单循环链表和双向链表,如果仅仅知道一个指向链表中某结点的指针 p ,能否将 p 所指结点的数据元素与其确实存在的直接前驱交换 ? 请对每一种链表作出判断,若可以,写出程序段;否则说明理由。单链表和单循环链表的结点结构为date next 双向链表的结点结构为prior date next (1) 单链表 (2) 单循环链表 (3) 双向链表 47、已知散列函数为H(key)=key%7,散列表长度为7(散列地址空间为0..6),待散列序列为:(25,48,32,50,68)。要求:(1)根据以上条件构造一散列表,并用线性探测法解决有关地址冲突;(2)若要用该散列表查找元素68,给出所需的比较次数。48、已知一组键值序列为(38,64,73,52,40,37,56,43),试采用快速排序法对该组序列作升序排序,并给出每一趟的排序结果。49、已知某二叉树的顺序存储结构如图所示,试画出该二叉树。 50、设有一个关键码的输入序列{  55,  31,  11,  37,  46,  73,  63,  02,  07  }  (1)从空树开始构造平衡二叉搜索树,  画出每加入一个新结点时二叉树 的形态。若发生不平衡,指明需做的平衡旋转的类型及平衡旋转的结果。 (2)计算该平衡二叉搜索树在等概率下的查找成功的平均查找长度和查找不成功的平均查找长度。51、求下列广义表运算的结果:1) HEAD(p,h,w);2) TAIL (b,k,p,h);3) HEAD ((a,b),(c,d));4) TAIL (a,b),(c,d);5) HEAD(TAIL(((a,b),(c,d))))6) TAIL(HEAD((a,b),(c,d)))52、画出下列广义表的图形表示:1) D(A()),B(e),C(a,L(b,c,d))2) J1(J2,(J1,a,J3(J1)),J3(J1))53、完成下列要求:1) 请画出下列广义表的存储结构((((a),b)),(((),(d)),(e,f)))2)请写出下面链表表示的广义表54、一棵二叉树如图:1) 写出对此树进行中序、先序、后续遍历时得到的结点序列。2) 画出树的后序线索二叉树。55、具有3个节点的树和具有3个节点的二叉树它们的所有不同形态有哪些?56、将下列森林转化为二叉树。 57、已知一个图如下所示,写出其临接矩阵,并从顶点a出发按深度优先搜索、按广度优先搜索,则可以得到所有顶点序列为什么?58、试问在直接插入排序、希尔排序、快速排序、归并排序、二分法排序、直接选择排序中,哪些排序是稳定的?哪些是不稳定的,哪个排序平均比较次数最少?哪个排序要求内存容量最多?59、哈希表中使用哈希函数H(key)=3 * key % 11,并采用开放定址法处理冲突,随机探测再散列的下一地址公式为:          d1=H (key )          di=( di-1 +7 * key ) % 11 (I=2,3…..)试在0到10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)画出Hash表示意图,并求在等概率情况下查找成功的平均查找长度。60、什么是内部排序?什么是排序方法的稳定性?说出你所学过的三个稳定算法,一个不稳定算法。61、何为队列上溢?一般用什么方法解决,简述之。62、载入下图所示的有权图G,回答下列问题:1) 给出从结点v1出发按深度优先搜索遍历图所得的结点序列;2) 给出图的拓扑序列;3) 给出从结点v1到结点v8的最短路径和关键路径。63、对于下图,请给出1) 对应的邻接矩阵,并给出A,B,C三个顶点的入度和出度;2) 邻接表表示和逆邻接表表示;3) 求其连同分量;64、对于下图的树,分别用孩子链表和孩子兄弟链表法画出存储结构。 65、对于下图的树,请分别用中序、先序的方法写出其遍历结果。 66、已知一个表{jan,feb,mar,apr,may,june,july,aug,sep}1) 使按表中元素的次序依次插入一棵初始为空的二叉排序树,画出表中元素构成的二叉排序树。2) 求初等概率情况下查找july的查找长度。67、数组a[1..10,-2..6,2..8]以行优先的顺序存储,设第一个元素的首地址为100,每个元素占3个存储长度的存储空间,则元素A[5,1,8]的存储地址为多少? 68、设有一组关键字(17,13,153,29,35,21)需插入到表长为12的表中,请回答下列问题:1) 自己设计一个合理的散列函数2) 用自己设计的函数将上述关键字插入到散列表中,画出其结构;并指出用线性探测法解决冲突构造散列表的装填因子为多少?69、已知一棵三阶B-树如下图所示,假定依次从中删除关键字46,24,52,8,93和80试画出每次删除结点后树的情况:70、已知一棵三阶的B-树如下图所示,假定依次插入关键字 50,83,10请画出插入个结点后树的情况:71、令s=’aaab’,t=’abcaaa’,u=’abcaabbabcabaacbacbaaa’,分别求出他们的next值。72、请画出下列二叉树的中序线索化前趋链树,后序线索化后继链树。73、将下列结点按输入顺序构造一棵二叉平衡树。{As,Bx,Ca,Dww,Ae,Cf ,Edd,Fap,Goi,Fab,Hre}74、试在如图所示线索化的二叉树中,查找指定结点E的后继结点、C的前驱结点,并说明找到结果的原因。75、什么是数据结构? 76、试比较线性表的顺序存储结构和链式存储结构的优缺点。77、堆栈和队列都是特殊线性表,其特殊性是什么?78、将两个栈存入数组V[1..m]中应如何安排最好?这时栈空栈满的条件是什么?79、内存中一片连续空间(不妨假设地址从1到m),提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。80、给出数组 int A[3…8,2…6];当它在内存中按行存放和按列存放时,分别写出数组元素A[i,j]的地址计算公式(设每个元素占两个存储单元)。81、若一二叉树有2度结点100个,则其叶结点有多少个?该二叉树可以有多少个1度顶点?82、如图所示的二叉树完成中序遍历、后续遍历、先序遍历,并画出后续线索化的二叉树。83、将下图转换为二叉树,对转换后的二叉树进行先根、中根、后根遍历。84、有一组数值14、21、32、15、28,画出哈夫曼树的生成过程及最后结果。85、有n个顶点的有向连通图最多有多少条边?最少有多少条边?86、什么是哈夫曼(Huffman)树?87、已知图G={V , E} V={ a, b, c, d, e } E={(a, b),(b, d),(c, d),(d, e),(e, a),(a, c)}画出图G,画出图G的邻接表。88、设一个有向图为G=(V,E),其中V={v1,v2,v3,v4},E={,,,},画出该有向图,并求出每个结点的入度和出度,画出相应的邻接矩阵、邻接表和逆邻接表。89、请给出下图的邻接矩阵和邻接表。 90、请画出下图中的极大连通子图。91、对于如下图请画出其用prim和kruskal两种不同算法生成最小生成树的各条边的并入顺序。画出最小生成树。并写出广度优先和深度优先的结点遍历顺序。92、什么是静态查找,什么时动态查找,什么叫平均查找长度。93、用序列(46,88,45,39,70,58,101,10,66,34)建立一个二叉排序树,画出该树,并求在等概率情况下查找成功的平均查找长度。94、已知一个线性表(38,25,74,63,52,48),假定采用h(k)=k%7计算散列地址进行散列存储,若引用线性探测的开放地址法解决冲突,则在该散列表上进行检索的平均检索长度为多少,若利用连地址法处理冲突,则在该散列表上进行检索的平均查找长度为多少?设地址空间为9。请画出算列表。96、已知长度为12的表:(Jan , Fed , Mar , Apr , May , Jun , Aug , Sep , Oct , Nov , Dec)按表中元素的顺序,依次插入一棵初始为空的二叉排序树,画出插完之后的二叉排序树,并求其在等概率情况下,查找成功的平均查找长度。98、有散列函数为h(k)=k%11,如果用二次探测在散列的方式解决冲突,49应放入哪?0     1      2     3    4     5      6    7    8     9    10    11   12   1399、用增量序列{8、4、2、1}对下列关键字进行希尔排序,用图表示排序过程。{56、37、59、41、98、47、94、50、63、52、42、54、60、72、86、90}100、有一组关键字{14,15,30,28,5,10},分别画出冒泡排序、快速排序过程的图示。101、已知一组键值序列为(38,64,73,52,40,37,56,43),试采用快速排序法对该组序列作升序排序,并给出每一趟的排序结果。102、对关键字序列(72,87,61,23,94,16,5,58)进行堆排序、快速排序、直接选择排序,使之关键字递增有序,请写出每个排序的前三趟结果。五、程序题四、程序题1、已知二叉树用下面的顺序结构存储,写出中序遍历该二叉树的算法。 leftdate right 2、下列算法为删除单链表中值为X的算法,将程序填完整  void del(struct  node *head) { q=head;p=q->next;while((    )&&(     )){ q=p;_________;}if(p= = null) printf(“error”);else{______________;free(p);printf(“success!”);}}3、以下函数中,h是带头结点的双向循环链表的头指针,(1) 写出下列程序的功能。(2) 当链表中结点数分别为1和6(不包括头结点)时,请写出程序中while循环体的执行次数。Int   fox(struct node  *h){ struct  node  p,q;   int  j=1;   p=h->next;   q=h->prior;while(p!=q && p->prior!=q)    { if (p->data= = q->data){p=p->next;   q=q->prior;   j++;}else j=0;  }return(j);}4、写出按后序序列遍历中序线索树的算法.5、写出计算树深度的算法。6、写出计算树叶子结点的算法。7、写出计算字符串长度的算法。8、试写出以带头结点单链表为存储结构实现简单选择排序的算法9、阅读下列算法,并回答下列问题:(1) 该算法完成什么功能?(2) 算法中R[n+1]的作用是什么?Void  sort (elemtype r[],int n){int k,i; for(k=n-1;k>=1;k- -)   if(r[k]>r[k+1]){ r[n+1]=r[k];  for(i=k+1;r[i]s2则输出一个正数;若s1=s2,则输出0;若s1key= =k)_________;if(t->key>k)______________;else____________________;}}23、编写一个算法交换单链表中P所指向的位置和其后续位置上的两个结点,HEAD指向该链表的表头,P指向该链表中的某一结点。24、已知两个链表A和B,其元素值递增排列。写出编程将A和B合并成一个递减有序(相同值只保留一个)的链表C的思想,并要求利用原表结点。(*)25、下列算法完成在一个带头单链表中第i个结点前插入一个结点算法,请将空余处填上。Void  inserti (struct  node  *head) { p =head ->next;k=0; while(p!=null)&&(k<_______){________; k++;}if p!=null{printf(“please input  to  x”); scanf(“%d”,&x); q=(struct  node  *)malloc(sizeof(struct   node)); q->data=x; _________; _________;}else   printf(“not  found  ith   node”);}26、写出下列算法的功能:void weizhi( struct  node  *head){ p= head->next;  head->next =null;  while (p!=null) { q=p->next;p->next=head->next;head->next=p; p=q; }}27、建立一个带头结点、有10个结点的单链表,请将下列算法填完整。Void   great( ){ struct  node  *head,*p,*s;   int  i,x;   head = ( struct  node  *)malloc( sizeof( struct node));   head->next=null;    p=head;   for ( i =1;i<=10 ; i ++)   {  s=(struct  node *)malloc(sizeof(struct node));       printf(“请输入数据值”);       scanf(“%d”,&x);         s ->data= x;        s ->next=p->next;        _______;_______;}}28、试编写一个求指定结点在二叉排序树中的层数。 29、对于一个有序表,请设计一个算法使得其插入一个结点后仍为有序表,并将其逆序输出。30、用直接插入排序的方法,将一个无序的链表排列成一个按降序排列的有序链表。31、试设计一个多项式相加的算法。 32、试设计一个求在表中,相同元素出现最多值的算法。33、有一个带头结点的单链表,写出在值为x结点前插入m个结点的算法。(假设x存在,m个结点由键盘输入)。34、将下列程序填完整,并输出程序的功能:Void  searchbinary( elemtype  a[ ],int  n ,int   k)           {int  low=0,high=n-1,mid, find=0;             while(find= = 0)&&(low<=high){ mid=______________; if(k= = a[mid])                   {find=1; printf(“find k!”);}               else                  {if ( kn – 1)      printf(“error!”);    else      {    for(j=n;j>=i-1;j - -)            string1[j+m]=string1[j];            for(j=0,j strlen(string))      printf(“error!”);    else{ k= i-1;           while(string[k+j] ! =‘o’)           {  ____________;              k++;}            string[k]=‘’; }}37、说出下列程序段完成了什么功能?Void  delete( int a[n],int i){if (i<0)||(i>=n)  printf(“error”);else{for (j=i-1;jnext ;    while (q!=p)  q=q->next;           if q=  =null   printf(“not find”);           else  { s=(struct node  *)malloc( sizeof(struct node) )  ;                      s->data=x;_______________;_______________;}}  39、说出下列算发的功能:  Void weizhi (linkqueue  *q){struct queuenode    *p;  if  q.front =  =  q.rear      printf(“the queue is empty”);  else{  p=q->front->next;            q->front->next=p->next             return(p->data);              free(p);     }}40、编写一个交换单链表中p指针所指结点和其后这两个结点的算法。41、写出在二叉排序树中插入一指定结点一个结点的算法。 42、完成计算二叉树叶子结点的算法。Void  midtravel(struct  treenode  *bt){struct  treenode   *p,*a[n];    int  top= - 1,true =1, j =0; while(true)   {  p=bt;     while(p != null)       {  top + +;          a[top]=p;       p=________}        if (top != -1)   { p=a[top];     top -- ;printf(“%c”,p->data);if (p->left = = null )&&__________       ______________;p=p->right;}Else    true = 0; } Printf(“%d”,j)}43、完成二叉树按层遍历的算法。Void  leveltravel (  struct treenode  *bt) { struct  treenode  *p,*a[n];   int   rear=front = -1;       p=bt;    rear =__________;    a[rear]=p;  while (rear != front)    { front = ___________;       p=a[front];       printf(“%c”,p->data);If ( p->left !=null)    { rear =(rear +1)% n      a[rear]= _________; }If (p->right!= null)   {rear = (rear +1)%n ;    a[rear]=_________;    }        } }44、给定一棵用链表表示的二叉树,其根指针为t,试写出从根开始,按层次遍历二叉树的算法,同层的节点按从左到有的次序访问。45、写出在中序线索二叉树中结点*p的右子树中插入一个结点*s的算法。46、试设计一个算法在中序线索化的树中,求指定结点P的前驱结点,要求用非递归算法。 47、完成下列程序,并说出该算法所完成的功能。void weizhisort(struct node r[ n],int n){  int low,high,mid,j,i; for(i=2;i<=n;i++)     {  r[0]=r[i];        low=__________;        high=_________; while(low<=high){    mid=(low+high)/2;          if(r[0].key=l;j--)           r[j+1]=r[j];       r[low]=r[0];       }}48、完成程序,并说出程序的功能Bitreptr  *bstsearch(t,k)Bitreptr  *k;     Keytype  k;    {if(t= =null)  return null;     else while(t !=null)  {if (t->key= =k)_________;    if(t->key>k)______________;   else____________________;  } }49、完成下列程序,并说出该算法的功能。Void  weizhitravel ( struct   treenode  *bt){ struct  treenode  *p,*a[n]; int true = 1,top =-1;   while (true)    {   while (p!= null)   //只要p不空全部压栈//         {  printf(“%c”,p->data);            ______________;            a[top] =p ;            _________;}if ( top != - 1)     {p=a[top];       p=p->right;       top - -;}    else        true =0; }}完成的功能:___________________50、写出在二叉排序树中查找值为x的算法。51、试写出以带头结点单链表为存储结构实现简单选择排序的算法。52、阅读下列算法,并回答下列问题:该算法完成什么功能?算法中R[n+1]的作用是什么?Void  sort (elemtype r[],int n){int k,i; for(k=n-1;k>=1;k- -)   if(r[k]>r[k+1]){ r[n+1]=r[k]; for(i=k+1;r[i]nextwhile(p->next!=q)&&(p->next != null)p=p->next;if (p->next !=null){ r=p->next;      q->next=r;p->next=r->next;r->next=p;}}算法完成的结果是: _______________________54、设编写一计算字符串长度的算法。55、写一算法将一单链表逆置。要求操作在原链表上进行。56、编写算法在一个非减有序线性表中,插入一个值x的元素,使插入的线性表仍为非减有序表。参考答案:一、判断题:1、Χ  2、 Χ 3、∨ 4、∨5、Χ 6、 ∨ 7、Χ 8、Χ 9、∨ 10、∨ 11、Χ12、Χ13、Χ 14、 ∨ 15、Χ 16、∨ 17、Χ 18、Χ 19、Χ 20、Χ 21、Χ 22、Χ 23、∨ 24、∨ 25、∨ 26、∨             27、Χ 28、∨ 29、∨ 30、∨ 31、Χ 32、Χ 33、∨  34、Χ 35、Χ  36、Χ  37、Χ  38、Χ          39、Χ 40、Χ 41、∨ 42、∨  43、∨ 44、∨  45、∨  46、Χ  47、∨  48、∨ 49、∨50、Χ 51、∨  52、 Χ  53、∨  54、Χ  55、∨  56、∨  57、∨ 58、 ∨ 59、∨  60、Χ  61、 Χ 62、∨  63、∨ 64、 Χ  65、Χ   66、Χ  67、  ∨ 68、 ∨ 69、Χ 70、∨ 71、Χ 72、Χ          73、Χ 74、Χ 75、∨ 76、∨ 77、∨  78、 Χ 79、Χ  80、∨  81、Χ  82、∨83、∨ 84、Χ 85、∨ 86、∨ 87、∨88、∨ 89、Χ 90、Χ91、∨  92、Χ  93、∨ 二、填空题:1、运算2、空间复杂度。3、有穷性,确定性,可行性,输入,输出4、链表5、直接前驱,直接后继6、1个直接,1个直接7、循环8、指针,数据9、前驱,后继10、head->next!=Null11、前驱,后继12、删除p 的后继结点13、后继14、s->next=p->next;p->next=s15、不连续,连续16、栈顶 17、top=-118、头结点19、s[0],s[n-1]20、队列,队尾队头21、Q->font=Q->rear22、 (R-F)%n23、1724、子串,主串25、Index(S,T,pos)26、D27、O(n)28、129、DA1+(i-1)*k30、1100+(6*2+3)*2=113031、100+(19*6+6)*2=340,100+(9*6+……)*2=22032、有,无33、148234、loc(a00)+(j*m+i)*135、三元组36、三元组,行号,列号,值37、三对角矩阵 38、上(下)三角矩阵39、i*(i-1)/2+j-1   (i≥j) ,j*(j-1)/2+i-1 (inext;rear=rear->next;                   free(rear);free(p)C.rear=rear->next->next;         D.p=rear->next->next;free(rear);                         rear->next->next=p->next;                                          free(p);4、线性结构中的一个结点代表一个数据元素,通常要求同一线性结构的所有结点所代表的数据元素具有相同的特性,这意味着(       )A.不仅数据元素包含的数据项的个数要相同,而且对应数据项的类型要一致.B.每个结点所代表的数据元素包含的数据项的个数要相等.C.每个结点所代表的数据元素都一样.D.结点所代表的数据元素有同一特点.5、带头结点的单链表Head为空的判定条件是(       )A.Head=Null             B.Head->next->next=NULLC.Head->next=Head       D.Head->next=NULL6、非空的单循环链表L的尾结点*P,满足(      )A.P->next=NULL       B.P=NULL           C.P=L    D.  P->next=L7、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用(    )存储方式最节省时间。A.顺序表        B.单链表        C.双链表        D.单循环链表8、下面关于线性表的叙述正确的是(     )A.线性表采用顺序存储,不必占用一片连续的存储单元B.线性表采用链接存储,不必占用一片连续的存储单元C.线性表采用顺序存储,便于进行插人和删除操作D.线性表采用链接存储,不便于插人和删除操作 9、对于顺序表的优缺点,以下说法错误的是         (      )  A.无需为表示结点间的逻辑关系而增加额外的存储空间B.插入和删除运算较方便C.可以方便地随机存取表中的任一结点  D.由于顺序表要求占用连续的空间,存储分配只能预先进行(静态分配)10、下列哪一条是顺序存储结构的优点(      )A.插入运算方便      B.可方便地用于各种逻辑结构的存储表示C.删除运算方便      D.存储密度大11、线性表是具有n个(     )的有序序列(n>0)A.数据元素             B.字符          C.表元素          D.数据项12、对于一个线性表既要求能够进行快速的插入和删除,又要求存储结构能反映数据之间的逻辑关系,则应该使用(      )A.顺序存储方式      B.链式存储方式     C.散列存储方式      D.以上均可以13、一个顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(     )A.110               B.108             C.100               D.12014、线性表采用链式存储结构时,其地址(   )。A.必须是连续的          B.部分地址必须是连续的C.一定是不连续的        D.连续与否均可以15、在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行(   )A.s->next=p;p->next=s;     B.s->next=p->next;p->next=s;C.s->next=p->next;p=s;     D.p->next=s;s->next=p;16、在一个单链表中,若删除p所指结点的后续结点,则执行(     )A.p->next=p->next->next;   B.p=p->next;p->next=p->next->next;C.p->next=p->next;          D.p=p->next->next;17、设指针p指向双链表的某一结点,则双链表结构的对称性可用(    )式来刻画.A.p->prior->next->==p->next->nextB.p->prior->prior->==p->next->priorC.p->prior->next->==p->next->priorD.p->next->next==p->prior->prior18、如果数据是在程序运行过程中逐步产生的,并且要求先产生的数据元素后处理,后产生的数据元素先处理,则最适合的数据结构是(     )A.顺序表       B.顺序栈      C.顺序队列          D.堆19、一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(     )。A.不确定          B.n-i+1          C.  i           D.n-i20、两个栈共享一个向量空间的好处是(        )A.减少存取时间,降低上溢发生的几率    B.节省存储空间,降低上溢发生的几率          C.减少存取时间,降低下溢发生的几率          D.节省存储空间,降低下溢发生的几率21、执行(        )操作时,需要使用队列做辅助存储空间。A.查找哈希(Hash)表           B.广度优先搜索图         C.  先序(根)遍历二叉树         D.深度优先搜索图22、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pN,若pN是n,则pi是(      )。    A.i            B.n-i        C.n-i+1       D.不确定23、有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?(   )A.543612     B.453126     C.346521    D.234156 24、输入序列为ABC,可以变为CBA时,经过的栈操作为(    )A.push,pop,push,pop,push,pop       B.push,push,push,pop,pop,popC.push,push,pop,pop,push,pop       D.push,pop,push,push,pop,pop25、若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(    )。A.|top[2]-top[1]|=0            B.top[1]+1=top[2]  C.top[1]+top[2]=m              D.top[1]=top[2]26、设计一个判别表达式中左,右括号是否配对出现的算法,采用(   )数据结构最佳。A.线性表的顺序存储结构   B.队列    C.线性表的链式存储结构   D.栈27、用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(     )。A.仅修改队头指针                B.仅修改队尾指针C.队头、队尾指针都要修改        D.队头,队尾指针都可能要修改28、循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是(    )。A.(rear-front+m)%m          B.rear-front+1 C.  rear-front-1              D.  rear-front29、若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和5,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?(   )A.1和5         B.2和0          C.4和2         D.5和1 30、设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(     )。A.6          B.4          C.3          D.231、利用栈求表达式的值时,设立操作数栈OPND,设OPND只有两个存储单元,在下列表达式中,不发生上溢的是(          )A.A-B*(C-D)     B.(A-B)*C-D     C.(A-B*C)-D     D.(A-B)*(C-D)32、(          )不是栈的基本运算。A.删除栈顶元素         B.删除栈底元素    C.判断栈是否为空        D.将栈置为空栈33、向一个栈顶指针为top的链栈中插入一个s节点,则执行(     )。A.top->next=s;               B.s->next=top->next;top->next=s;   C.s->next=top;top=s;        D.s->next=top;top=top->next;34、单循环链表表示的队列长度为n,若只设头指针,则进队的时间复杂度为(    )。A.O(n)         B.O(1)         C.O(n2)          D.O(nlogn)35、约定采用少用一个元素的空间的方法来区分队满或队空,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空)。设最大容量为n的循环队列,队尾指针是rear,队头是front,则队满的条件是  (    )。 A.(rear+1)%n=front                    B.rear=front                                                         C.rear+1=front                          D.(rear-l)%n=front36、已知循环队列的存储空间为数组a[21],且当前队列的头指针和尾指针的值分为8和3,则该队列的当前长度为(     )A.5           B.6            C.16            D.1737、递归过程或函数调用时,处理参数及返回地址,要用一种称为(    )的数据结构。A.队列         B.多维数组          C.栈           D.线性表38、表达式a*(b+c)-d的后缀表达式是(     )。A.abcd*+-       B.abc+*d-        C.abc*+d-         D.-+*abcd39、表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(    ),其中^为乘幂。A.3,2,4,1,1;#*^(+*-           B.3,2,8;#*^- C.3,2,4,2,2;#*^(-             D.3,2,8;#*^(-40、若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是(      )。A.1234         B.4132          C.4231         D.4213二、   读程序写结果(共4题,每题8分,共32分)1、#includeintmain(){inta,b,c,p,q,r[3];scanf(“%d%d%d”,&a,&b,&c);p=a/b/c;q=b–c+a+p;r[0]=a*p/q*q;r[1]=r[0]*(r[0]–300);if(3*q–p%3<=r[0]&&r[2]==r[2])r[1]=r[r[0]/p%2];elser[1]=q%p;printf(“%dn”,r[0]-r[1]);return0;}输入:13086  输出:                                                 2、#includevoidfoo(inta,intb,intc){    if(a>b)       foo(c,a,b);    else       printf("%d,%d,%dn",a,b,c);}intmain(){    inta,b,c;    scanf("%d%d%d",&a,&b,&c);    foo(a,b,c);    return0;}输入:935                 输出:                                    3、#includevoiddigit(longn,longm)   {if(m>0)       printf("%2ld",n);    if(m>1)       digit(n/10,m/10);    printf("%2ld",n);   }intmain()  {longx,x2;   printf("Inputanumber:n");  scanf("%ld",&x);   x2=1;   while(x2   #includemain(){inti,k,n,x[500],w[500];scanf(“%d”,&n);for(i=1;i<=n;i++){    x[i]=0;w[i]=1;} for(i=2;i<=sqrt(n)+1;i++)   if(x[i]==0){       k=i*i;       while(k<=n){           x[k]=i;k+=i;       }  }for(i=n;i>=1;i--)   if(x[i]!=0){       w[x[i]]+=w[i];       w[i/x[i]]+=w[i];       w[i]=0;}printf(“]]]n”,w[2],w[3],w[5]);  }输入:168输出:                                                    三、  完善程序(第一题每空3分,第二题每空4分,共28分)1.比赛成绩(marathon)有N(1<=N<=5,000)位同学参加见长跑比赛,每位同学的成绩以小时、分钟、秒的形式给出。请你对所有选手的成绩进行降序排序。输入文件marathon.in第一行是一个整数N(表示有多少学生),接下来有N行数据,每行是一个学生的成绩,由三个用空格隔开的整数表示,第一个整数表示小时,第二个整数表示分钟,第三个整数表示秒。输出文件marathon.out将N个同学的成绩以降序排列输出。【样例输入】3112020111512142014【样例输出】111512112020142014 #includeusingnamespacestd; intn;structTime{          inth,m,s;          }t[5000]; boolcomp(Timet1,Timet2){returnt1.h>n;     for(inti=0;i>t[i].h>>t[i].m>>t[i].s;     for(inti=0;iinttotal,n;//total代表方案总数voiddfs(intd,ints,intl){     if(d<=9){         dfs(d+1,s+d,d);         dfs(①                  );         s-=l;         if(l>0)l=l*10+d;         else②                  ;         s+=l;         dfs(d+1,s,l);     }     elseif(s==n)③               ; }intmain(){     intt;     freopen("equation.in","r",stdin);     freopen("equation.out","w",stdout);     scanf("%d",&t);     while(t--){         scanf("%d",&n);         dfs(2,④             ,1);         printf("%dn",total);     }     return0;}'