#include <stdio.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int length;
} SqList;
void initList(SqList *L);
int listEmpty(SqList L);
void clearList(SqList *L);
void getElem(SqList L, int i, int *e);
int locateElem(SqList L, int e);
int listInsert(SqList *L, int i, int e);
int listDelete(SqList *L, int i, int *e);
int listAdd(SqList *L, int e);
int listLength(SqList L);
int printSqList(SqList L);
void initList(SqList *L)
{
L->length = 0;
}
int listEmpty(SqList L)
{
if (L.length == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
void clearList(SqList *L)
{
L->length = 0;
}
void getElem(SqList L, int i, int *e)
{
if (i <= L.length && i > 0)
{
*e = L.data[i - 1];
}
}
int locateElem(SqList L, int e)
{
for (int i = 0; i < L.length; i++)
{
if (e == L.data[i])
{
return i + 1;
}
}
return FALSE;
}
int listInsert(SqList *L, int i, int e)
{
if (i > 0 && i <= L->length + 1 && L->length < MAXSIZE)
{
int cache;
while (1)
{
cache = L->data[i - 1];
L->data[i - 1] = e;
if (++i <= L->length + 1)
{
e = L->data[i - 1];
L->data[i++ - 1] = cache;
}
else
{
L->length++;
return OK;
}
}
}
else
{
return ERROR;
}
}
int listDelete(SqList *L, int i, int *e)
{
if (i > 0 && i <= L->length + 1 && L->length < MAXSIZE && L->length != 0)
{
*e = L->data[i - 1];
while (1)
{
L->data[i - 1] = L->data[i];
i++;
if (i == L->length)
{
L->length--;
return OK;
}
}
}
else
{
return ERROR;
}
}
int listLength(SqList L)
{
return L.length;
}
int printSqList(SqList L)
{
for (int i = 0; i < L.length; i++)
{
printf("[%d]: %d\n", i + 1, L.data[i]);
}
}
int listAdd(SqList *L, int e)
{
if (L->length < MAXSIZE)
{
L->data[L->length++] = e;
return OK;
}
return ERROR;
}
int main(void)
{
SqList list;
int e;
initList(&list);
printSqList(list);
listInsert(&list, 1, 233);
listAdd(&list, 2);
listAdd(&list, 4);
listAdd(&list, 6);
listAdd(&list, 8);
listInsert(&list, 2, 666);
listDelete(&list, 3, &e);
printf("删除了%d\n", e);
printSqList(list);
printf("线性表的长度是: %d\n", listLength(list));
return 0;
}