线性表-第2章-《数据结构习题集》答案解析-严蔚敏吴伟民版

习题集解析部分

第2章  线性表

                                                                                          ——《数据结构习题集》-严蔚敏.吴伟民版


源码使用说明 链接☛☛☛《数据结构》(严蔚敏,伟民版)课本源码+习题集解析使用说明

课本源码合辑 链接☛☛☛《数据结构》课本源码合辑


本文档所在目录:数据结构\▼配套习题解析\▼02 线性表\


习题解析

一、基础知识题

2.1❶    描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。

        首元结点是指链表中存储线性表中第一个数据元素a1的结点。

        头结点是为了操作方便,在链表的首元结点之前附设的一个结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。

        头指针是指向链表中第一个结点或为头结点或为首元结点)的指针。若链表中附设头结点,则不管线性表是否为空表,头指针均不为空,否则表示空表的链表的头指针为空。

        这三个概念对单链表、双向链表和循环链表均适用。是否设置头结点,是不同的存储结构表示同一逻辑结构的间题。


2.2❶    填空题

    (1)在顺序表中插入或删除一个元素,需要平均移动__表中一半__元素,具体移动的元素个数与__该元素的位置__有关。

    (2)顺序表中逻辑上相邻的元素的物理位置__必定__相邻。单链表中逻辑上相邻的元素在物理位置__不一定__相邻。

    (3)在单链表中,除了首元结点外,任一结点的存储位置由__其直接前驱结点的链域的值__指示。

    (4)在单链表中设置头结点的作用是__插入和删除首元素时不必进行特殊处理__。


2.3❷    在什么情况下用顺序表比链表好?

当不需频繁在存储的元素间进行插入和删除操作时,用顺序表较好。


2.4❶    对以下单链表分别执行下列各程序段,并画出结果示意图。


    (1)Q=P->next;

    (2)L=P->next;

    (3)R->data=P->data;

    (4)R->data=P->next->data;

    (5)P->next->next->next->data=P->data;

    (6)T=P;

          while(T!=NULL)

          {

                T->data=T->data*2;

                T=T->next;

          }

    (7)T=P;

          while(T->next!=NULL)

          {

                T->data=T->data*2;

                T=T->next;

          }

 


2.5❶    画出执行下列各行语句后各指针及链表的示意图。

    L = (LinkList)malloc (sizeof(LNode));

    P = L;

    for(i=1;i<=4; i++)

    {

        P->next=(LinkList) malloc (sizeof(LNode));

        P= P->next;

        P->data= i*2-1;

    }

    P->next= NULL;

    for(i=4;i>=1; i--)

        Ins_LinkList(L, i+1, i*2);

    for(i=1; i<=3; i++)

        Del_LinkList(L, i);



