用C语言编写一个程序,建立一个顺序表,并实现:指定一个元素在该元素之前插入一个新元素,指定一个元素并删除该元素
时间: 2024-10-25 07:03:57 浏览: 29
在C语言中,我们可以创建一个简单的顺序表结构来实现这个功能。这里我们假设一个顺序表是一个整数数组,以及两个函数:`insertBefore` 和 `deleteElement`。
首先,我们需要包含头文件和定义顺序表结构体:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int* elements;
size_t size;
size_t capacity;
} SequenceList;
SequenceList* createList() {
SequenceList* list = (SequenceList*)malloc(sizeof(SequenceList));
list->elements = NULL;
list->size = 0;
list->capacity = 5; // 初始容量设为5
return list;
}
void insertBefore(SequenceList* list, int element, int before) {
if (list->size == list->capacity) { // 当列表已满
list->capacity *= 2; // 扩容
list->elements = realloc(list->elements, list->capacity * sizeof(int));
}
for (size_t i = 0; i < list->size; i++) {
if (list->elements[i] == before) {
list->elements[i + 1] = element;
list->size++;
return;
}
}
printf("Element not found.\n");
}
int deleteElement(SequenceList* list, int target) {
bool found = false;
for (size_t i = 0; i < list->size; i++) {
if (list->elements[i] == target) {
memmove(&list->elements[i], &list->elements[i+1], sizeof(int) * (list->size - i - 1));
list->size--;
found = true;
break;
}
}
if (!found)
printf("Element not found.\n");
return found; // 返回是否找到并删除成功
}
```
现在你可以像下面这样使用这个顺序表:
```c
int main() {
SequenceList* myList = createList();
myList->elements = malloc(3 * sizeof(int)); // 初始化3个元素
myList->elements[0] = 10;
myList->elements[1] = 20;
myList->elements[2] = 30;
insertBefore(myList, 40, 20); // 在20之前插入40
printf("After insertion: ");
for (size_t i = 0; i < myList->size; i++)
printf("%d ", myList->elements[i]);
int result = deleteElement(myList, 20); // 删除元素20
if (result)
printf("\nDeleted successfully.\n");
free(myList->elements);
free(myList);
return 0;
}
```
阅读全文