大话数据结构学习①线性表的顺序存储结构
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
} SqList;
// 初始化顺序表
Status InitList(SqList *L)
{
L->length = 0;
return OK;
}
// 返回顺序表的长度
int ListLength(SqList L)
{
return L.length;
}
#define OK 1
#define ERROR 0
typedef int Status;
// 查找第i个元素的值
Status GetElement(SqList L, int i, ElemType *e)
{
if (L.length == 0 || i < 1 || i > L.length)
{
return ERROR;
}
*e = L.data[i - 1];
return OK;
}
//插入操作
Status ListInsert(SqList *L, int i, ElemType e)
{
int k;
if (L->length == MAXSIZE) // 顺序表已满
return ERROR;
if (i < 1 || i->L.length + 1) // i值不合法
return ERROR;
if (i <= L->length) //判断是否是最后一个元素
{
for (k = L->length - 1; k >= i - 1; k--) //倒叙移动
L->data[k + 1] = L->data[k]; // 将i之后的元素向后移动一位
}
L->data[i - 1] = e; // 插入
L->length++; // 长度加1
}
//删除操作
Status ListDelete(SqList *L, int i, ElemType e)
{
int k;
if (L->length == 0) // 顺序表为空
return ERROR;
if (i < 1 || i > L->length) // i值不合法
return ERROR;
*e = L->data[i - 1]; // 将要删除的元素赋值给e
if (i < L->length) //是否是最后一个元素
{
for (k = i; k < L->length; k++) // 将i之后的元素向前移动一位
L->data[k - 1] = L->data[k];
}
L->length--; // 长度减1
return OK; // 删除成功
}
线性表的顺序存储结构的优点:
①无需为表示表中元素之间的逻辑关系而额外的增加存储空间。
②可以快速的存取表中任何一个位置的元素。
线性表的顺序存储结构的缺点:
①插入和删除操作需要移动大量的元素。
②线性表的长度变化比较大的时候,难以确定存储空间的容量。
③造成存储空间的碎片。
线性表的定义:零个或者多个数据元素的有限序列。