使用顺序存储方式实现一个线性表(包括线性表的查找、插入、删除等基本操作)。并实现一个算法,该算法可以删除线性表中所有值大于min并且小于max的元素。 要求: 使用C语言实现,要求代码能够运行,并且使用至少一个测试用例进行测试,结果正确
时间: 2024-09-28 19:08:53 浏览: 47
在C语言中,我们可以使用数组作为顺序存储结构来实现线性表。数组是一种简单的线性数据结构,它将数据元素连续地存储在内存中。以下是线性表的一些基本操作,如查找、插入和删除的实现:
```c
#include <stdio.h>
// 定义节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点并分配内存
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表末尾
void insertNode(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 查找特定值的节点
Node* findNode(Node* head, int value) {
Node* current = head;
while (current != NULL) {
if (current->data == value) {
return current;
}
current = current->next;
}
return NULL;
}
// 删除满足条件的节点(从头开始查找)
void deleteElements(Node** head, int min, int max) {
Node* current = *head;
Node* prev = NULL;
while (current != NULL) {
if (current->data > min && current->data < max) {
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
current = current->next;
} else {
prev = current;
current = current->next;
}
}
}
// 测试用例
int main() {
Node* head = NULL;
// 插入一些元素
insertNode(&head, 10); // [10]
insertNode(&head, 5); // [5, 10]
insertNode(&head, 15); // [5, 10, 15]
insertNode(&head, 8); // [5, 8, 10, 15]
int min = 5, max = 10;
printf("Before deletion: \n");
printList(head);
deleteElements(&head, min, max);
printf("\nAfter deleting elements between %d and %d:\n", min, max);
printList(head);
return 0;
}
// 打印整个链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
```
这个程序创建了一个链表,然后根据给定的`min`和`max`范围删除了相应的元素。注意,在实际应用中,需要处理空指针异常和边界情况。运行此程序,你可以看到删除后的线性表内容。
阅读全文