/*单链表的建立*/ #include<stdio.h> #include<stdlib.h> typedef struct node { int i; struct node *next; }Link; int main() { int i,n; Link *p,*s,*head; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++)//链尾插入 { p=(Link *)malloc(sizeof(Link)); p->i=i; if(i==0) { head=s=p; continue; } s->next=p; s=p; } s->next =NULL; while(head) { printf("%d/n",head->i); head=head->next; } for(i=0;i<n;i++)//链头插入 { p=(Link *)malloc(sizeof(Link)); p->i=i; if(i==0) { p->next=NULL; s=p; continue; } p->next =s; s=p; } while(p) { printf("%d/n",p->i); p=p->next ; } } return 0; } /*邻接表的建立*/ #include<stdio.h> #include<stdlib.h> #define N 100 //定义边结点类型 typedef struct node { //边的邻接点的数据 int adjver; struct node *next;//指向本边下一邻接点的指针 }edgeNode; //定义顶点的类型 typedef struct { // 顶点的数据 int vertex; edgeNode *link;//指向本边邻接表 }vernode; //定义 图 typedef struct { int n,e; vernode adjlist[N]; }link_graph; //邻接表的建立 void create(link_graph *ga) { int i,v,u; edgeNode *p; //读入顶点个数及边数 scanf("%d%d",&ga->n,&ga->e); //建立顶点数组 for(i=0;i<ga->n;i++) { ga->adjlist[i].vertex=i; ga->adjlist[i].link=0; } //建立各顶点的邻接表 for(i=0;i<ga->e;i++) { scanf("%d%d",&v,&u); //生成结点 p=(edgeNode *)malloc(sizeof(edgeNode)); p->adjver=u; //插入顶点的邻接表的首部 p->next=ga->adjlist[v].link; ga->adjlist[v].link=p; //生成结点 p=(edgeNode *)malloc(sizeof(edgeNode)); p->adjver=v; //插入顶点的邻接表的首部 p->next=ga->adjlist[u].link; ga->adjlist[u].link=p; } } //邻接表的输出 void output(link_graph *ga) { int i; edgeNode *p; for(i=0;i<ga->n;i++) { p=ga->adjlist[i].link; while(p) { if(ga->adjlist[i].vertex<p->adjver) printf("(%d,%d)/n",ga->adjlist[i].vertex,p->adjver); p=p->next; } } } int main() { link_graph *ga=(link_graph *)malloc(sizeof(link_graph)); create(ga);//建立邻接表 output(ga);//输出邻接表 return 0; }