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
    请按任意键继续. . .
  • 相关阅读:
    [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
    基于jquery的移动端JS无缝切换
    判断form表单每个input字段是否有内容
    整合常用功能的JS小组件库-v1.0
    获取网页可见区域的宽高(兼容各浏览器)
    判断网页上滚还是下滚
    文字溢出处理
    网页导航条滚动固定
    清除浮动
    CSS文字两端对齐
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3441335.html
Copyright © 2011-2022 走看看