数据结构图练习题及答案

考试专题    来源: 数据结构      2024-07-13         

本站非官方网站,信息完全免费,仅供参考,不收取任何费用,具体请以官网公布为准!
数据结构图练习题及答案
 
一 选择题
1.图中有关路径的定义是(A )。
A.由顶点和相邻顶点对构成的边所形成的序列      B.由不同顶点所形成的序列    C.由不同边所形成的序列         D.上述定义都不是
2.设无向图的顶点个数为n,则该图最多有(B )条边。
A.n-1       B.n(n-1)/2      C. n(n+1)/2       D.0     E.n2   
3.一个n个顶点的连通无向图,其边的个数至少为( A )。
A.n-1       B.n     C.n+1     D.nlog2n 
4.要连通具有n个顶点的有向图,至少需要( B )条边。
A.n-l    B.n     C.n+l    D.2n
5.n个结点的完全有向图含有边的数目(D   )。
A.n*n      B.n(n+1)    C.n/2     D.n*(n-l)
6.一个有n个结点的图,最少有( B )个连通分量,最多有(D )个连通分量。
A.0       B.1    C.n-1     D.n     
7.在一个无向图中,所有顶点的度数之和等于所有边数(B )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的(C )倍。
A.1/2     B.2   C.1       D.4
8.用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为( A )。
A.5      B. 6     C.8      D.9
9.用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是( A )。
A.逆拓扑有序     B.拓扑有序     C.无序的      
10.下面结构中最适于表示稀疏无向图的是(C ),适于表示稀疏有向图的是( BDE )。
A.邻接矩阵     B.逆邻接表    C.邻接多重表     D.十字链表     E.邻接表 
11.下列哪一种图的邻接矩阵是对称矩阵?( B )
A.有向图     B.无向图     C.AOV网       D.AOE网
12. 关键路径是事件结点网络中( A )。
A.从源点到汇点的最长路径   B.从源点到汇点的最短路径  C.最长回路     D.最短回路点
 
二、判断题
1.树中的结点和图中的顶点就是指数据结构中的数据元素。( √ )
2.在n个结点的无向图中,若边数大于n-1,则该图必是连通图。( × )
3. 有e条边的无向图,在邻接表中有e个结点。(× )
4. 有向图中顶点V的度等于其邻接矩阵中第V行中的1的个数。( × )
5.强连通图的各顶点间均可达。( √ )
6.邻接多重表是无向图和有向图的链式存储结构。( × )
7. 十字链表是无向图的一种存储结构。( × )
8. 无向图的邻接矩阵可用一维数组存储。( √ )
9.用邻接矩阵法存储一个图所需的存储单元数目与图的边数有关。( × )
10.有n个顶点的无向图, 采用邻接矩阵表示, 图中的边数等于邻接矩阵中非零元素之和的一半。( √ )
11. 有向图的邻接矩阵是对称的。( × )
12. 用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小与图中结点个数有关,而与图的边数无关。( √ )
13. 求最小生成树的普里姆(Prim)算法中边上的权可正可负。(× )
14.拓扑排序算法把一个无向图中的顶点排成一个有序序列。( × )
 
三、填空 
1.判断一个无向图是一棵树的条件是有n个顶点,n-1条边的无向连通图 。
2.有向图G的强连通分量是指有向图的极大强连通子图 。
3.一个连通图的生成树是一个极小连通子图。
4.具有10个顶点的无向图,边的总数最多为45 。
5.若用n表示图中顶点数目,则有n(n-1)/2 条边的无向图成为完全图。
6.G是一个非连通无向图,共有28条边,则该图至少有9个顶点。
7. 在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要 n 条弧。
8.在有n个顶点的有向图中,每个顶点的度最大可达 2(n-1)。
9.设G为具有N个顶点的无向连通图,则G中至少有N-1 条边。
10.n个顶点的连通无向图,其边的条数至少为n-1。
11.如果含n个顶点的图形形成一个环,则它有n 棵生成树。
 
四、应用题
1.(1).如果G1是一个具有n个顶点的连通无向图,那么G1最多有多少条边?G1最少有多少条边?
答:G1最多n(n-1)/2条边,最少n-1条边  
 
(2).如果G2是一个具有n个顶点的强连通有向图,那么G2最多有多少条边?G2最少有多少条边?
答: G2最多n(n-1)条边,最少n条边  
 
(3).如果G3是一个具有n个顶点的弱连通有向图,那么G3最多有多少条边?G3最少有多少条边?
答:G3最多n(n-1)条边,最少n-1条边 (注:弱连通有向图指把有向图看作无向图时,仍是连通的)   
 
2.n个顶点的无向连通图最少有多少条边?n个顶点的有向连通图最少有多少条边?
答:n-1,n  
 
