今天开始复习下数据结构,随手写写。实现一些基本操作。如:插入,删除 #include <stdio.h> #include <math.h> #define LIST_SIZE 10 #define INC_SIZE 2 #define TRUE 1 #define FALSE 0 typedef struct { int *elem; int length; int size; }Sqlist; int InitList(Sqlist *L) { (*L).elem = (int*)malloc(LIST_SIZE*sizeof(int)); if (!(*L).elem) exit(0); (*L).length = 0; (*L).size = LIST_SIZE; return 0; } int DestoryList(Sqlist *L) { free((*L).elem); (*L).elem = NULL; (*L).length = 0; (*L).size = 0; return 0; } int ClearList(Sqlist *L) { (*L).length = 0; return 0; } int ListEmpty(Sqlist L) { if(L.length==0) return TRUE; else return FALSE; } int ListLength(Sqlist L) { return L.length; } int GetElem(Sqlist L, int i, int *e) { if (i < 1||i > L.length) exit(0); *e = *(L.elem + i - 1); return 0; } int ListInsert(Sqlist *L,int i, int e) { int *newbase, *p, *q; if (i < 1||i > (*L).length + 1) exit(0); if ((*L).length >= (*L).size) { newbase = (int *)realloc((*L).elem,((*L).size + INC_SIZE)*sizeof(int)); if (!newbase) exit(0); (*L).elem = newbase; (*L).size += INC_SIZE; } p = (*L).elem + i - 1; for ( q = (*L).elem + (*L).length -1; q >= p; --q) *(q + 1) = *q; *p = e; ++(*L).length; return 0; } int ListDelete(Sqlist *L, int i) { int *p, *q; if (i < 1||i > (*L).length) exit(0); p = (*L).elem + i; for ( q = (*L).elem + (*L).length;q >= p; ++p) *(p -1) = *p; (*L).length--; return 0; } int main() { int i,*p; Sqlist L; InitList(&L); for (i = 1;i<LIST_SIZE;i++) ListInsert(&L,i,i); p = L.elem; for (i = 1;i<LIST_SIZE;i++) printf("%d/n",*p++); printf("ListLength = %d/n",ListLength(L)); ListDelete(&L,5); p = L.elem; for (i = 0;i<L.length;i++) printf("%d/n",*p++); return 0; }