线性表,数组实现
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 10
typedef enum
{
ERROR = 0,
SUCCESS = 1,
} State;
typedef int Data;
typedef struct
{
Data data[MAXSIZE];
int length;
} *List;
List initList()
{
List list = malloc(sizeof(int) * MAXSIZE + 4);
for (int i = 0; i < MAXSIZE; i++) {
list->data[i] = -1;
}
list->length = 0;
return list;
}
State isEmpty(List list)
{
return list->length == 0;
}
State clear(List list)
{
for (int i = 0; i < list->length; i++) {
list->data[i] = -1;
}
list->length = 0;
return SUCCESS;
}
State getElemByIndex(List list, int index, Data *e)
{
if (index < 0 || index > list->length) return ERROR;
*e = list->data[index];
return SUCCESS;
}
State getIndexByElem(List list, Data ele, int *index)
{
for (int i = 0; i < list->length; ++i) {
if (ele == list->data[i]) {
*index = i;
return SUCCESS;
}
}
printf("不存在%d", ele);
return ERROR;
}
State insert(List list, int index, Data ele)
{
if (list->length == MAXSIZE - 1 || index < 0 || index > MAXSIZE - 1 || index > list->length) {
perror("添加失败");
return ERROR;
}
for (int i = list->length; i > index; i--) {
list->data[i] = list->data[i - 1];
}
list->data[index] = ele;
list->length++;
return SUCCESS;
}
State deleteByIndex(List list, int index, void *ele)
{
if (list->length == 0 || index > list->length) return ERROR;
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->data[list->length - 1] = -1;
list->length--;
return SUCCESS;
}
State deleteByEle(List list, int ele, int *index)
{
if (!list->length) return ERROR;
getIndexByElem(list, ele, index);
for (int i = *index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->data[list->length - 1] = -1;
list->length--;
return ERROR;
}
int main()
{
List list = initList();
insert(list, 0, 1);
insert(list, 1, 2);
insert(list, 2, 3);
insert(list, 3, 5);
int index;
clear(list);
for (int i = 0; i < list->length; i++) {
printf("%d\n", list->data[i]);
}
return 0;
}