首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>正文

算法--数据结构--图的多重邻接链表表示法

http://www.oklinux.cn  2005-10-24  来源: oklinux收集整理  frog      会员收藏  游客收藏  【 】 
/*********************************************************
Title : graph-multiadjacentlist.c
Author :
Time :
Purpose : 图的多重邻接链表表示法
Thread :
Comment :
Usage :
**********************************************************/  
#include "stdio.h"
#include "stdlib.h"




/*=====================变量声明--variable declaration=================*/
struct edge                       /* 图形边线结构声明  */
{
   int vertex1;                   /* 顶点1资料            */
   int vertex2;                   /* 顶点2资料            */
   struct edge *edge1;            /* 顶点1下一边线        */
   struct edge *edge2;            /* 顶点2下一边线        */
};
typedef struct edge *nextedge;    /* 图形的边线新型态     */

struct node                       /* 图形顶点结构宣告     */
{
   int vertex;                    /* 顶点资料             */
   struct edge *edge;             /* 顶点下一边线         */
};
typedef struct node *graph;       /* 图形的结构新型态     */
struct node head[6];              /* 图形顶点结构数组     */



/*=====================函数声明--function declaration=================*/
void creategraph(int *node,int num);



/*====================函数实现--function implementation================*/
/* --------------------------------------------------
Function : void creategraph()
Purpose :
Arguments :
Returns :
------------------------------------------------- */
void creategraph(int *node,int num)
{
   nextedge newnode;              /* 新边线指标           */
   nextedge previous;             /* 前一边线指标         */
   nextedge ptr;                  /* 目前边线指标         */
   int from;                      /* 边线的起点           */
   int to;                        /* 边线的终点           */
   int i;

   for ( i = 0; i < num; i++ ) {   /* 读取边线的回路       */
      from = node[i*2];           /* 边线的起点           */
      to = node[i*2+1];           /* 边线的终点           */
      /* 建立新边线记忆体 */
      newnode = ( nextedge ) malloc(sizeof(struct edge));
      newnode->vertex1 = from;    /* 建立顶点内容         */
      newnode->vertex2 = to;      /* 建立顶点内容         */
      newnode->edge1 = NULL;      /* 设定指标初值         */
      newnode->edge2 = NULL;      /* 设定指标初值         */
      previous = NULL;            /* 前一边线指标         */
      ptr = head[from].edge;      /* 目前边线指标         */
      
      while ( ptr != NULL ) {      /* 遍历到最后边线       */
         previous = ptr;          /* 保留前一边线         */
         if ( ptr->vertex1 == from )  /* 决定走的边线     */
            ptr = ptr->edge1;     /* 下一边线             */
         else
            ptr = ptr->edge2;     /* 下一边线             */
      }
      
      if ( previous == NULL )
         head[from].edge = newnode;   /* 设定顶点边线指标 */
      else
         if ( previous->vertex1 == from ) /* 决定走的边线 */
            previous->edge1 = newnode;    /* 连接下一边线 */
         else
            previous->edge2 = newnode;    /* 连接下一边线 */
      previous = NULL;                    /* 前一边线指标 */
      ptr = head[to].edge;                /* 目前边线指标 */
      
      while ( ptr != NULL ) {      /* 遍历到最后边线       */
         previous = ptr;          /* 保留前一边线         */
         if ( ptr->vertex1 == to )  /* 决定走的边线       */
            ptr = ptr->edge1;     /* 下一边线             */
         else
            ptr = ptr->edge2;     /* 下一边线             */
      }
      
      if ( previous == NULL )
         head[to].edge = newnode; /* 设定顶点边线指标     */
      else
         if ( previous->vertex1 == to ) /* 决定走的边线   */
            previous->edge1 = newnode;  /* 连接下一边线   */
         else
            previous->edge2 = newnode;  /* 连接下一边线   */
   }
}



/*======================主函数--main function--建立图形后,将边线列印出========================*/
int main(int argc, char* argv[])
{
   nextedge ptr;
   int node[6][2] = {  {1, 2},    /* 边线数组             */
                       {1, 3},
                       {2, 3},
                       {2, 4},
                       {3, 5},
                       {4, 5}, };
   int i;

   for ( i = 1; i <= 5; i++ ) {
      head[i].vertex = i;         /* 设定顶点值           */
      head[i].edge = NULL;        /* 清除图形指标         */
   }
   
   creategraph(node,6);           /* 建立图形             */
   printf("图形的多重邻接链表内容:\n");
   
   for ( i = 1; i <= 5; i++ ) {
      printf("顶点%d =>",head[i].vertex); /* 顶点值       */
      ptr = head[i].edge;
                       /* 边线位置     */
      while ( ptr != NULL ) {      /* 遍历至链表尾         */
         /* 印出边线 */
         printf("(%d,%d)",ptr->vertex1,ptr->vertex2);
         /* 决定下一边线指标 */
         if ( head[i].vertex == ptr->vertex1 )
            ptr = ptr->edge1;     /* 下一个边线           */
         else
            ptr = ptr->edge2;     /* 下一个边线           */
      }
      
      printf("\n");               /* 换行                 */
   }
   
   return 1;
}

上一篇:算法--数据结构--图的邻接链表表示法   下一篇:算法-排序-插入排序。


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·算法-排序-插入排序。
·算法--数据结构--图的邻接链表表示法
·算法-排序-冒泡排序法1。
·算法--数据结构--图形的邻接数组表示法
·监控主机是否可以ping通的脚本
·算法-排序-冒泡排序法2。
·vb问题
·算法-排序-快速排序法。
·用gcc编译生成动态链接库*.so文件的方法。
·算法-编译原理之词法分析器-状态机SM.确定性有限自
·用gcc编译生成静态链接库*.a文件的方法。
·算法-多线程编程-pthread
·算法--"黑白逆"数组元素删除法
·算法-加密/解密-DES(数据加密标准)
·算法-数据结构-二叉树
·编程新时代-------java
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·J2EE综合:如何实现javabean的属性拷贝
·关于Java数据对象JDO 2.0查询语言的特
·Java源码分析:深入探讨Iterator模式
·Java基础知识:谈谈简单Hibernate入门
·漫谈Java程序的性能优化
·设计及设计模式--面向对象的思维方式
·数据库相关--Hibernate的事务和并发
·Java 安全--java程序开发的程序的保护
·浅析Java学习从入门到精通
·一个用JAVA写的测算服务器响应速度程序
·软件测试:软件测试的基础知识概要介绍
·Java SE6调用Java编译器的两种新方法
  阅读排行
·Linux 上的 WebSphere MQ 开发快速入门
·C/C++头文件一览
·C++视频教程《下载》
·AspectJ学习笔记之Pointcut
·用gcc编译生成动态链接库*.so文件的方
·使用AJAX技术实现网页无闪自动局部刷新
·c++ builder视频教程
·spring中对hibernate的支持程度分析
·设定执行Java程序的Linux安全环境
·在Fedora8系统下搭建JSP开发环境的方法
·Linux系统中安装JAVA JDK.6的方法
·算法-编译原理之词法分析器-状态机SM
·最新visual c++6.0视频教学
·算法--操作系统--3种页面置换算法
·C语言程序设计讲课视频
网摘收藏: