首页 > 代码库 > 数据结构之线性表:顺序存储

数据结构之线性表:顺序存储

SeqList.h

 1 #define ListSize 100 2  3 typedef int DataType; 4 typedef struct { 5     DataType list[ListSize]; 6     int length; 7 }SeqList; 8  9 void InitList(SeqList *L)10 /* 将线性表初始化为空的线性表只需要把线性表的长度length置为0 */11 {12     L->length=0;13 }14 15 int ListEmpty(SeqList L)16 /* 判断线性表是否为空,为空返回1,否则返回0 */17 {18     return !L.length;19 }20 21 int ListLength(SeqList L)22 /* 返回线性表的长度 */23 {24     return L.length;25 }26 27 void DestroyList(SeqList *L)28 {29     L->length=0;30 }31 32 33 int GetElem(SeqList L, int i, DataType *e)34 /* 查找线性表中第i个元素。查找成功将该值返回给e,并返回1表示成功;否则返回-1表示失败。 */35 {36     if(i<1 || i>L.length)37         return -1;38 39     *e=L.list[i-1];40     return 1;41 }42 43 int LocateElem(SeqList L, DataType e)44 /* 查找线性表中元素值为e的元素,查找成功将对应元素的序号返回,否则返回0表示失败。 */45 {46     int i;47 48     for(i=0; i<L.length; i++)49         if(L.list[i] == e)50             return i+1;51 52     return 0;53 }54 55 int InsertList(SeqList *L, int i, DataType e)56 /* 在顺序表的第i个位置插入元素e,插入成功返回1,如果插入位置不合法返回-1,顺序表满返回0 */57 {58     int j;59 60     if(i<1 || i>L->length) {61         printf("插入位置i不合法!\n");62         return -1;63     } else if(L->length == ListSize) {64         printf("顺序表已满,不能插入元素。\n");65         return 0;66     } else {67         for(j=L->length; j>=i; j--)68             L->list[j]=L->list[j-1];69 70         L->list[i-1]=e;71         L->length++;72 73         return 1;74     }75 }76 77 int DeleteList(SeqList *L, int i, DataType *e)78 /* 将顺序表的第i个位置的元素值返回给e,并删除该元素,删除成功返回1,如果删除位置不合法返回-1,顺序表空返回0 */79 {80     int j;81 82     if(L->length == 0) {83         printf("顺序表已空不能进行删除!\n");84         return 0;85     } else if(i<1 || i>L->length) {86         printf("删除位置不合适!\n");87         return -1;88     } else {89         *e=L->list[i-1];90 91         for(j=i; j<L->length; j++)92             L->list[j-1]=L->list[j];93 94         L->length--;95 96         return 1;97     }98 }

 

数据结构之线性表:顺序存储