编程实现线性表顺序存储下的基本操作 1.初始化 2.插入元素 3.删除元素 4.获取第i人元素 5.判断元素是否存在---前面5个已提供源码参考 6.获取某个元素的下一个元素; NextElem(L,cur_e,&next_e);7.获取某个元素的前一个元素; PriorElem(L,cur_e,&pre_e);
时间: 2023-05-21 13:02:06 浏览: 90
1.初始化操作:
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 分配的存储容量
} SqList;
// 初始化线性表
Status InitList(SqList *L) {
L->elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L->elem) exit(OVERFLOW); // 存储分配失败
L->length = 0; // 空表长度为0
L->listsize = LIST_INIT_SIZE; // 初始存储容量
return OK;
}
2.插入元素操作:
// 在顺序线性表L中第i个位置之前插入新的元素e
Status ListInsert(SqList *L, int i, ElemType e) {
if (i < 1 || i > L->length + 1) return ERROR; // i值不合法
if (L->length >= L->listsize) { // 当前存储空间已满,增加分配
ElemType *newbase = (ElemType *) realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase) exit(OVERFLOW); // 存储分配失败
L->elem = newbase; // 新基址
L->listsize += LISTINCREMENT; // 增加存储容量
}
ElemType *q = &(L->elem[i - 1]); // q为插入位置
for (ElemType *p = &(L->elem[L->length - 1]); p >= q; --p) *(p + 1) = *p; // 插入位置及之后的元素后移
*q = e; // 插入e
++L->length; // 表长增1
return OK;
}
3.删除元素操作:
// 删除顺序线性表L中第i个位置的元素,并用e返回其值
Status ListDelete(SqList *L, int i, ElemType *e) {
if (i < 1 || i > L->length) return ERROR; // i值不合法
ElemType *p = &(L->elem[i - 1]); // p为被删除元素的位置
*e = *p; // 被删除元素的值赋给e
ElemType *q = L->elem + L->length - 1; // 表尾元素位置
for (++p; p <= q; ++p) *(p - 1) = *p; // 被删除元素之后的元素前移
--L->length; // 表长减1
return OK;
}
4.获取第i个元素操作:
// 获取顺序线性表L中第i个元素的值
Status GetElem(SqList L, int i, ElemType *e) {
if (i < 1 || i > L.length) return ERROR; // i值不合法
*e = L.elem[i - 1]; // 取第i个元素
return OK;
}
5.判断元素是否存在操作:
// 在顺序线性表L中查找第1个值为e的元素,并返回其位序
int LocateElem(SqList L, ElemType e) {
int i;
ElemType *p = L.elem;
for (i = 1; i <= L.length; ++i) {
if (*p++ == e) return i; // 找到值为e的元素
}
return 0; // 没有找到值为e的元素
}
6.获取某个元素的下一个元素操作:
// 获取顺序线性表L中元素cur_e的下一个元素的值
Status NextElem(SqList L, ElemType cur_e, ElemType *next_e) {
int i = LocateElem(L, cur_e); // 查找cur_e的位置
if (i == 0 || i == L.length) return ERROR; // 没有找到cur_e或者cur_e是最后一个元素
*next_e = L.elem[i]; // 取cur_e的下一个元素
return OK;
}
以上是线性表顺序存储下的基本操作的实现代码。
阅读全文