无向图邻接表
求高手帮我解释一下标红色字样的代码,谢谢!!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 编辑 ]