用C语言写一个算法int Delete_Elem(SqList &L,ElemType e)从L中删除与e相等的数据元素,并返回删除后的顺序表L的长度。
时间: 2024-09-16 17:05:03 浏览: 67
《数据结构与算法(C语言版)》教学参考模块2.docx
在C语言中,可以使用迭代或递归的方式来实现这个算法,这里我们假设`SqList`是一个动态数组类型的顺序表结构体,包含数据元素`elem`和长度`size`。下面是简单的迭代版本:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义 SqList 结构体
typedef struct {
ElemType elem;
int size;
int *data; // 指向元素的指针
} SqList;
// 助手函数,用于找到给定值的位置
int find_position(SqList* L, ElemType e) {
for (int i = 0; i < L->size; i++) {
if (L->data[i] == e)
return i;
}
return -1; // 如果未找到,返回-1
}
// 删除元素的函数
int Delete_Elem(SqList* L, ElemType e) {
int pos = find_position(L, e);
if (pos == -1) { // 如果没找到元素,则不需要做任何操作,直接返回
return L->size;
}
// 如果找到了元素,将之后的所有元素前移一位
memmove(&L->data[pos], &L->data[pos+1], sizeof(ElemType) * (L->size - pos - 1));
// 更新大小和最后一个有效元素位置
L->size--;
L->data[L->size] = NULL; // 标记列表结束
return L->size; // 返回新的长度
}
// 示例如何创建和使用该函数
int main() {
SqList L;
// 初始化...
int new_size = Delete_Elem(&L, e); // 替换为你要删除的具体值
printf("删除元素后列表的长度: %d\n", new_size);
return 0;
}
```
阅读全文