利用顺序表的操作,实现以下的函数。 (1) 从顺序表中删除第i个元素并由函数返回被删元素的值。如果i不合理或顺序表为空则显示出错信息并退出运行。 (2) 从顺序表中删除具有给定值x的所有元素。
时间: 2024-09-30 11:13:22 浏览: 22
要利用顺序表的操作实现这两个功能,首先我们需要定义一个顺序表的数据结构,包含一个数组和用于存储当前元素个数的计数器。以下是C语言中的简单实现:
```c
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
typedef struct SequenceList {
ListNode *head;
int size;
} SequenceList;
// 初始化顺序表
SequenceList* createSequenceList() {
SequenceList *list = malloc(sizeof(SequenceList));
list->head = NULL;
list->size = 0;
return list;
}
// 插入元素到列表末尾
void insertElement(SequenceList *list, int value) {
ListNode *newNode = malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
if (list->size == 0) {
list->head = newNode;
} else {
ListNode *temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
list->size++;
}
// 删除第i个元素
int deleteElementAt(SequenceList *list, int i) {
if (list->size == 0 || i < 0 || i >= list->size) {
printf("Error: Invalid index.\n");
exit(1);
}
int deletedValue = list->head->data;
if (i == 0) {
list->head = list->head->next;
} else {
ListNode *prev = list->head;
for (int j = 1; j < i; j++) {
prev = prev->next;
}
prev->next = prev->next->next;
}
free(list->head->data);
list->head->data = NULL;
list->size--;
return deletedValue;
}
// 删除所有值为x的元素
void deleteElementsWithValue(SequenceList *list, int x) {
ListNode *current = list->head;
ListNode *previous = NULL;
while (current != NULL) {
if (current->data == x) {
if (previous == NULL) {
list->head = current->next;
} else {
previous->next = current->next;
}
free(current);
list->size--;
current = current->next;
} else {
previous = current;
current = current->next;
}
}
}
```
现在你可以用这些函数来创建、插入、删除顺序表中的元素。例如:
```c
int main() {
SequenceList *list = createSequenceList();
insertElement(list, 1);
insertElement(list, 2);
insertElement(list, 3);
int removedValue = deleteElementAt(list, 1); // 删除第二个元素,返回2
printf("After deletion: \n");
while (list->head != NULL) {
printf("%d ", list->head->data);
list->head = list->head->next;
}
deleteElementsWithValue(list, 2); // 删除所有值为2的元素
return 0;
}
```
以上代码仅供参考,实际应用中可能需要添加错误处理和内存管理。
阅读全文