请高手指点以下程序的过程,谢谢~~

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:47:53
请逐步解释下: 此为一个拓扑排序并输出邻接表的C语言程序
#include<stdio.h>
#include<string.h>
typedef struct snode{

int data;

struct snode *next;

}Link_Stack;

Link_Stack *top,*s;

void Push(Link_Stack **top,int x){

s=(Link_Stack*)malloc(sizeof(Link_Stack));

s->data=x;

s->next=(*top)->next;
(*top)->next=s;}

void GetTop(Link_Stack **top,int *x){

s=(*top)->next;

*x=s->data;

(*top)->next=s->next;

free(s);}

void xianshi(LGraph g,int c)
{ int i; EdgeNode *p;
printf("lin jie biao ru xia\n");
for(i=1;i<=c;i++)
{p=g[i].link;
printf("\n%d ",i);
while(p!=NULL)
{printf("%d ",p->adjvex);
p=p->next;
}
}

please give me point!!!

void Push(Link_Stack **top,int x){

s=(Link_Stack*)malloc(sizeof(Link_Stack));

s->data=x;

s->next=(*top)->next;
(*top)->next=s;}

添加新的值
创建指针s,指向元素x
top为拓扑邻接表的第一项,把他的下一项指向s
由于拓扑邻接表是循环的,也就是个圆形,s为最后一项,最后一项的下一项得指向头项
这样才会成为一个完整的拓扑邻接表

void GetTop(Link_Stack **top,int *x){

s=(*top)->next;

*x=s->data;

(*top)->next=s->next;

free(s);}

这是把第二项从邻接表里拿出来,并从表里删除掉
把s指向头项的下一项,也就是第二项
把x指向第二项的值
头项的下一项指向第二项的下一项,也就是第三项, 意味着把第二项拿出来
释放s的空间,也就是把第二项删除掉

void xianshi(LGraph g,int c)
{ int i; EdgeNode *p;
printf("lin jie biao ru xia\n");
for(i=1;i<=c;i++)
{p=g[i].link;
printf("\n%d ",i);
while(p!=NULL)
{printf("%d ",p->adjvex);
p=p->next;
}
}
}

把表里的每一项显示出来