list.h #ifndef _LIST_H #define _LIST_H #define LIST_INIT_LENGTH 10 #define LIST_INCREMENT 10 struct _LIST; typedef struct _LIST LIST; LIST* list_init(); int list_free(LIST* list); int node_insert(LIST* list, int i, Elemtype* elem); int node_delete(LIST* list, int i); #endif /*_LIST_H*/ list.c #include <stdio.h> #include <stdlib.h> #include "stu.h" #include "list.h" struct _LIST { Elemtype* elem; int length; int size; }; LIST* list_init() { LIST* list = (LIST*)malloc(sizeof(LIST)); if(list == NULL) { exit(0); } list->elem = (Elemtype*)malloc(LIST_INIT_LENGTH*sizeof(Elemtype)); if(list->elem == NULL) { exit(0); } list->length = 0; list->size = LIST_INIT_LENGTH; return list; } int list_free(LIST* list) { free(list->elem); free(list); } int node_insert(LIST* list, int i, Elemtype* elem) { Elemtype* insert_node = NULL, *last_node = NULL, *temp_node = NULL; if(list == NULL || elem == NULL) { return 0; } if(i < 0 || i > list->length + 1) { return 0; } if(list->length >= list->size) { temp_node=(Elemtype*)realloc(list->elem,(list->size + LIST_INCREMENT)*sizeof(Elemtype)); list->elem = temp_node; list->size += LIST_INCREMENT; } insert_node = &list->elem[i - 1]; last_node = &list->elem[list->length - 1]; for(; last_node >= insert_node; last_node--) { *(last_node + 1) = *last_node; } *insert_node = *elem; list->length++; return 0; } int node_delete(LIST* list, int i) { Elemtype* del_node = NULL, *last_node = NULL; if(list == NULL) { return 0; } if(i < 0 || i > list->length + 1) { return 0; } del_node = &list->elem[i - 1]; last_node = &list->elem[list->length - 1]; for(; last_node > del_node; del_node++) { *del_node = *(del_node + 1); } list->length--; return 0; } stu.h #ifndef _STU_H #define _STU_H typedef struct { char id[10]; char name[20]; char sex[6]; int age; }Elemtype; #endif main.c #include <stdio.h> #include <stdlib.h> #include "stu.h" #include "list.h" Elemtype student[3]={ {"0001","zhanshan","man",23}, {"0002","lishi","woman",22}, {"0003","wangwu","man",21} }; int main(int argc, char* argv[]) { int i = 0; LIST* list = NULL; list = list_init(); for(i = 0; i < 3; i++) { node_insert(list, 1, &student[i]); } node_delete(list, 1); list_free(list); return 0; }