美文网首页
3.常用算法数据结构编程-存储图结构的十字链表

3.常用算法数据结构编程-存储图结构的十字链表

作者: ProfessorFan | 来源:发表于2022-05-09 11:53 被阅读0次

十字链表又来:

1.为了方便得到一个图的 入度 或者 出度
2.为了解决邻接表(可以方便得出 图的出度) 和 逆邻接表(可以方便得到 图的 入度)所存在的瑕疵,

具体代码

代码入口函数:void binaryTreeMain(void)
开发环境: C++ 环境


#define MAXLEN 20


// 这个是用来存储边(弧)
typedef struct arcnode{
    int tailVex,headVex; //弧尾 和 弧头顶点的下表
    struct arcnode *tlink,*hlink; //指向 弧尾 和 同弧头的下一个弧节点的指针
    int weight;  // 弧的权值信息
}ArcNode;  // 定义弧节点的类型

// 这个是用来存储顶点的
typedef struct vexnode{
    
    char vertex; // 顶点标志
    ArcNode *firstIn, *firstOut; //指向第一个弧头节点 和 弧尾节点的指针
}VexNode;  //定义顶点结构类型

// 这个是用来存储图的
typedef struct {
    
    VexNode list[MAXLEN];  // 顶点数组
    int vexNum,arcNum; //顶点数 和 弧数
    
}OLGraph;  // 定义十字链表



void createOrthList(OLGraph &G){
    ArcNode *p;
    
    int i,j;
    char arcTail,arcHead; // 弧头 和 弧尾
    
    printf("请输入有向网的顶点数 和 弧数:\n");
    scanf("%d,%d",&G.vexNum,&G.arcNum);
    getchar();
    
    printf("请依次输入%d个顶点(用enter分割):\n",G.vexNum);
    
    for (int i = 0; i < G.vexNum; i++) {
        scanf("%c",&G.list[i].vertex);
        getchar();
        G.list[i].firstIn = NULL;
        G.list[i].firstOut = NULL;
    }
    

    
    printf("顶点数组创建成功");
    
    for (int i = 0; i < G.arcNum; i++) {
        
        p = new ArcNode; // 这里是开辟一个弧节点
        
        printf("请依次输入第%d条弧的弧尾,弧头标志和弧的权值(用逗号分割):\n",i+1);
        scanf("%c,%c,%d",&arcTail,&arcHead,&p->weight);
        getchar();
        
        for (int j = 0; j < G.vexNum; j++) {  // 这个for 循环的意义,找到弧头 和 弧尾的 位置.
            
            if (G.list[j].vertex == arcTail) {
                p->tailVex = j;
            }
            
            if (G.list[j].vertex == arcHead) {
                p->headVex = j;
            }
        }
        
        p->tlink = G.list[p->tailVex].firstOut;
        G.list[p->tailVex].firstOut = p;
        p->hlink = G.list[p->headVex].firstIn;
        G.list[p->headVex].firstIn = p;
        
    }
    
    printf("十字链表创建成功");
}

相关文章

  • 3.常用算法数据结构编程-存储图结构的十字链表

    十字链表又来: 1.为了方便得到一个图的 入度 或者 出度2.为了解决邻接表(可以方便得出 图的出度) 和 逆邻接...

  • 我的编程专题

    大家好,我是Bug。这是我的编程专题。下面是我的一些编程文章。 1 数据结构 链表 2 算法 图的存储和Floyd...

  • 数据结构与算法相关

    第二章 数据结构与算法相关 1.常用的数据结构有哪些? 数组、栈、队列、链表(单链表、双向链表、循环链表)、树、散...

  • 数据结构

    数据结构 数据结构概念 顺序表 链表 队列 栈 二叉树 常用排序算法

  • 《数据结构与算法之美》01——系统高效地学习数据结构与算法

    20个最常用的、最基础的数据结构与算法。 数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树...

  • 源码天赋激发你的天赋

    数据在计算机中的存储 1.数据结构 2.常用的数据结构,图解的方式感受 数组 链表 画图感受 3.图解到代码 ...

  • 数据结构与算法 (链表实现篇)

    数据结构与算法 (链表实现篇) 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的...

  • 数据结构与算法学习开篇

    数据结构与算法知识图谱 20个最常用的、最基础数据结构与算法 10个数据结构:数组、链表、栈、队列、散列表、二叉树...

  • 数据结构面试题(三)

    1、 常用数据结构简介 a、数组:顺序存储,随机访问 链表:链表存储,顺序访问b、栈,分为栈顶和栈底,遵循先...

  • 数据结构基础篇

    什么是数据结构? 数据结构是指一组数据的存储结构。 什么是算法? 算法是操作一组数据的方法。 10个常用的数据结构...

网友评论

      本文标题:3.常用算法数据结构编程-存储图结构的十字链表

      本文链接:https://www.haomeiwen.com/subject/vplhurtx.html