千家信息网

数据库邻接表有什么特点

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容介绍了"数据库邻接表有什么特点"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!2. 邻接表(无
千家信息网最后更新 2025年01月31日数据库邻接表有什么特点

本篇内容介绍了"数据库邻接表有什么特点"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

2. 邻接表(无向图)的特点:

有时候邻接矩阵并不是一个很好的选择:


如上图: 边数相对顶点较少,这种结构无疑是存在对存储空间的极大浪费。

邻接表: 数组和链表结合一起来存储。

1.)顶点用一个一位数组存储。

2.)每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以我们选择单链表来存储。



2. 邻接表(有向图)的特点:

把顶点当弧尾建立的邻接表,这样很容易就可以得到每个顶点的出度。



有时为了便于确定顶点的入度或以顶点为弧头的弧,我们可以建立一个有向图的逆邻接表



3. 邻接表(网)的特点:

对于带权值的网图,可以在边表结点定义中再增加一个数据域来存储权值即可:


typedef char Vtype //顶点类型typedef int Etype //权值类型#definde MAXV 100;typedef struct edgeNode //边表节点{        int adjvex; //邻接点 存储该顶点对应的下标        Etype weight;//边 权值        struct edgeNode *next;}EdgeNode;typedef struct Vnode //顶点表 节点{        Vtype data;        EdgeNode* firstEdge;}VNODE; //typedef struct{        VNODE adjlist[MAXV];        int numV;//当前顶点数        int numE;//当前边数}GraphAdjList;  void CreateALGraph(GraphAdjList* G){        int i,j,k;        EdgeNode* e= NULL;        cout<<输入顶点数";        cin>>G->numV;        cout<<输入边数";        cin>>G->numE;        for(i=0;inumV;i++)//建立顶点信息        {                cin >> G->adjlist[i].data; //输入顶点信息                G->adjlist[i].firstEdge = NULL; //边表节点 为空        }        for(k=0;k>i;                  cout<<"输入边的结尾";                  cin>>j;                                e = new EdgeNode; //(1,3) 这个线的插入是相互的对于两个点1,3来说 分别不同的因此有两个new                e->adjvex = j;                e->next = G->adjlist[i].firstEdge; //类似与栈里的 node->next = list->head;  list->head = node;                G->adjlist[i].firstEdge = e;                                e = new EdgeNode;                e->adjvex = i;                e->next = G->adjlist[j].firstEdge;                G->adjlist[j].firstEdge = e;        }}


对于无向图来说一条边对应都是两个顶点,所以在一次循环中就对i和j分别进行了插入 对于n个顶点e个边来说 O(n+e)

"数据库邻接表有什么特点"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0