线性表顺序存储--C实现

来源:互联网 发布:淘宝网秒杀系统异常 编辑:程序博客网 时间:2024/05/22 02:08

参照数据结构线性表的抽象类型定义,实现了线性表的顺序存储

代码如下

#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 10typedef 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;}

0 0
原创粉丝点击