链表添加遍历统计查找插入删除算法实现

    科技2022-08-18  101

    #include <stdio.h> #include <stdlib.h> struct Test { int data; struct Test *next; }; struct Test* insertFromfor(struct Test *head,int data,struct Test *new) { struct Test *p = head; if(p->data == data) { new->next = head; return new; } while(p->next != NULL) { if(p->next->data == data) { new->next = p->next; p->next = new; return head; } p = p->next; } printf("no this data: %d\n",data); return head; } struct Test* deletNode(struct Test *head,int data) { struct Test *p = head; if(p->data == data) { head = head->next; free(p); return head; } while(p->next != NULL) { if(p->next->data == data) { //struct Test *tmp = p; p->next = p->next->next; //free(p); return head; } p = p->next; } return head; } /* void printLink(struct Test *head) { struct Test *point; point = head; while(1) { if(point != NULL) { printf("%d ",point->data); point = point->next; }else{ putchar('\n'); break; } } } */ int printLink(struct Test *head) { struct Test *point; point = head; while(point != NULL) { printf("%d ",point->data); point = point->next; } putchar('\n'); } int getLinkTotalNum(struct Test *head) { struct Test *p=head; int cnt = 0; while(p != NULL) { cnt++; p = p->next; } return cnt; } int searchLink(struct Test *head,int data) { while(head != NULL) { if(head->data == data) { return 1; } head = head->next; } return 0; } int changeLink(struct Test *head,int data,int newdata) { while(head != NULL) { if(head->data == data) { head->data = newdata; return 1; } head = head->next; } return 0; } int insertFromBehind(struct Test *head,int data,struct Test *new) { struct Test *p = head; while(p != NULL) { if(p->data == data) { new->next = p->next; p->next = new; return 1; } p = p->next; } return 0; } struct Test* insertFromHead(struct Test *head) { struct Test *new; new = (struct Test *)malloc(sizeof(struct Test)); printf("input your new node data:\n"); scanf("%d",&(new->data)); if(head == NULL) { head = new; return head; } else { new->next = head; head = new; } return head; } int main() { struct Test *head = NULL; head = insertFromHead(head); printLink(head); /* int i; int array[] = {1,2,3,4,5,6}; for(i=0;i<sizeof(array)/sizeof(array[0]);i++) { printf("%d ",array[i]); } putchar('\n'); // struct Test t1 = {1,NULL}; struct Test *p = (struct Test*)malloc(sizeof(struct Test)); struct Test t2 = {2,NULL}; struct Test t3 = {3,NULL}; struct Test t4 = {4,NULL}; p->data = 1; // t1.next = &t2; p->next = &t2; t2.next = &t3; t3.next = &t4; // head = &t1; head = p; struct Test new = {100,NULL}; struct Test new2 = {101,NULL}; struct Test new3 = {102,NULL}; // printf("%d %d %d %d\n",t1.data,t1.next->data,t1.next->next->data,t1.next->next->next->data); printLink(head); head = deletNode(head,2); printLink(head); */ /* puts("after insert behind:\n"); insertFromBehind(head,3,&new); printLink(&t1); head = insertFromfor(head,1,&new2); puts("after insert behind:\n"); printLink(head); head = insertFromfor(head,1000,&new3); puts("after insert behind:\n"); printLink(head); */ /* int ret = getLinkTotalNum(&t1); printf("total num = %d\n",ret); int ret = searchLink(head,1); if(ret == 0) { printf("no 1\n"); } else { printf("have 1\n"); } */ return 0; }
    Processed: 0.017, SQL: 9