1、( B )。Ap-next=s;s-next=p-next; B s-p-Cp-next=s- D p-10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( B )Ahead=NULL Bheadnext=NULL Cheadnext=head Dhead!=NULL11、 一个栈的输入序列为123n,若输出序列的第一个元素是n,输出第i(1next-next=L _6、一个栈的输入序列是:1,2,3则不可能的栈输出序列是_3 1 2_。7、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_ SXSSXSXX_
2、。8、_队列_又称作先进先出表。9、组成串的数据元素只能是_字符_。10、设有C语言描述的二维数组A1020,其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A66存储地址为_352_。四、算法与应用题1. 设线性表存放在向量Aarrsize的前elenum个分量中且递增有序,试写一算法将x插入到线性表的适当位置,以保持线性表的有序性并分析其时间复杂度。#define arrsize 100bool sortinsert(Elemtype A,int elenum , Elemtype x) int i;if(elenum = = arrsize) printf(
3、“该数组向量已满”);return false;i=elenum-1;while(Aix & i=0) Ai+1=Ai; i- -;Ai+1=x;return true;/写的还是比较粗糙,有待进一步改进/2005年4月19日2.已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。/线性表的单链表存储结构 typedef struct Lnode ElemType data; struct Lnode *next; LNode , *LinkList;LinkList sortinsert(LinkList L,int x) /* 带头结
4、点*/ LinkList p,q, s; s=(LinkList)malloc(sizeof(LNode); if(!s) printf(“动态空间分配不成功”); exit(-1);data=x; q=L; p=L-while ( p!=NULL & p-data s-next=q- q-next=s ;return L;3.在长度大于1的单循环链表L中,既无头结点也无头指针。s为指向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。/条件是长度大于一#include using namespace std;typedef struct Lnodebool delete_prior
5、(LinkList s) LinkList p; LinkList q; q=s; p=s- while(p-next!=s) q=p; p=p- q-next =s; delete p;五、程序填空题1、 下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填入适当的语句。void reverse(linklist &L)p=null;q=L;while(q!=null) (1) L=L-next ;next=p;p=q;(2) q=L _ ; (3) L=p; 2、对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针
6、。请填充算法中标出的空白处,完成其功能。(10分)typedef struct node int data; struct node *next; linknode,*link;void Insertsort(link L) link p,q,r,u; (1) L-next=NULL _; while(2)_ p!=NULL _) r=L; q=L- while(3) q!=NUll _&datadata) r=q; q=q- u=p- (4)_ p-next=q _ ; (5)_ r-next= p_; p=u;第六章练习选择题1. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,
7、2,1,1 则T中的叶子数为( D )A5 B6 C7 D82. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是( A )Am-n Bm-n-1 Cn+1 D条件不足,无法确定3若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B )A9 B11 C15 D不确定4具有10个叶结点的二叉树中有( B )个度为2的结点, A8 B9 C10 Dll5一棵完全二叉树上有1001个结点,其中叶子结点的个数是( E )A 250 B 500 C254 D505 E以上答案都不对 6. 有n个叶子的哈夫曼树的结点总数为(
8、 D )。A不确定 B2n C2n+1 D2n-17. 一棵具有 n个结点的完全二叉树的树高度(深度)是( A )A logn +1 Blogn+1 C logn Dlogn-18深度为h的满m叉树的第k层有( A)个结点。(1=k=1) 4度为二的树就是二叉树。5. 在中序线索二叉树中,每一非空的线索均指向其祖先结点。填空题:1如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为_69_。2具有256个结点的完全二叉树的深度为_9_。3已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有_12_个叶子结点。4在一棵二叉树中,度为零的结点的
9、个数为N0,度为2的结点的个数为N2,则有N0 =_ N2 _+ 1_5已知二叉树有50个叶子结点,则该二叉树的总结点数至少是_99_。6一个有2001个结点的完全二叉树的高度为_11_。7设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有_n1-1_个结点,右子树中有_n2+n3_个结点。作业题1、给定一组权值2,3,5,7,11,13,17,19,23,29,31,37,41,(1)试画出用Huffman算法建造的Huffman树;(2)求平均编码长度()考虑概率解:(1)(2)(7(23)6557 4(
10、171113)3(313741291923)/ 2382、设一棵二叉树的先序、中序遍历序列分别为先序遍历序列: A B D F C E G H 中序遍历序列: B F D A G E H C(1)画出这棵二叉树。(2)画出这棵二叉树的后序线索树。(2)3二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。 int depth(bitree bt) /*bt为根结点的指针*/int hl,hr; if (bt=NULL) return(1)_ 0_); hl=depth(bt-lchild); hr=depth(bt-rchild); if(2) hlhr _) (3)_ hr
11、=hl_; return(hr+1);4线索二叉树有数据域data,左右孩子域lchild和rchild,左右标志ltag及rtag,规定标志为1对应的孩子域是线索,0则为指向孩子的指针。规定在储存线索二叉树时,完成下面中序线索化过程。(存储线索二叉树,不增加头结点,只在原有的由tree指向的二叉树中增加线索,此处也不考虑c语言的具体语法与约定,线索化前所有的标志tag都是0)。/* pre是同tree类型相同的指针,初值是null */thread_inorder (tree) if(tree! thread_inorder(1) tree-lchild _); if(tree-lchild
12、=(2) NULL_) tree-ltag=1; tree-lchild=pre; if(3) pre-rchild_ = null) (4) pre-rtag=1_; (5) pre-rchild=tree _;pre=tree; thread-inorder(6) tree-rchild _);5、已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个?(请给出具体的推理过程) 166、一棵共有n个结点的树,其中所有分支结点的度均为K,求该树中叶子结点的个数。7. 假设一个二叉树的两种遍历如下:前序:ABFGCHDEIJLK 中序:FGBHCDILJKEA画出这棵二叉
13、树以及它的中序线索树;第七章练习1设无向图的顶点个数为n,则该图最多有( B )条边。An-1 Bn(n-1)/2 C n(n+1)/2 D0 En22一个n个顶点的连通无向图,其边的个数至少为( A )。An-1 Bn Cn+1 Dnlogn;3一个有n个结点的图,最少有( B )个连通分量,最多有( D )个连通分量。A0 B1 Cn-1 Dn4在一个无向图中,所有顶点的度数之和等于所有边数( B )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( C )倍。A1/2 B2 C1 D45下列哪一种图的邻接矩阵是对称矩阵?( B )A有向图 B无向图 CAOV网 DAOE网6当
14、一个有N个顶点的图用邻接矩阵A表示时,顶点Vi的度是(B )。A B C D+ 7无向图G=(V,E),其中:V=a,b,c,d,e,f, E=(a,b),(a,e), (a,c), (b,e), (c,f), (f,d), (e,d), 对该图进行深度优先遍历,得到的顶点序列正确的是( D )。Aa,b,e,c,d,f Ba,c,f,e,b,d Ca,e,b,c,f,d Da,e,d,f,c,b8下面哪一方法可以判断出一个有向图是否有环(回路):A深度优先遍历 B. 拓扑排序 C. 求最短路径 D. 广度优先遍历9. 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为( B
15、)。A. O(n) B. O(n+e) C. O(n2) D. O(n3)10. 求解最短路径的Floyd算法的时间复杂度为(D )。AO(n) B. O(n+c) C. O(n*n) D. O(n*n*n)11已知有向图G=(V,E),其中V=V1,V2,V3,V4,V5,V6,V7,E=,V1,V4V2,V5V3,V5V3,V6V4,V6V5,V7V6,V7,G的拓扑序列是( A )。AV1,V3,V4,V6,V2,V5,V7 BV1,V3,V2,V6,V4,V5,V7CV1,V3,V4,V5,V2,V6,V7 DV1,V2,V5,V3,V4,V6,V712若一个有向图的邻接距阵中,主对角线以下的元素均为零,则该图的拓扑有序序列( A )。A存在 B不存在13一个有向无环图的拓扑排序序列( B )是唯一的。A一定 B不一定14. 在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是( D )。AG中有弧 BG中有一条从Vi到Vj的路径 CG中没有弧 DG中有一条从Vj到Vi的路径15. 在用邻接表表示图时,拓扑排序算法时间复杂度为( B )。A. O(n) B. O(ne) C. O(n*n) D. O(n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1