参照数据结构线性表的抽象类型定义,实现了线性表的顺序存储
代码如下
#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;
}