zoukankan      html  css  js  c++  java
  • 有向图的十字链表表存储表示

      1 //---------有向图的十字链表表存储表示-------
      2 
      3 #include<stdio.h>
      4 #include<stdlib.h>
      5 
      6 #define MAX_VERTEXT_NUM 20
      7 
      8 typedef int InfoType;
      9 typedef char VertextType;
     10 
     11 typedef struct ArcBox
     12 {
     13     int headVex;
     14     int tailVex;
     15     struct ArcBox *headLink;
     16     struct ArcBox *tailLink;
     17     InfoType *info;
     18 }ArcBox;
     19 
     20 typedef struct VexNode
     21 {
     22     VertextType data;
     23     ArcBox *firstIn;
     24     ArcBox *firstOut;
     25 }VexNode;
     26 
     27 typedef struct
     28 {
     29     VexNode xList[MAX_VERTEXT_NUM];
     30     int vexNum;
     31     int arcNum;
     32 }OLGraph;
     33 
     34 void CreateGraphic(OLGraph *G);
     35 void DisplayGraphic(OLGraph *G);
     36 
     37 
     38 int main()
     39 {
     40     OLGraph *Graph = (OLGraph *)malloc(sizeof(OLGraph));
     41     CreateGraphic(Graph);
     42     DisplayGraphic(Graph);
     43     system("pause");
     44 }
     45 
     46 void CreateGraphic(OLGraph *G)
     47 {
     48     int i,j,k;
     49     ArcBox *arcBox;
     50     printf_s("请输入顶点数和弧数:");
     51     scanf_s("%d,%d",&G->vexNum, &G->arcNum);
     52 
     53     //建立顶点表
     54     printf_s("建立顶点表
    ");
     55     for (i = 0; i < G->vexNum; i++)
     56     {
     57         printf_s("请输入第%d个顶点:", i);
     58         fflush(stdin);//刷新缓冲区
     59 
     60         G->xList[i].data = getchar();//输入顶点值
     61         G->xList [i].firstIn = NULL;//初始化指针
     62         G->xList[i].firstOut = NULL;//初始化指针
     63     }
     64 
     65     //建立弧表
     66     printf_s("建立弧表
    ");
     67     for (k = 0; k < G->arcNum; k++)
     68     {
     69         printf_s("请输入(headVex-tailVex)的顶点对序号");
     70         scanf_s("%d,%d", &i, &j);
     71         arcBox = (ArcBox *)malloc(sizeof(ArcBox));
     72         //对弧结点赋值
     73         arcBox->headVex = j;
     74         arcBox->tailVex = i;
     75         arcBox->headLink = G->xList[j].firstIn;
     76         arcBox->tailLink = G->xList[i].firstOut;
     77         arcBox->info = NULL;
     78 
     79         //完成在入弧和出弧链表表头的插入
     80         G->xList[j].firstIn = arcBox;
     81         G->xList[i].firstOut = arcBox;
     82     }
     83 }
     84 
     85 void DisplayGraphic(OLGraph *G)
     86 {
     87     int i;
     88     ArcBox *arcBox;
     89     printf_s("共有%d个顶点,%d条弧
    ",G->vexNum, G->arcNum);
     90 
     91     for (i = 0; i < G->vexNum; i++)
     92     {
     93         printf_s("顶点%c:", G->xList[i].data);
     94 
     95         arcBox = G->xList[i].firstIn;
     96         printf_s("入度:");
     97         while (arcBox)
     98         {
     99             printf_s("%c->%c ", G->xList[arcBox->tailVex].data,G->xList[i].data);
    100             arcBox = arcBox->headLink;
    101         }
    102 
    103         arcBox = G->xList[i].firstOut;
    104         printf_s("出度:");
    105         while (arcBox)
    106         {
    107             printf_s("%c->%c ", G->xList[i].data,G->xList[arcBox->headVex].data);
    108             arcBox = arcBox->tailLink;
    109         }
    110         printf_s("
    ");
    111     }
    112 }

    请输入顶点数和弧数:4,7
    建立顶点表
    请输入第0个顶点:0
    请输入第1个顶点:1
    请输入第2个顶点:2
    请输入第3个顶点:3
    建立弧表
    请输入(headVex-tailVex)的顶点对序号0,1
    请输入(headVex-tailVex)的顶点对序号0,2
    请输入(headVex-tailVex)的顶点对序号2,0
    请输入(headVex-tailVex)的顶点对序号2,3
    请输入(headVex-tailVex)的顶点对序号3,0
    请输入(headVex-tailVex)的顶点对序号3,1
    请输入(headVex-tailVex)的顶点对序号3,2
    共有4个顶点,7条弧
    顶点0:入度:3->0 2->0 出度:0->2 0->1
    顶点1:入度:3->1 0->1 出度:
    顶点2:入度:3->2 0->2 出度:2->3 2->0
    顶点3:入度:2->3 出度:3->2 3->1 3->0
    请按任意键继续. . .
  • 相关阅读:
    Struts2+Spring3+Mybatis3开发环境搭建
    spring+struts2+mybatis
    【LeetCode】Populating Next Right Pointers in Each Node
    【LeetCode】Remove Duplicates from Sorted Array
    【LeetCode】Remove Duplicates from Sorted Array II
    【LeetCode】Binary Tree Inorder Traversal
    【LeetCode】Merge Two Sorted Lists
    【LeetCode】Reverse Integer
    【LeetCode】Same Tree
    【LeetCode】Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3441335.html
Copyright © 2011-2022 走看看