2.6❷    已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

    a.在P结点后插入S结点的语句序列是__4)(1__。

    b.在P结点前插入S结点的语句序列是__7)(11)(8)(4)(1__。

    c.在表首插入S结点的语句序列是__5)(12__。

    d.在表尾插入S结点的语句序列是__9)(1)(6__。

    (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=NULL;

    (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;


2.7❷    已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

    a.删除P结点的直接后继结点的语句序列是__11)(3)(14__。

    b.删除P结点的直接前驱结点的语句序列是__10)(12)(8)(3)(14__。

    c.删除P结点的语句序列是__10)(12)(7)(3)(14__。

    d.删除首元结点的语句序列是__12)(11)(3)(14__。

    e.删除尾元结点的语句序列是__9)(11)(3)(14__。

    (1)P=P->next;

    (2)P->next=P;

    (3)P->next=P->next->next;

    (4)P=P->next->next;

    (5)while(P!=NULL)

                P=P->next;

    (6)while(Q->next!=NULL)

          {

                P=Q;

                Q=Q->next;

          }

    (7)while(P->next!=Q)

                P=P->next;

    (8)while(P->next->next!=Q)

                P=P->next;

    (9)while(P->next->next!=NULL)

                P=P->next;

    (10)Q=P;

    (11)Q=P->next;

    (12)P=L;

    (13)L=L->next;

    (14)free(Q);


2.8❷    已知P结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。

    a.在P结点后插入S结点的语句序列是__7)(3)(6)(12__。

    b.在P结点前插入S结点的语句序列是__8)(4)(5)(13__。

    c.删除P结点的直接后继结点的语句序列是__15)(1)(11)(18__。

    d.删除P结点的直接前驱结点的语句序列是__16)(2)(10)(18__。

    e.删除P结点的语句序列是__14)(9)(17__。

    (1)P->next=P->next->next;

    (2)P->priou=P->priou->priou;

    (3)P->next=S;

    (4)P->priou=S;

    (5)S->next=P;

    (6)S->priou=P;

    (7)S->next=P->next;

    (8)S->priou=P-priou;

    (9)P->priou->next=P->next;

    (10)P->priou->next=P;

    (11)P->next->priou=P;

    (12)P->next->priou=S;

    (13)P->priou->next=S;

    (14)P->next->priou=P->priou;

    (15)Q=P->next;

    (16)Q=P->priou;

    (17)free(P);

    (18)free(Q);


2.9❷    简述下列算法的功能。

    (1)Status A(LinkedList L)         //L是无表头结点的单链表

          {

                if(L&&L->next)

                {

                    Q=L;

                    L=L->next;

                    P=L;

                    while(P->next)

                        P=P->next;

                    P->next=Q;

                    Q->next=NULL;

                }

                return  OK;

          }//A

    (2)voidBB(LNode *s, LNode *q)

          {

                p=s;

                while(p->next!=q)

                    p=p->next;

                p->next=s;

          }//BB

          void   AA(LNode*pa, LNode *pb)

          {//pa和pb分别指向单循环链表中的两个结点

               BB(pa,pb);

                BB(pb,pa);

          }//AA

(1)如果L的长度不小于2,则将首元结点删去并插入表尾。

(2)将单循环链表拆成两个单循环链表。


二、算法设计题

本章算法设计题设计的顺序表和线性链表的类型定义如下:

    #define LIST_INIT_SIZE 100

    #define LISTINCREMENT 10

    typedef struct

    {

        ElemType*elem;         //存储空间基址

        int            length;         //当前长度

        int            listsize;            //当前分配的存储容量

    }SqList;                           //顺序表类型

注:此文档中,ElemType被定义为int类型。

    typedef struct LNode

    {

        ElemType data;

        Struct   Lnode   *next;

    }LNode, *LinkList;               //线性链表类型


┏━━━┓

┣ 顺序表 

┗━━━━┛

2.10❷  指出以下算法的错误和低效(即费时)之处,并将它改写为一个既正确又高效的算法。

   Status DeleteK(SqList &a, int i, int k)

    {//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素

        if(i<1 || k<0 || i+k>a.length)

            return INFEASIBLE;             //参数不合法

        else

            for(count=1; count<k; count++)

            {//删除一个元素

                for(j=a.length; j>=i+1; j--)

                    a.elem[j-1]= a.elem[j];

                    a.length--;

            }

        returnOK;

    }//DeleteK 

     错误有两处:

     (1)参数不合法的判别条件不完整。合法的入口参数条件为:(删除时包括第i个元素)

(0<i≤a.length)&& (0≤k≤a.length-i+1)

     (2)第二个for语句中,元素前移的次序错误。

       低效之处是每次删除一个元素的策略。

改正:

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.10题



2.11❷  设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.11题



2.12❸  设A=(a1,...,an)和B=(b1,...,bn)均为顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z),在两表中除去最大共同前缀后的子表分别为A'=(x,z)和B'=(y,x,x,z))。若A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于B'的首元,则A<B;否则A>B。试写一个比较A,B大小的算法(请注意:在算法中,不要破坏原表A和B,并且,也不一定先求得A'和B'才进行比较)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.12题


  

 

┏━━━┓

┣ 单链表 

┗━━━━┛

2.13❷ 试写一算法在带头结点的单链表结构上实现线性表操作LOCATE(L,X)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.13题



2.14❷  试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.14题



2.15❷  已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后),假设指针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法和时间复杂度。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.15题