3.证明:具有n个顶点和多于n-1条边的无向连通图G一定不是树。
答:证明:具有n个顶点n-1条边的无向连通图是自由树,即没有确定根结点的树,每个结点均可当根。若边数多于n-1条,因一条边要连接两个结点,则必因加上这一条边而使两个结点多了一条通路,即形成回路。形成回路的连通图不再是树(在图论中树定义为无回路的连通图)。  
 
4.证明对有向图的顶点适当的编号,可使其邻接矩阵为下三角形且主对角线为全0的充要条件是该图为无环图。
答:证明:该有向图顶点编号的规律是让弧尾顶点的编号大于弧头顶点的编号。由于不允许从某顶点发出并回到自身顶点的弧,所以邻接矩阵主对角元素均为0。先证明该命题的充分条件。由于弧尾顶点的编号均大于弧头顶点的编号,在邻接矩阵中,非零元素(A[i][j]=1)自然是落到下三角矩阵中;命题的必要条件是要使上三角为0,则不允许出现弧头顶点编号大于弧尾顶点编号的弧,否则,就必然存在环路。(对该类有向无环图顶点编号,应按顶点出度顺序编号。)  
五、算法设计题
1.设无向图G有n个顶点,m条边。试编写用邻接表存储该图的算法。(设顶点值用1~n或0~n-1编号)
答: void CreatGraph (AdjList g)
    //建立有n个顶点和m 条边的无向图的邻接表存储结构
    {int n,m;
     scanf("%d%d",&n,&m);
        for (i =1,i<=n;i++)//输入顶点信息,建立顶点向量
        {scanf(&g[i].vertex); g[i].firstarc=null;}
        for (k=1;k<=m;k++)//输入边信息
    {scanf(&v1,&v2);//输入两个顶点
    i=GraphLocateVertex (g,v1); j=GraphLocateVertex (g,v2); //顶点定位
    p=(ArcNode *)malloc(sizeof(ArcNode));//申请边结点
    p->adjvex=j; p->next=g[i].firstarc; g[i].firstarc=p;//将边结点链入
        p=(ArcNode *)malloc(sizeof(ArcNode));
    p->adjvex=i; p->next=g[j].firstarc; g[j].frstarc=p;
    }
    }//算法CreatGraph结束  
 
2.给出以十字链表作存储结构,建立图的算法,输入(i,j,v)其中i,j为顶点号,v为权值。
答: void CreatOrthList(OrthList g)
    //建立有向图的十字链表存储结构
    {int i,j,v; //假定权值为整型
    scanf("%d",&n);
        for(i=1,i<=n;i++) //建立顶点向量
    { scanf(&g[i].vertex); g[i].firstin=null; g[i].firstout=null;}
    scanf("%d%d%d",&i,&j,&v);
    while (i && j && v) //当输入i,j,v之一为0时,结束算法运行
    {p=(OrArcNode *)malloc(sizeof(OrArcNode)); //申请结点
    p->headvex=j; p->tailvex=i; p->weight=v; //弧结点中权值域
    p->headlink=g[j].firstin; g[j].firstin=p;
         p->tailink=g[i].firstout; g[i].firstout=p;
    scanf("%d%d%d",&i,&j,&v);
     } }算法结束
    [算法讨论] 本题已假定输入的i和j是顶点号,否则,顶点的信息要输入,且用顶点定位函数求出顶点在顶点向量中的下标。图建立时,若已知边数(如上面1和2题),可以用for循环;若不知边数,可用while循环(如本题),规定输入特殊数(如本题的零值)时结束运行。本题中数值设为整型,否则应以和数值类型相容的方式输入。  
 
3.设有向G图有n个点(用1,2,…,n表示),e条边,写一算法根据其邻接表生成其反向邻接表,要求算法复杂性为O(n+e)。
答:void InvertAdjList(AdjList gin,gout)
    //将有向图的出度邻接表改为按入度建立的逆邻接表
     {for (i=1;i<=n;i++)//设有向图有n个顶点,建逆邻接表的顶点向量。
         {gin[i].vertex=gout[i].vertex; gin.firstarc=null; }
     for (i=1;i<=n;i++) //邻接表转为逆邻接表。
     {p=gout[i].firstarc;//取指向邻接表的指针。
     while (p!=null)
         { j=p->adjvex;
         s=(ArcNode *)malloc(sizeof(ArcNode));//申请结点空间。
         s->adjvex=i; s->next=gin[j].firstarc; gin[j].firstarc=s;
         p=p->next;//下一个邻接点。
         }//while
     }//for }
海南高考志愿填报  http://www.xuecan.net/yanzhao/
学参学习网    学习经验分享    m.xuecan.net             [责任编辑:学习经验分享]
学参学习网手机版 |   高考频道 |   考试专题 |   学习专题 |   学习文档 |   学习地图 |   专题列表 |   教务管理系统 |   大学排名

  学习文库   免费学习门户 备案号:闽ICP备11025842号-4 学习网手机版

本站所有资料完全免费,不收取任何费用,仅供学习和研究使用,版权和著作权归原作者所有

Copyright 2025 学参学习网, All Rights Reserved.