实现顺序表的基本操作,如初始化、插入、删除、输出等。 注意:顺序表中可有重复元素值。 要求:写出三个基本操作函数listinsert,listdelete,listdeleteelem。
时间: 2023-04-28 18:01:19 浏览: 99
顺序表是一种常见的数据结构,实现它的基本操作包括初始化、插入、删除、输出等。在顺序表中,元素值可以重复。
为了实现这些基本操作,我们可以编写三个函数:listinsert、listdelete和listdeleteelem。
listinsert函数用于在顺序表中插入一个元素,其参数包括要插入的元素值和插入位置。具体实现可以使用循环将插入位置之后的元素向后移动一位,然后将要插入的元素放入插入位置。
listdelete函数用于删除顺序表中指定位置的元素,其参数为要删除的位置。具体实现可以使用循环将删除位置之后的元素向前移动一位,然后将最后一个元素放入删除位置。
listdeleteelem函数用于删除顺序表中指定元素值的所有元素,其参数为要删除的元素值。具体实现可以使用循环遍历整个顺序表,将所有等于要删除的元素值的元素删除。
以上三个函数的实现可以参考以下代码:
```
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存放元素的数组
int length; // 当前顺序表的长度
} SqList;
// 初始化顺序表
void initList(SqList *L) {
L->length = 0;
}
// 在顺序表中插入元素
void listinsert(SqList *L, int elem, int pos) {
if (L->length == MAXSIZE) {
printf("顺序表已满,无法插入元素\n");
return;
}
if (pos < 1 || pos > L->length + 1) {
printf("插入位置不合法\n");
return;
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i-1];
}
L->data[pos-1] = elem;
L->length++;
}
// 删除顺序表中指定位置的元素
void listdelete(SqList *L, int pos) {
if (pos < 1 || pos > L->length) {
printf("删除位置不合法\n");
return;
}
for (int i = pos; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--;
}
// 删除顺序表中指定元素值的所有元素
void listdeleteelem(SqList *L, int elem) {
int i = 0;
while (i < L->length) {
if (L->data[i] == elem) {
listdelete(L, i+1);
} else {
i++;
}
}
}
// 输出顺序表中的所有元素
void printList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
```
使用以上代码可以实现顺序表的基本操作。
阅读全文