用C语言实现ArrayList,并编写测试用例测试
时间: 2024-09-23 13:01:44 浏览: 28
在C语言中,由于原生数组和动态内存管理的限制,我们通常不会直接使用ArrayList这种数据结构,因为C标准库并没有提供这样的现成实现。不过,我们可以手动创建类似的功能,使用链表作为底层存储机制。这里是一个简单的模拟实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建ArrayList的头指针
typedef struct ArrayList {
Node* head;
int size;
} ArrayList;
// 初始化ArrayList
ArrayList* createArrayList() {
ArrayList* list = (ArrayList*)malloc(sizeof(ArrayList));
list->head = NULL;
list->size = 0;
return list;
}
// 添加元素到ArrayList
void addElement(ArrayList* list, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = list->head;
list->head = newNode;
list->size++;
}
// 删除指定位置的元素
void removeElement(ArrayList* list, int index) {
if (index >= 0 && index < list->size) {
Node* temp = list->head;
for (int i = 0; i < index; i++) {
temp = temp->next;
}
Node* toRemove = temp->next;
temp->next = toRemove->next;
free(toRemove);
list->size--;
} else {
printf("Error: Index out of bounds.\n");
}
}
// 查找指定值在ArrayList中的索引
int findElement(ArrayList* list, int value) {
Node* current = list->head;
int index = 0;
while (current != NULL) {
if (current->data == value) {
return index;
}
current = current->next;
index++;
}
return -1; // 如果没找到,返回-1
}
// 打印ArrayList的内容
void printArrayList(ArrayList* list) {
Node* temp = list->head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
// 测试用例
int main() {
ArrayList* list = createArrayList();
// 添加元素
addElement(list, 5);
addElement(list, 10);
addElement(list, 15);
// 打印初始列表
printArrayList(list);
// 删除元素
removeElement(list, 1);
// 再次打印列表
printArrayList(list);
// 查找元素
int index = findElement(list, 10);
if (index != -1)
printf("Element found at index %d\n", index);
else
printf("Element not found.\n");
// 释放内存
Node* temp = list->head;
while (temp != NULL) {
Node* next = temp->next;
free(temp);
temp = next;
}
free(list);
return 0;
}
```
这是一个基本的ArrayList模拟实现,功能包括添加、删除、查找和打印元素。注意这只是一个简化版的示例,并未包含错误处理和其他高级特性。
阅读全文