链表的学习--创建、添加和删除元素

//list.cpp
#include "list.h" #include <stdlib.h> #include <stdio.h> void initList(List *list) { list->first = NULL; } void destroyList(List *list) { Element *e = list->first; Element *next = list->first; list->first = NULL; while (e) { next = e->next; // e->next wird zwischengespeichert e->next = NULL; // und bleibt erreichbar, nachdem e free(e); // freigegeben wurde. e = next; } } void prependToList(List *list, int i) { Element *e = malloc(sizeof(Element)); e->value = i; e->next = list->first; list->first = e; } void printList(List *list) { Element *e; for (e = list->first; e != NULL; e = e->next) { printf("%i ", e->value); } printf(" "); } size_t sizeOfList(List *list) { Element *e; size_t count = 0; // Iterationsbedingung ist wahr, wenn e != NULL for (e = list->first; e; e = e->next) { count++; } return count; } void appendToList(List *list,int i) { Element *e; e = list->first; if(e==NULL){ e=malloc(sizeof(Element)); e->value=i; e->next = NULL; list->first=e; return; } while(e->next != NULL) { e = e->next; } e->next=malloc(sizeof(Element)); e->next->value = i; e->next->next=NULL; } int removeFirst(List *list) { Element *e; int temp; e = list->first; if(e == NULL){ printf("List is NULL! "); return 0; } temp=e->value; list->first = list->first->next; free(e); return temp; } int removeLast(List *list) { Element *e; int temp; e = list->first; if(e == NULL){ printf("List is NULL! "); return 0; } if(e->next== NULL) { return removeFirst(list); } while(e->next->next != NULL) { e = e->next; } temp=e->next->value; free(e->next); e->next = NULL; return temp; } void insertAfterPosition(List *list, size_t pos, int i) { Element *e,*g; e = list->first; if(e == NULL){ printf("List is NULL! "); return; } if(pos>sizeOfList(list))//new add { printf("pos is larger than size of list! "); return; } size_t j; for (j=0; j<pos-1; j++) { e = e->next; } g=malloc(sizeof(Element)); g->value=i; g->next=e->next; e->next=g; } int removeAfterPosition(List *list,size_t pos){ Element *e,*g; int temp; e = list->first; if(e == NULL){ printf("List is NULL! "); return 0; } if(pos>sizeOfList(list))//new add { printf("pos is larger than size of list! "); return 0; } size_t j; for (j=0; j<pos-1; j++) { e = e->next; } g=e->next; temp=g->value; e->next=e->next->next; free(g); return temp; } void insertSorted(List *list, int i) { Element *e,*g; e = list->first; if(e == NULL){ printf("List is NULL! "); return; } if(list->first->next== NULL) { prependToList(list, i); sortList(list); return; } for(e = list->first; e->next != NULL; e = e->next){ if((e->value)>(e->next->value)){ sortList(list); break; } } g=malloc(sizeof(Element)); g->value=i; if(i<=list->first->value)//new add { prependToList(list, i); return; } for(e = list->first; e->next != NULL; e = e->next){ if((e->value<=i)&&(e->next->value>=i)){ g->next=e->next; e->next=g; break; } } if(e->next == NULL)//new add { e->next=g; g->next=NULL; } } void sortList( List *list) { Element *e; int temp; size_t j; size_t size=sizeOfList(list); for (j = size - 1; j > 0; j--) { size_t p = 0; for(e = list->first; e->next != NULL; e = e->next){ p++; if (p > j) break; if((e->value)>(e->next->value)){ temp=e->value; (e->value)=(e->next->value); (e->next->value)=temp; } } } }
//list.h
#include <stddef.h> // enthält Definition von size_t struct Element { int value; struct Element *next; }; struct List { struct Element *first; }; typedef struct List List; typedef struct Element Element; void initList(List* list); void destroyList(List *list); int removeFirst(List *list); void appendToList(List *list,int i); void printList(List *list); int removeLast(List *list); size_t sizeOfList(List *list); void insertAfterPosition(List *list, size_t pos, int i); void prependToList(List *list, int value); void insertSorted(List *list, int i); void sortList( List *list); int removeAfterPosition(List *list,size_t pos);
//prog.cpp
#include "list.h" #include <stdio.h> int main() { struct List list; int appnum,insertpos,removepos,insertnum,insertsortnum; initList(&list); int i = 0; for (i=5; i < 15; ++i) { prependToList(&list, i); } printList(&list); printf("Please input append number:"); scanf("%d",&appnum); printf("Size of list: %zu ", sizeOfList(&list)); appendToList(&list, appnum); printf("appendToList: "); printList(&list); printf("Size of list: %zu ", sizeOfList(&list)); removeFirst(&list); printf("removeFirst: "); printList(&list); printf("Size of list: %zu ", sizeOfList(&list)); removeLast(&list); printf("removeLast: "); printList(&list); printf("Size of list: %zu ", sizeOfList(&list)); printf("Please input insert position and number:"); scanf("%d %d",&insertpos,&insertnum); insertAfterPosition(&list,insertpos,insertnum); printf("insertAfterPosition %d: ",insertpos); printList(&list); printf("Please input remove position:"); scanf("%d",&removepos); removeAfterPosition(&list,removepos); printf("removeAfterPosition %d: ",removepos); printList(&list); printf("Please input insertsorted number:"); scanf("%d",&insertsortnum); printf("Size of list: %zu ", sizeOfList(&list)); insertSorted(&list,insertsortnum); printf("insertSorted: "); printList(&list); printf("Size of list: %zu ", sizeOfList(&list)); destroyList(&list); printf("Size of list: %zu ", sizeOfList(&list)); }
原文地址:https://www.cnblogs.com/lishuai0214/p/4309731.html