本关任务:编写一个函数实现顺序表的插入操作。 函数原型:int InsElem(SeqList *L,int i,DataType e) 功能说明:在线性表L的第i个元素前插入新的元素e,插入成功返回1,失败返回0。
时间: 2024-10-07 15:04:16 浏览: 55
在编写这样一个函数,用于顺序表的插入操作,通常需要以下几个步骤:
```c
// 假设SeqList是一个结构体,包含头指针、长度和容量等信息
typedef struct SeqList {
DataType* data; // 存储数据的数组
int length;
int capacity;
} SeqList;
// 定义InsElem函数
int InsElem(SeqList* L, int i, DataType e) {
// 检查输入是否合法
if (i < 0 || i > L->length) {
return 0; // 插入位置越界,插入失败
}
// 需要扩展顺序表,如果已满(length == capacity)
if (L->length == L->capacity) {
// 扩展空间,通常是将容量翻倍
L->capacity *= 2;
L->data = (DataType*)realloc(L->data, sizeof(DataType) * L->capacity); // 动态扩容
if (!L->data) { // 内存分配失败,插入失败
return 0;
}
}
// 将新元素移动到正确的位置,并更新长度
memmove(&L->data[i+1], &L->data[i], sizeof(DataType) * (L->length - i)); // 移动右侧元素
L->data[i] = e; // 插入新元素
L->length++; // 更新元素个数
return 1; // 插入成功
}
```
阅读全文