2.16❸  已知指针la和lb分别指向两个无头结点单链表中的首元结点。下列算法是从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中的第j个元素之前。试问此算法是否正确?如有错,则请改正之。

    Status DeleteAndInsertSub (LinkedList la, LinkedList lb, int i, int j, int len)

    {

        if(i<0|| j<0 || len<0)

            return  INFEASIBLE;

        p=la;    k=1;

        while(k<i)

        {

            p=p->next;

            k++;

        }

        q=p;

        while(k<=len)

        {

            q=q->next;

            k++;

        }

        s=lb;

        k=1;

        while(k<j)

        {

            s=s->next;

            k++;

        }

        s->next=p;

        q->next=s->next;

        return  OK;

    }//DeleteAndInsertSub

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.16题



2.17❷  试写一算法,在无头结点的动态单链表上实现线性表操作INSERT(L, i, b),并和在带头结点的动态单链表上实现相同操作的算法进行比较。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.17题



2.18❷  同2.17题要求。试写一算法,实现线性表操作DELETE(L, i)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.18题



2.19❸  已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.19题



2.20❷  同2.19题条件(递增有序排列),试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.20题



┏━━━━━━┓

┣ 顺序表 

┗━━━┛

2.21❸  试写一算法,实现顺序表的就将线性表(a1,a2, ..., an)逆置为(an,an-1, ..., a1)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.21题



┏━━━━┓

┣ 单链表 

┗━━━┛

2.22❸  试写一算法,对单链表实现就地逆置。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.22题



2.23❸  设线性表A=(a1, a2, ..., am),B=(b1, b2, ..., bn),试写一个按下列规则合并A,B为线性表C的算法,即使得

                    C=(a1,b1, ..., am, bm, bm+1, ..., bn)      当m<=n时;

或者              C=(a1, b1,..., an, bn, an+1, ..., am)        当m>n时。

线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.23题



2.24❹  假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.24题



┏━━━

┣ 顺序表 

┗━━━━┛

2.25❹  假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。试对顺序表编写求C的算法。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.25题



━━━

┣ 单链表 

┗━━━━┛

2.26❹  要求同2.25题。试对单链表编写求C的算法。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.26题




┏━━━┓

┣ 顺序表 

┗━━━━

2.27❹  对2.25题的条件作以下修改,对顺序表重新编写求得表C的算法。

    (1)假设在同一表(A或B)中可能存在值相同的元素,但要求新生成的表C中的元素值各不相同;

    (2)利用A表空间存放表C。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.27题



┏━━━┓

┣ 单链表 

┗━━━━┛

2.28❹  对2.25题的条件作以下两点修改,对单链表重新编写求得表C的算法。

    (1)假设在同一表(A或B)中可能存在值相同的元素,但要求新生成的表C中的元素值各不相同。

    (2)利用原表(A表或B表)中的结点构造表C,并释放A表中的无用结点空间。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.28题



┏━━━━━━┓

┣ 顺序表 

┗━━━━━━

2.29❺  已知A,B和C为三个递增有序的线去表。试对顺序表编写实现上述操作的算法,复杂度(注意:同一表中各元素值可能相同)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.29题



┏━━━━━━┓

┣ 单链表 

┗━━━━━━

2.30❺  要求同2.29题。试对单链表编写算法,请释放A表中的无用结点空间。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.30题



┏━━━━━━━━┓

单循环链表 

┗━━━━━━━━┛

2.31❷  假设某个单向循环链表的长度大于1,且表中既无头结点无头指针。已知s为指向链表中某个结点的指针,试编写算法在链表中删除指针s所指结点的前驱结点。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.31题



2.32❷  已知有一个单向循环链表,其每个结点中含三个域:pre,data和next,其中data为数据域,next为指向后继结点的指针域,pre也为指针域,但它的值为空(NULL),试编写算法将此单向循环链表改为双向循环链表,即使pre称为指向前驱结点的指针域。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.32题



