参照数据结构线性表的抽象类型定义,实现了线性表的顺序存储
代码如下
#include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 #define LIST_INIT_SIZE 10 #define LIST_INCR_SIZE 10 typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; }SqList; int InitList(SqList *L) { L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (L->elem == NULL) { return ERROR; } memset(L->elem, 0, LIST_INIT_SIZE * sizeof(ElemType)); L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } int DestoryList(SqList *L) { if (L->elem != NULL) { free(L->elem); L->elem = NULL; L->length = 0; L->listsize = 0; return OK; } return ERROR; } int ClearList(SqList *L) { if (L->elem) { memset(L->elem, 0, L->listsize * sizeof(ElemType)); return OK; } return ERROR; } int ListEmpty(SqList L) { return L.length == 0; } int ListLength(SqList L) { return L.length; } int GetElem(SqList L, int i, ElemType *e) { if (i < 0 || i > ListLength(L)) { return ERROR; } *e = L.elem[i]; return OK; } int LocateElem(SqList L, ElemType e) { int i; for (i = 0; i < L.length; i++) { if (e == L.elem[i]) { return i; } } return ERROR; } int ListInsert(SqList *L, int i, ElemType e) { ElemType *p; ElemType *q = &L->elem[i-1]; if (i < 0 || i > L->length +1) { return ERROR; } for (p = &L->elem[L->length]; p >= q; p--) { *(p+1) = *p; } *q = e; L->length++; return OK; } int ListDelete(SqList *L, int i, ElemType *e) { ElemType *p, *q = &L->elem[L->length-1]; if (i < 0 || i > L->length) { return ERROR; } *e = L->elem[i-1]; for (p = &L->elem[i-1]; p <= q; p++) { *p = *(p+1); } L->length--; return OK; } void ListTraverse(SqList L) { int i; for (i = 0; i < L.length; i++) { printf("%d ", L.elem[i]); } } int main(void) { ElemType e; SqList L; InitList(&L); ListInsert(&L,1, 1); ListInsert(&L,2, 2); ListInsert(&L,3, 3); ListInsert(&L,4, 4); ListInsert(&L,5, 5); ListTraverse(L); printf("\n"); ListDelete(&L, 2, &e); printf("%d\n", e); ListTraverse(L); printf("\n"); printf("%d", LocateElem(L, 3)); return 0; }