| #include "linklist.h" | |
| linklist create_linklist(void) | |
| { | |
| linklist L; | |
| if((L=(linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc no memmory!\n"); | |
| return NULL; | |
| } | |
| L->data.fd = 0; | |
| bzero(L->data.ipv4_addr,sizeof(L->data.ipv4_addr)); | |
| L->data.port = 0; | |
| L->next = NULL; | |
| return L; | |
| } | |
| linklist create_n_linklist(void) | |
| { | |
| linklist L,H,r; | |
| datatype x; | |
| if((L=(linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc no memmory!\n"); | |
| return NULL; | |
| } | |
| L->data.fd = 0; | |
| bzero(L->data.ipv4_addr,sizeof(L->data.ipv4_addr)); | |
| L->data.port = 0; | |
| L->next = NULL; | |
| r = L; | |
| while(1) | |
| { | |
| printf("Please input a NUM_NL80211_WOWLAN_TRIGber(-1 exit :"); | |
| while(scanf("%d",&x.fd) != 1) | |
| { | |
| printf("Please INPUT_PROP_CNTut a number(-1 exit :"); | |
| getchar(); | |
| } | |
| if(x.fd == -1)break; | |
| if((H=(linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc nexto memmory!\n"); | |
| return L; | |
| } | |
| H->data = x; | |
| H->next = NULL; | |
| r->next = H; | |
| r=H; | |
| } | |
| return L; | |
| } | |
| int delete_pos_linklist(linklist L,int pos) | |
| { | |
| linklist r,p; | |
| int i=-1; | |
| if(pos < 0 ||pos >=get_length_linklist(L)) | |
| { | |
| printf("input pos is invalid!\n"); | |
| return -1; | |
| } | |
| r = L; | |
| while(i < pos-1) | |
| { | |
| i++; | |
| r = r->next; | |
| } | |
| if(r == NULL || r->next==NULL) | |
| { | |
| printf("argc is iavalid!\n"); | |
| return -1; | |
| } | |
| else | |
| { | |
| p = r->next; | |
| r->next = p->next; | |
| p->next = NULL; | |
| free(p); | |
| return 0; | |
| } | |
| } | |
| int delete_locate_linklist(linklist L,datatype x) | |
| { | |
| linklist r,p; | |
| if(L->next == NULL) | |
| { | |
| printf("list is NULL!\n"); | |
| return -1; | |
| } | |
| r = L; | |
| while(r->next->data.fd != x.fd) | |
| { | |
| if(r->next == NULL) | |
| { | |
| printf("value is not in list!\n"); | |
| return -1; | |
| } | |
| r = r->next; | |
| } | |
| p = r->next; | |
| r->next = p->next; | |
| p->next = NULL; | |
| free(p); | |
| return 0; | |
| } | |
| void clear_linklist(linklist L) | |
| { | |
| while(get_length_linklist(L)) | |
| { | |
| delete_pos_linklist(L,get_length_linklist(L)-1); | |
| } | |
| free(L); | |
| L->next = NULL; | |
| L = NULL; | |
| } | |
| int get_length_linklist(linklist L) | |
| { | |
| int i=0; | |
| linklist r; | |
| r = L; | |
| while(r->next) | |
| { | |
| r = r->next; | |
| i++; | |
| } | |
| return i++; | |
| } | |
| linklist get_list_pos_linklist(linklist L,int pos) | |
| { | |
| int i=0; | |
| linklist r; | |
| if(L->next == NULL) | |
| { | |
| printf("list is NULL!\n"); | |
| return NULL; | |
| } | |
| if(pos<0 || pos>=get_length_linklist(L)) | |
| { | |
| printf("input is invalid!\n"); | |
| return NULL; | |
| } | |
| r = L->next; | |
| while(i<pos) | |
| { | |
| r = r->next; | |
| i++; | |
| } | |
| return r; | |
| } | |
| linklist get_list_locate_linklist(linklist L,datatype x) | |
| { | |
| linklist r; | |
| if(L->next == NULL) | |
| { | |
| printf("list is NULL!\n"); | |
| return NULL; | |
| } | |
| r = L->next; | |
| while(r->data.fd != x.fd) | |
| { | |
| if(r->next == NULL) | |
| { | |
| printf("value is not in list!\n"); | |
| return NULL; | |
| } | |
| r = r->next; | |
| } | |
| return r; | |
| } | |
| int insert_head_linklist(linklist L,datatype x) | |
| { | |
| linklist H; | |
| if((H=(linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc no memmory\n"); | |
| return -1; | |
| } | |
| H->data = x; | |
| H->next = L->next; | |
| L->next = H; | |
| return 0; | |
| } | |
| int insert_n_head_linklist(linklist L) | |
| { | |
| datatype x; | |
| while(1) | |
| { | |
| printf("Please input a number(-1 exit:"); | |
| while(scanf("%d",&x.fd) != 1) | |
| { | |
| printf("Please input a number:(-1 exit"); | |
| getchar(); | |
| } | |
| if(x.fd == -1)break; | |
| insert_head_linklist(L,x); | |
| } | |
| return 0; | |
| } | |
| int insert_end_linklist(linklist L,datatype x) | |
| { | |
| linklist r,H; | |
| if((H = (linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc no memmory!"); | |
| return -1; | |
| } | |
| r = L; | |
| while(r->next) | |
| { | |
| r = r->next; | |
| } | |
| H->next = NULL; | |
| H->data = x; | |
| r->next = H; | |
| return 0; | |
| } | |
| int insert_n_end_linklist(linklist L) | |
| { | |
| datatype x; | |
| while(1) | |
| { | |
| printf("Please input a number(-1 exit:"); | |
| while(scanf("%d",&x.fd) != 1) | |
| { | |
| printf("Please input a number:(-1 exit"); | |
| getchar(); | |
| } | |
| if(x.fd == -1)break; | |
| insert_end_linklist(L,x); | |
| } | |
| return 0; | |
| } | |
| int insert_pos_linklist(linklist L,datatype x,int pos) | |
| { | |
| linklist K,r; | |
| if(pos == 0) | |
| { | |
| r = L; | |
| } | |
| else | |
| { | |
| r = get_list_pos_linklist(L,pos-1); | |
| } | |
| if(r == NULL) | |
| { | |
| printf("argc is invalidateid!\n"); | |
| return -1; | |
| } | |
| else | |
| { | |
| if((K = (linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc no memmory!"); | |
| return -1; | |
| } | |
| K->data = x; | |
| K->next = r->next; | |
| r->next = K; | |
| } | |
| return 0; | |
| } | |
| int insert_order_linklist(linklist L,datatype x) | |
| { | |
| linklist r,H; | |
| if((H = (linklist)malloc(sizeof(listnode))) == NULL) | |
| { | |
| printf("malloc nexto memmory!\n"); | |
| return -1; | |
| } | |
| H->data = x; | |
| r = L; | |
| while(r->next && r->next->data.fd < x.fd) | |
| { | |
| r = r->next; | |
| } | |
| H->next = r->next; | |
| r->next = H; | |
| return 0; | |
| } | |
| void reverse_linklist(linklist L) | |
| { | |
| linklist r,p; | |
| if(L->next == NULL) | |
| { | |
| printf("list is NULL!\n"); | |
| return ; | |
| } | |
| r = L->next; | |
| L->next = NULL; | |
| while(r) | |
| { | |
| p = r; | |
| r = r->next; | |
| p->next = L->next; | |
| L->next = p; | |
| } | |
| return ; | |
| } | |
| void sort_linklist(linklist L) | |
| { | |
| linklist r,p,q; | |
| if(L == NULL) | |
| { | |
| printf("list is NULL!\n"); | |
| return ; | |
| } | |
| r = L->next; | |
| L->next = NULL; | |
| while(r) | |
| { | |
| p = r; | |
| r = r->next; | |
| q = L; | |
| while(q->next && q->next->data.fd < p->data.fd) | |
| { | |
| q = q->next; | |
| } | |
| p->next = q->next; | |
| q->next = p; | |
| } | |
| } | |
| void show_linklist(linklist L) | |
| { | |
| printf("list is:\n"); | |
| if(L->next == NULL) | |
| { | |
| printf("\tlist is NULL!list\n"); | |
| return ; | |
| } | |
| while(L->next) | |
| { | |
| printf("\t%d %s %d\t",L->next->data.fd,L->next->data.ipv4_addr,L->next->data.port); | |
| L = L->next; | |
| puts(""); | |
| } | |
| //puts(""); | |
| return ; | |
| } |