2.33❸  已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法将该线性链表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一类字符。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.33题




    在2.34至2.36题中,“异或指针双向链表”类型XorLinkedList和指针异或函数XorP定义为:

    typedef struct XorNode

    typedef struct

    {                                             //无头结点的异或指针双向链表

        XorPointer Left, Right;    //分别指向链表的左端右端

    }XorLinkedList;

    XorPointer XorP(XorPointer p, XorPointer q);     //指针异或函数XorP返回指针p和q的异或(XOR)值

 


┏━━━━━━━━━━━━━━━━━━━━━━━━━┓

┣ 扩展的双链表(异或指针链表)  

┗━━━━━━━━━━━━━━━━━━━━━━━━━┛

2.34❹  假设在”表示),若a和b为指针,则a⊕b的运算结果仍为原指针类型,且

a⊕(a⊕b)=(a⊕a)⊕b=b

(a⊕b)⊕b=a⊕(b⊕b)=a

则可利用一个data域和LRPtr域,其中LRPtr域存放该结点的左邻与右邻结点指针(不存在时为NULL)的异或。若设指点,L.Right指向链表中的最右结点,双向链表的操作。试写一算法按任一方向依次输出链表中各元素的值。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.34题



2.35❹  采用2.34题所述的存储结构,写出在第i个结点之前插入一个结点的算法。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.35题



2.36❹  采用2.34题所述的存储结构,写出删除第i个结点的算法。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.36题



┏━━━━━━

┣ 双循环链表

┗━━━━━━━┛

2.37❹  设以带头结点双向循环链表表示的线性表L=(a1,a2, ..., an),试写一时间复杂度为O(n)的算法,将L改造为L=(a1,a3, ..., an, ..., a4, a2)。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.37题



2.38❹  设有一个双向循环链表,每个结点中除有pre,data和next三个域外,还增设了一个访问频度域freq。在链表被起用之前,频度域freq的值均初始化为零,而上述要求的LOCATE操作的算法。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.38题



 

    在2.39至2.40题中,稀疏多项式采用的顺序存储结构SqPoly定义为

    typedef struct

    {

        int coef;

        int exp;

    }PolyTerm;

    typedef struct

    {                                      //多项式的顺序存储结构

        PolyTerm *data;

        int last;

    }SqPoly;

 

┏━━━━━━

┣ 多项式 

┗━━━━━━┛

2.39❸  已知如下稀疏多项式:

    其中n=em>em-1>…>e1≥0,ci≠0(i=1,2,...,m),m≥1。试采用存储量同多项式项数m成正比的顺序存储结构,编写求Pn(x0)的算法(x0为给定值),并分析你的算法的时间复杂度。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.39题



2.40❸  采用2.39题给定的条件和存储结构,编写求


    的算法,将结果多项式存放在新辟的空间中,并分析你的算法的时间复杂度。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.40题




    在2.41至2.42题中,稀疏多项式采用的循环链表存储结构LinkedPoly定义为

    typedef  struct  PolyNode   

    {

        PolyTerm  data;

        struct  PolyNode  *next;

    }PolyNode,  *PolyLink;

    typedef  PolyLink  LinkedPoly;


2.41❷   试以循环链表作稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数(多项式),同时释放所有无用(被删)结点。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.41题



2.42❷  试编写算法,将一个用循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项或偶次项,并要求利用原链表中的结点空间构成这两个链表。

