| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1107 人关注过本帖
标题:图的邻接链表创建与删除
只看楼主 加入收藏
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
结帖率:70.59%
收藏
 问题点数:0 回复次数:0 
图的邻接链表创建与删除
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
struct node    //弧的头结点
{ int position;      //位置
struct node*next;   
};
struct Vnode      //弧的尾节点
{
    int data;
    struct node*first;
};
struct graph   //图
{ int vex;//顶点数
int arc;//边数
struct Vnode S[MAX];
};
void creat(struct graph&M)  //初始化一个图
{
   
    int i;
    printf("请输入点个数\n");
    scanf("%d",&M.vex);
    printf("请输入边数\n");
    scanf("%d",&M.arc);
    getchar();
    for(i=0;i<M.vex;i++)
    {
        printf("请输入第%d个点\n",i+1);
        scanf("%c",&M.S[i].data);
        getchar();
        printf("节点%c",M.S[i].data);
        M.S[i].first=NULL;    //初始化时都是孤立的节点,没有弧
        
    }
}
void insert(struct graph &t)    //插入弧
{
    struct node*q;
        char ch;
    int i,j,p;
    for(i=0;i<t.vex;i++)
    {
        printf("请输入与%c组成边的头节点\n",t.S[i].data);
    while(((ch=getchar())!='\n'))
        
    { for(j=0;j<t.vex;++j)

    {
       printf("ch的值%c\n",ch);
       printf("t的值%c\n",t.S[j].data);
        if(ch==t.S[j].data)      就是这句话,很简单的一个判等,明明相等,他居然不执行!!!直接执行后面的了,为什么啊
        {   p=j;
        break;}
    }
    q=(struct node*)malloc(sizeof(struct node));
    q->position=p;
    q->next=t.S[j].first;

    t.S[j].first=q;
    printf("%d",q->position);
    }
    }
}
void delet(struct graph &t)            //删除弧
{
    struct node*p,*q;
    int i,s,w;
    char tail,head;
    printf("请输入要删除的边,如a->b\n");
    scanf("%c->%c",&tail,&head);
    for(i=0;i<t.vex;i++)
    {
        if(tail==t.S[i].data)
            w=i;
        if(head==t.S[i].data)
            s=i;
        break;
    }
    p=q=t.S[w].first;
    while(p!=NULL)
    {
        if(p->position!=s)
        {
            p=q;
            p=p->next;
        }
        else
        {
            q->next=p->next;
            free(p);
        }
    }
}
void print(struct graph t)   //输出弧
{
    int i;
    struct node*p;
    for(i=0;i<t.vex;i++)
    {    p=t.S[i].first;
    while(p!=NULL)
    {    printf("%c->%c",t.S[i].data,t.S[p->position].data);
    p=p->next;
    }
    printf("\n");
    }
}
void main()
{
    struct graph T;
    int i,j;
    creat(T);
    insert(T);
    print(T);
    printf("请输入删出边的条数\n");
    scanf("%d",&i);
    for(j=0;j<i;j++)
        delet(T);
    print(T);
}
搜索更多相关主题的帖子: 链表 删除 
2010-12-02 22:42
快速回复:图的邻接链表创建与删除
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014701 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved