C语言线性表删除元素示例 - ListDelete 函数实现
#include 'LinearList.h'
int main(int argc, char* argv[]) { SqList L; int i; ElemType Elem;
//
// 初始化线性表
//
L.length = 8;
if (Initlist(&L) != OK) {
return 0;
}
int length = 8;
for (int i = 0; i < length; i++)
{
L.elem[i] = i * 2 + 1;
++L.length;
}
//
// 在第i个位置删除元素
//
ListDelete(&L, 4);
ListDelete(&L, 13); // 删除位置非法. 删除失败.
for (i=0; i<L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
DestoryList(&L);
return 0;
}
/* 功能: 初始化线性表。
参数: L -- 线性表
返回值: 无 / Status Initlist(SqList L) { L->elem = malloc(MAXSIZE * sizeof(ElemType)); if (!L->elem) exit(OVERFLOW); L->length = 0; L->maxLength = MAXSIZE; return OK; }
/* 功能: 销毁线性表。
参数: L -- 线性表
返回值: 无 / void DestoryList(SqList L) { free(L->elem); L->length = 0; }
/* 功能: 删除第 i 个元素。
参数: L -- 线性表 i -- 删除元素的位置。从 1 开始计数。 返回值: 如果删除成功返回 OK 如果删除失败返回 ERROR / Status ListDelete(SqList L, int i) { int j = 0; // 用于移动元素的游标
//
// TODO: 在此添加代码
//
return ERROR;
} 补全Status ListDelete(SqList* L, int i)这一行后面的代码,要求: 功能: 删除第 i 个元素。
参数: L -- 线性表 i -- 删除元素的位置。从 1 开始计数。 返回值: 如果删除成功返回 OK 如果删除失败返回 ERROR内容:Status ListDelete(SqList* L, int i) { if (i < 1 || i > L->length) { printf("删除位置非法. 删除失败.\n"); return ERROR; }
ElemType* p = &(L->elem[i - 1]); // p指向被删除元素的位置
ElemType* q = L->elem + L->length - 1; // q指向最后一个元素的位置
for (; p < q; p++) {
*p = *(p + 1); // 将后面的元素往前移动一位
}
L->length--;
return OK;
}
原文地址: http://www.cveoy.top/t/topic/ePVo 著作权归作者所有。请勿转载和采集!