完整源码见 ☛ 《数据结构习题集》-第2章-线性表-第2.42题




        更多章节持续更新中...微笑



  • 178
    点赞
  • 1182
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
第1 绪论 1.1 数据结构的基本概念和术语 1.1.1 引言 1.1.2 数据结构有关概念及术语 1.1.3 数据结构和抽象数据类型(ADT) 1.2 算法描述与分析 1.2.1 什么是算法 1.2.2 算法描述工具——C语言 1.2.3 算法分析技术初步 习题一 第2 线性表 2.1 线性表的定义及其运算 2.1.1 线性表的定义 2.1.2 各种运算简介 2.2 线性表的顺序存储结构(向量) 2.2.1 顺序存储结构(向量) 2.2.2 向量中基本运算的实现 2.3 线性表链表存储结构 2.3.1 单链表与指针 2.3.2 单链表的基本运算 2.4 循环链表和双向链表 2.4.1 循环链表 2.4.2 双向链表 2.4.3 顺序存储结构与链表存储结构的综合分析与比较 2.5 多项式相加问题 2.5.1 多项式相加的链表存储结构 2.5.2 多项式相加的算法实现 2.6 线性表的算法实现举例 2.6.1 实现线性表顺序存储结构及运算的C语言源程序 2.6.2 单链表处理的C语言源程序 习题二 第3 栈和队列 3.1 栈 3.1.1 栈的定义及其运算 3.1.2 栈的顺序存储结构(向量) 3.1.3 栈的链表存储结构 3.1.4 栈的应用 3.2 队列 3.2.1 队列的定义及运算 3.2.2 队列的顺序存储结构(向量) 3.2.3 队列的链表存储结构 3.3 栈和队列的算法实现举例 习题三 第4 串 4.1 串的基本概念 4.2 串的存储结构 4.2.1 串的顺序存储 4.2.2 串的链表存储 4.2.3 串变量的存储映象 4.3 串的运算 4.3.1 串的运算简介 4.3.2 串的匹配运算 4.4 文本编辑 习题四 第5 数组和广义表 5.1 数组的基本概念 5.1.1 数组的概念 5.1.2 数组的顺序表示 5.1.3 特殊矩阵的压缩存储 5.2 稀疏矩阵的三元组存储 5.2.1 三元组表 5.2.2 稀疏矩阵的运算 5.3 稀疏矩阵的十字链表存储 5.3.1 十字链表的组成 5.3.2 十字链表的有关算法 5.4 广义表 5.4.1 广义表的概念和特性 5.4.2 广义表的存储结构 5.4.3 求广义表的深度 5.4.4 广义表的输出 5.4.5 建立广义表的存储结构 5.5 迷宫问题 习题五 第6 树 6.1 树的基本概念和术语 6.1.1 树的定义 6.1.2 树的常用术语 6.1.3 树的表示方法 6.2 二叉树 6.2.1 二叉树的定义 6.2.2 二叉树的重要性质 6.2.3 二叉树的存储结构 6.2.4 二叉树二叉链表的一个生成算法 6.3 遍历二叉树 6.3.1 先根遍历 6.3.2 中根遍历 6.3.3 后根遍历 6.3.4 二叉树遍历算法的应用 6.4 线索二叉树 6.4.1 线索二叉树的基本概念 6.4.2 线索二叉树的逻辑表示图 6.4.3 中根次序线索化算法 6.4.4 在中根线索树上检索某结点的前趋或后继 6.4.5 在中根线索树上遍历二叉树 6.5 二叉树、 树和森林 6.5.1 树的存储结构 6.5.2 树与二叉树之间的转换 6.5.3 森林与二叉树的转换 6.5.4 一般树或森林的遍历 6.6 树的应用 6.6.1 二叉排序树 6.6.2 哈夫曼树及其应用 6.7 二叉树的建立和遍历C语言源程序示例 习题六 第7 图 7.1 图的基本概念和术语 7.1.1 图的基本概念 7.1.2 路径和回路 7.1.3 连通图 7.1.4 顶点的度 7.2 图的存储结构 7.2.1 邻接矩阵 7.2.2 邻接链表 7.3 图的遍历和求图的连通分量 7.3.1 图的建立 7.3.2 图的遍历 7.3.3 求图的连通分量 7.4 图的生成树 7.4.1 生成树的概念 7.4.2 最小生成树 7.4.3 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法 7.5 最短路径 7.5.1 单源顶点最短路径问题求解 7.5.2 求有向网中每对顶点间的路径 7.6 有向无环图及应用 7.6.1 拓扑排序 7.6.2 关键路径 7.7 图的算法C语言程序实现举例 7.7.1 无向图的邻接表的建立和遍历 7.7.2 有向无环图的拓扑排序和求关键路径 习题七 第8 查找 8.1 基本概念

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值