《数据结构》典型习题与分析
来源: 发布时间:2006-5-29 16:55:13 点击:
 
[答案]
void delete(sqlist A)
{int i,j;
 i=0;
 while(i<=A.last-1)
  if(A.data[i]!=A.data[i+1])
   i++;
  else
   {for(j=(i+2);j<=A.last;j++)
      A.data[j-1]=A.data[j];
      A.last--;
   }
}
三.栈、队列和数组
1.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4,s6,s5,s1,则栈的容量至少应该是(  )。
[分析]s1,s2进栈后,此时栈中有2个元素,接着s2出栈,栈中尚有一个元素;s3,s4进栈后,此时栈中有3个元素,接着s4,s3出栈,栈中尚有一个元素;s5,s6进栈后,此时栈中有3个元素,接着s6,s5出栈,栈中尚有一个元素;s1出栈后,此时栈为空栈。由此可知,栈的容量至少应该是3。
[答案]B)
2.链栈与顺序栈相比,有一个比较明显得优点是(  )。
A)通常不会出现栈满的情况
B)通常不会出现栈空的情况
C)插入操作更加方便
D)删除操作更加方便
[分析]不管是链栈还是顺序栈,其插入、删除操作都是在栈顶进行的,都比较方便,所以不可能选C),D)。对链栈来讲,当栈中没有元素而又要执行出栈操作时,就会出现栈空现象,故B)也是不正确的。只要内存足够大,链栈上就不会出现栈满现象。而对顺序栈来讲,由于其大小是事先确定好的,因此可能会出现栈满现象。所以A)是正确的。
[答案]A)
3.在具有n个单元的循环队列中,队满共有_______个元素。
[分析]在循环队列中,为了能正确区分队满、队空两个判断条件,当前头指针front所指单元总是空的。因此最多(队满时)能存放n-1个元素。
[答案]n-1
4.栈的逻辑特点是_______,队列的逻辑特点是_______。两者的共同点是只允许在它们的_______处插入和删除数据元素。
[分析]由于只能在栈顶处执行插入、删除操作,使得数据元素的进栈顺序恰好与出栈顺序相反,所以栈的逻辑特点是先进后出(或后进先出)。而对队列来讲,插入、删除操作必须在队列的两端进行,数据元素的进队顺序与出队顺序是一致的。所以队列的逻辑特点是先进先出(或后进后出)。两者的共同点是所有操作只能在端点处进行。
[答案]先进后出(或后进先出),先进先出(或后进后出),端点。
5.二维数组M的的成员是6个字符(每个字符占一个存储单元)组成的串,行下标I的范围从0到8,列下标从1到10,则存放M至少需要_______个字节;M的第8列和第5行共占________个字节;若M按行优先方式存储,元素M[8][5]的起始地址与当M按列优先方式存储时的________元素的起始地址一致。
[分析]按题意二维数组M共有9行(行号0~8),每行有10列(列号1~10),合计有90个元素,每个元素占6个字节,所以存放M至少需要96×6=540个字节。
M的第8列上若有9个元素,第5行上共有10个元素,合计有19个元素,但是其中有两个元素是重复的(M[5][8]),故实际有18个元素,共需占用18×6=108个字节。
元素M[8][5]在数组中位于第9行的第5列,当按行优先方式存储时,在其前面已经存储了8×10+4=84个元素,因此M[8][5]时顺序存储的第85个元素。而当按列优先方式存储时,第85个元素应该是位于第10列的第3行上(前9列共有81个元素,第10列有4个元素),即元素M[3][10]。
[答案]540,108,M[3][10]。
6.借助栈(可用栈的基本运算)来实现单链表单的逆置运算。
[分析]由于进栈顺序与出栈顺序正好相反,因此,借助栈来实现单链表的逆置运算很方便,也很容易理解。方法是先依次让单链表上的元素进栈,然后再依次出栈。
[答案]
void invert (pointer head)
{LstackTp s;
 Inistack(s);
 P=head;
 while(p<>NULL)
   {push(s,p->data);
    p=p->next;
 }
 p=head;
 while(not EmptyStack(s))
   {pop(s,p->data;
    p=p->next;
 }
}
四.树
1.深度为6的二叉树最多有(  )个结点。
A)64    B)63    C)32    D)31
[分析]由二叉树的性质2知,最多结点个数26-1=64-1=63。
[答案]B)
2.任何一颗二叉树的叶结点在其先根、中根、后跟遍历序列中的相对位置(  )。
A)肯定发生变化    B)有时发生变化
C)肯定不发生变化  D)无法确定
[分析]由于在三种遍历中总是先遍历左子数,后遍历右子数,所以二叉树的叶子结点在三种遍历序列中的相对位置不好发生变化。
[答案]C)。
3.设深度为k的二叉树上只有度为0和度为2的结点,则这类二叉树上所含结点总数最少(  )个。
A)k+1     B)2k    C)2k-1    D)2k+1
[分析]因为不存在度为1的结点,所以二叉树上除根结点外,每增加一层,至少要增加2个结点,如图5所示。







 












