#include #include #include typedef char name[30]; typedef struct korifi *kpin; typedef struct akmi *apin; typedef struct korifi{ name name; kpin next; apin head; }korifi; typedef struct akmi{ kpin akro; apin next; }akmi; typedef kpin graph; graph G; void create_graph(graph *G) { *G=NULL; } int next(kpin p,kpin q,graph G) { int finished; apin current; int next; next=0; current=p->head; finished=0; while((!finished) && (current!=NULL)) { if(current->akro==q) { finished=1; next=1; } else current=current->next; } return next; } void insert_korifi(name name,graph *G) { kpin p=(kpin)malloc(sizeof(korifi)); strcpy(p->name,name); p->next=*G; p->head=NULL; *G=p; } void insert_akmi(kpin p,kpin q,graph *G) { apin temp; if(!next(p,q,*G)) { temp=p->head; p->head=(apin)malloc(sizeof(akmi)); p->head->akro=q; p->head->next=temp; if(p!=q) { temp=q->head; q->head=(apin)malloc(sizeof(akmi)); q->head->akro=p; q->head->next=temp; } } } void delete_list(apin *head) { if(*head!=NULL) { delete_list(&((*head)->next)); free(*head); *head=NULL; } } void delete_node(kpin v,apin *head) { apin temp; if(*head!=NULL) { if(((*head)->akro)==v) { temp=*head; *head=(*head)->next; free(temp); } else delete_node(v,&((*head)->next)); } } void delete_korifi(kpin p,graph *G) { kpin current=*G; while(current!=NULL) { if(current!=p) { delete_node(p,&(current->head)); } current=current->next; } delete_list(&(p->head)); } void delete_akmi(kpin p,kpin q,graph *G) { if(next(p,q,*G)) { delete_node(q,&(p->head)); delete_node(p,&(q->head)); } } void print(kpin G) { apin temp; int i=1; int j; while(G!=NULL) { printf("Content of:%d-th node is:%s\n",i,G->name); temp=G->head; if(temp!=NULL) { printf("Neighbours are:\n"); j=1; while(temp!=NULL) { printf("%d-th:%s\n",j,temp->akro->name); temp=temp->next; j++; } printf("\n-----------------------------\n"); } else printf("No Neighbours found\n"); G=G->next; } } int main(void) { char *names[5]={"A","B","C","D","E"}; int i; for(i=0;i<5;i++) { insert_korifi(names[4-i],&G); } kpin temp=G; kpin current=temp->next; insert_akmi(temp,current,&G); current=current->next; insert_akmi(temp,current,&G); current=current->next->next; insert_akmi(temp,current,&G); temp=temp->next; current=temp->next; insert_akmi(temp,current,&G); insert_akmi(current,temp,&G); insert_akmi(current,current->next,&G); temp=temp->next->next; insert_akmi(temp,temp,&G); print(G); delete_akmi(temp,temp,&G); print(G); temp=G; delete_korifi(temp,&G); print(G); return 0; }