#include #include typedef struct singlylooplist_s{ int id; struct singlylooplist_s* next; void* contentaddress; }singlylooplist; singlylooplist* initlooplist(int id,void* contentaddress){ singlylooplist* cursor=(singlylooplist*)malloc(sizeof(singlylooplist)); cursor->next=cursor; cursor->id=id; cursor->contentaddress=contentaddress; return cursor; } singlylooplist* addlistnode(singlylooplist* cursor,int id,void* contentaddress){ if(cursor==NULL) return NULL; singlylooplist* previousnode = cursor; singlylooplist* latternode=cursor->next; cursor=(singlylooplist*)malloc(sizeof(singlylooplist)); cursor->id=id; cursor->contentaddress=contentaddress; cursor->next=latternode; previousnode->next=cursor; return cursor; } singlylooplist* searchlistnode(singlylooplist* cursor,int id){ if(cursor==NULL) return NULL; if(cursor->id==id) return cursor; singlylooplist* originnode=cursor; while(cursor->next!=originnode) if(cursor->next->id==id) return cursor->next; else cursor=cursor->next; return NULL; } void deletelistnode(singlylooplist** cursor,int id){ singlylooplist* deletenode=searchlistnode(*cursor,id); singlylooplist *latternode,*previousnode; if(deletenode==NULL) return; previousnode=deletenode; latternode=deletenode->next; while(previousnode->next!=deletenode) previousnode=previousnode->next; if(deletenode->contentaddress!=NULL) free(deletenode->contentaddress); deletenode->contentaddress=NULL; previousnode->next=latternode; //printf("delete node id = %d !\n",deletenode->id); if(deletenode->next==deletenode) *cursor=NULL; else *cursor=previousnode; free(deletenode); } void deleteallnode(singlylooplist** cursor){ if(*cursor==NULL) return; singlylooplist* originnode=*cursor; singlylooplist* deletenode=(*cursor)->next; while(deletenode!=originnode){ *cursor=deletenode->next; if(deletenode->contentaddress!=NULL) free(deletenode->contentaddress); deletenode->contentaddress=NULL; free(deletenode); deletenode=*cursor; } if(originnode->contentaddress!=NULL) free(originnode->contentaddress); originnode->contentaddress=NULL; free(originnode); *cursor=NULL; } int countlooplist(singlylooplist* cursor){ int count=0; if(cursor==NULL) return count; count=1; singlylooplist *originnode=cursor; for(cursor=cursor->next;originnode!=cursor;count++) cursor=cursor->next; return count; } /* typedef struct people_s{ char name[33]; int age; }people; #include main(){ people* p1 = malloc(sizeof(people)); strcpy(((people *)p1)->name,"peng si ming"); ((people *)p1)->age = 27; printf("people name = %s and age = %d\n",((people *)p1)->name,((people *)p1)->age); printf("size of people=%d\n",sizeof(people)); singlylooplist* head=initlooplist(3,NULL); addlistnode(head,1,p1); addlistnode(head,2,NULL); printf("node count = %d\n",countlooplist(head)); searchlistnode(head,2); searchlistnode(head,0); searchlistnode(head,3); p1=(people*)(searchlistnode(head,1)->contentaddress); printf("search ok\n"); deletelistnode(&head,2); deletelistnode(&head,3); printf("people name = %s and age = %d\n",p1->name,p1->age); //deleteallnode(&head); deletelistnode(&head,1); printf("list address = %d people name = %s and age = %d\n",searchlistnode(head,1),p1->name,p1->age); deletelistnode(&head,1); deletelistnode(&head,12); printf("delete node ok...........\n"); printf("delete all node after = %d\n",countlooplist(head)); } */