因此当h=1时,结点总数为1(2*1-1=1),它是根结点;当h=2时,结点总数为3(2*2-1=3);当h=2时,结点总数为5(2*3-1=5);…当b=k时,结点总数为2*k-1。
[答案]C)
4.具有n个结点的完全二叉树,若按层次从上到下,从左到右对其编号(根结点为1号),则编号最大的分支结点序号是________,编号最小的分支结点序号是_________,编号最大的叶子结点序号是_________,编号最小的叶子结点序号是__________。
[分析]由二叉树的性质5知,最后一个结点的编号是n,那么它的双亲结点编号是[n/2],这个双亲结点应该是二叉树中最后一个分支结点。也就是说,在二叉树中,编号1~[n/2]属于分支结点,编号[n/2]+1-n属于叶子结点。
[答案][n/2],1,n,[n/2]+1。
5.已知一棵二叉树的前根序列和中根序列分别为ABDGHECFIJ及GDHBEACIJF,请画出这棵二叉树。
[分析]根据二叉树的前根、中根遍历特点可知,在二叉树的前根遍历序列中,第一个结点肯定是根结点;而其中根遍历序列中,根结点将所有结点分为两部分,左边一部分对应于二叉树的左子树,右边一部分对应 于二叉树的右子树。依此类推,在左子树的前根遍历序列中,第一个结点一定是左子数的根结点;而其中根遍历序列中,根结点又将左子树的所有结点分为两部分,左边一部分对应于左子树的左子树,右边一部分对应于左子树的右子树。同理,在右子树的前根遍历序列中,第一个结点也一定是右子树的根结点;而其中根遍历序列中,根结点又将右子树的所以结点分为两部分,左边一部分对应于右子树的左子树,右边一部分
对应于右子树的右子树。如果按照上述思想递归下去,就可以完整地得到一颗所求的二叉树。
[答案]应用上面的思想,本题的解题过程如下:
1)由前根序列知A是二叉树的根结点;由中根序列知GDHBE是A的左子树中的结点,CIJF是A的右子树中的结点。
2)由前根序列知B是A的左子树的根结点;由中根序列知GDH是B的左子树中的结点,E是B的右子树中的结点。
3)由前根序列知D是B的左子树的根结点;由中根序列知G是B的左子树中的结点,H是B的右子树中的结点。
4)由前根序列知C是A的右子树的根结点;由中根序列知IJF是C的右子树中的结点(C的左子树为空)。
5)由前根序列知F是C的右子树的根结点;由中根序列知IJ是F的左子树中的结点(F的右子树为空)。
6)由前根序列知I是F的左子树的根结点;由中根序列知J是I的右子树中的结点(F的左子树为空)。
图6为上述解题过程的示意图,完整的二叉树如图7所示。
(fig6)(fig7)

























 
五.图
1.含n个顶点的连通图中的任意一条简单路径,其长度不可能超过(  )。
A)1     B)n/2    C)n-1    D)n
[分析]连通图是指任意两个不相同的的顶点之间都存在路径的无向图,而简单路径是指不带有回路的路径,因此连通图上不带有回路的路径,其长度不可能超过n-1。

本新闻共4页,当前在第2页  1  2  3  4