| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 686 人关注过本帖
标题:无向图邻接表
只看楼主 加入收藏
taowho
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-10-4
结帖率:0
收藏
已结贴  问题点数:30 回复次数:2 
无向图邻接表
求高手帮我解释一下标红色字样的代码,谢谢!!
void creat()
{
    int k,i,j,a,l;
    ALGraph p;
    ArcNode *s,*L;
    printf("\n请输入图的顶点数:\n");
    scanf("%d",&p.n);
    getchar();
    l=p.n-1;
    for(k=0;k<p.n;k++)
    {
        printf("\n请输入图的顶点:\n");
        scanf("%c",&p.adjlist[k].data);
        getchar();
        p.adjlist[k].firstarc=NULL;
    }
    printf("\n请输入图的边数:\n");
    scanf("%d",&p.e);
    getchar();
    for(a=0;a<p.e;a++)
    {
        printf("\n请输入边的顶点为(请输入数字)如边V1->V2,则输入0 1\n:");
        scanf("%d%d",&i,&j);
        if(i>l||j>l)
        {
            printf("你输入的顶点不存在!");
             exit(0);
        }
            getchar();
            s=(ArcNode *)malloc(sizeof(ArcNode));
            s->adjvex=j;
            s->nextarc=p.adjlist[i].firstarc;
            p.adjlist[i].firstarc=s;
            s=(ArcNode *)malloc(sizeof(ArcNode));
            s->adjvex=i;
            s->nextarc=p.adjlist[j].firstarc;
            p.adjlist[j].firstarc=s;
    }   
    printf("该图的邻接表为:\n");
    for(i=0;i<p.n;i++)
    {
        printf("\t");
        printf("%d %c->",i,p.adjlist[i].data);
        L=p.adjlist[i].firstarc;
        while(L!=NULL)
        {
            printf("%d->",L->adjvex);
            L=L->nextarc;
        }   
        printf("∧\n");   
    }
}

两个递增的链表,合并为一个递减的链表
linklist *Merge(linklist *l1, linklist *l2)           //合并两个链表
{
    linklist *p1,*p2,*p3,*p;
    p1=l1->next;    p2=l2->next;   p3=l1;
    p = (linklist*)malloc(sizeof(linklist));
    p->next = NULL;
    while ((p1!=NULL)&&(p2!=NULL))
    {   //处理两个表非空时的情况。p1,p2指向当前需比较的结点,
        //p3指向结果有序 单链表的表尾
        if ((p1->data)<(p2->data))
        {
            p3 = p1->next;
            p1->next = p->next;
            p->next = p1;
            p1 = p3;
        }
        else
        {         
            p3 = p2->next;
            p2->next = p->next;
            p->next = p2;
            p2 = p3;
            
        }
    }
    while(p1 != NULL)
    {
        p3 = p1->next;
            p1->next = p->next;
            p->next = p1;
            p1 = p3;
    }
    while(p2 != NULL)
    {
        p3 = p2->next;
            p2->next = p->next;
            p->next = p2;
            p2 = p3;
    }

    delete l2;     l2=NULL;
    return p;
}

[ 本帖最后由 taowho 于 2011-12-26 19:07 编辑 ]
2011-12-26 18:44
le12380
Rank: 2
等 级:论坛游民
帖 子:1
专家分:30
注 册:2011-12-27
收藏
得分:30 
我也不会呀~~~求解
2011-12-27 22:42
ouyang001
Rank: 2
等 级:论坛游民
帖 子:3
专家分:20
注 册:2013-3-26
收藏
得分:0 
求解?
2013-05-19 22:27
快速回复:无向图邻接表
数据加载中...
 
   



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

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