直接上代码,具体实现思想都已经在方法上加注释
#include <stdio.h>
#include <stdlib.h>
#define OK 1 //成功
#define ERROR 0 //失败
#define MAX_SIZE 20 //存储空间初始分配大小
typedef int Status; //状态 用OK 和 ERROR来表示
typedef int ElemType; //存储的数据类型,这里假设是Int
//定义一个线性表顺序存储结构
typedef struct
{
ElemType data[MAX_SIZE]; //数组存储数据元素,这里最大值为20
int length; //线性表当前的长度
}ArrayList;
//进行初始化
Status InitList(ArrayList *list)
{
list -> length = 0;
list = (ArrayList *)malloc(sizeof(ArrayList));
if(list == NULL){ return ERROR;}
return OK;
}
//添加元素
//向已存在的线性表添加元素
//list : 要进行操作的线性表, elem : 要添加的元素, index : 返回添加元素后在线性表的索引
//返回值为状态码 OK & ERROR
Status Add(ArrayList *list, ElemType elem, int *index)
{
if(list -> length >= MAX_SIZE || elem == NULL) return ERROR;
list -> data[list -> length] = elem;
list -> length++;
*index = list -> length - 1;
return OK;
}
//插入元素
//向已存在的线性表的指定位置插入元素
//list : 要进行操作的线性表, index : 要插入的索引位置, elem : 要插入的元素
//返回值为状态码 OK & ERROR
Status Insert(ArrayList *list, ElemType elem, int index)
{
int i;
if(index > list -> length || index < 0 || elem == NULL) return ERROR;
for (i = list -> length; i > index; i--)
{
list -> data[i] = list -> data[i - 1];
}
list -> data[i] = elem;
list -> length++;
return OK;
}
//删除元素
//根据索引位置对已存在的线性表删除元素,并取出删除的元素
//list : 要进行操作的线性表, index : 要删除元素的索引位置, elem : 取回已经删除的元素
//返回值为状态码 OK & ERROR
Status Delete(ArrayList *list, int index, ElemType *elem)
{
int i;
if(index >= list -> length || index < 0) return ERROR;
*elem = list -> data[index];
for(i = index; i < list -> length - 1; i++)
{
list -> data[i] = list -> data[i + 1];
}
list -> length--;
return OK;
}
//更新元素
//对已存在的线性表根据指定的索引位置更新数据
//list : 要进行操作的线性表, index : 要更新元素的索引, elem : 要替换的元素
Status Update(ArrayList *list, int index, ElemType elem)
{
if(index < 0 || index >= list -> length || elem == NULL) return ERROR;
list -> data[index] = elem;
return OK;
}
//获取元素
//根据索引获取线性表元素
//list : 要进行查找索引的线性表, index : 要查找的索引, elem : 查找到的值。
//返回值为状态码 OK & ERROR
Status GetElem(ArrayList *list, int index, ElemType *elem)
{
if(index < 0 || index >= list -> length || elem == NULL) return ERROR;
*elem = list -> data[index];
return OK;
}
int main(void)
{
ArrayList list;`在这里插入代码片`
Status statu;
statu = InitList(&list);
if(statu == OK)
{
printf("%s : %d\n", "InitList", list.length);
int addIndex;
statu = Add(&list, 15, &addIndex);
if(statu == OK)
{
printf("%s : %d, %d, %d\n", "Add", list.data[0], addIndex, list.length);
Add(&list, 16, &addIndex);
Add(&list, 17, &addIndex);
statu = Insert(&list, 21, 2);
if(statu == OK)
{
printf("%s : %d\n", "Insert", list.data[2]);
ElemType delElem;
statu = Delete(&list, 2, &delElem);
if(statu == OK)
{
printf("%s : %d, %d\n", "Delete", delElem, list.data[2]);
statu = Update(&list, 2, 29);
if(statu == OK)
{
printf("%s, %d\n", "Update", list.data[2]);
ElemType updateElem;
statu = GetElem(&list, 1, &updateElem);
if(statu == OK)
{
printf("%s, %d\n", "GetElem", updateElem);
}
}
}
}
}
}
return 0;
}