数据结构——list

    xiaoxiao2021-12-14  18

    实现单链表的数据插入和删除。

    #include <stdio.h> #include <stdlib.h> typedef struct list{ int data; struct list* next; }List; void print_list(List* head) { while(head)//这里直接用head,因为这里只需要遍历链表 { printf("%d\n", head->data); head=head->next; } } void insert_list(List* head,int d) { List* ins=(List*)malloc(sizeof(List)); ins->data=d; ins->next=head->next; head->next=ins; } void delete_list(List* head,int d) { List* deletelt; while(head->next)//找到要删除的list,然后head->next指向deletelt->next { if(head->next->data == d) { deletelt=head->next; head->next=deletelt->next; free(deletelt); } else head=head->next; } } int main() { List* head=(List*)malloc(sizeof(List)); head->next=NULL; head->data=-1; int i=0,n=10; for(i=0;i<n;i++) insert_list(head,random()%n); print_list(head); printf("\n"); for(i=0;i<10*n;i++) delete_list(head,random()%n); print_list(head); }

    实现双链表的数据插入和删除。思路和单链表差不多,在删除的时候要注意考虑要删除的链表deletedlt的next是空还是非空的情况

    #include <stdio.h> #include <stdlib.h> typedef struct doublelist{ int data; struct doublelist* next; struct doublelist* pre; }DoubleList; void print_doublelist(DoubleList* dhead) { while(dhead) { printf("%d\n", dhead->data); dhead=dhead->next; } } void insert_doublelist(DoubleList* dhead,int d) { DoubleList* ins=(DoubleList*)malloc(sizeof(DoubleList)); ins->data=d; ins->next=dhead->next; ins->pre=dhead; dhead->next=ins; } void delete_doublelist(DoubleList* dhead,int d) { DoubleList* deletedlt; while(dhead->next && dhead->next->next)//要删除的链表deletedlt的next是非空的情况 { if(dhead->next->data == d) { deletedlt=dhead->next; deletedlt->next->pre=deletedlt->pre; dhead->next=deletedlt->next; free(deletedlt); } else dhead=dhead->next; } if(dhead->next && dhead->next->next==NULL)//deletedlt的next是空的情况 { if(dhead->next->data == d) { deletedlt=dhead->next; dhead->next=NULL; free(deletedlt); } } } int main() { DoubleList* dhead=(DoubleList*)malloc(sizeof(DoubleList)); dhead->next=dhead->pre=NULL; dhead->data=-1; int i=0,n=10; for(i=0;i<n;i++) insert_doublelist(dhead,random()%n); print_doublelist(dhead); printf("\n"); for(i=0;i<n;i++) delete_doublelist(dhead,random()%n); print_doublelist(dhead); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-968892.html

    最新回复(0)