以任意表单实现上述创建顺序表,输出顺序表 插入第i个元素 输出顺序表 删除第i个元素 输出顺序表等过程 用c语言来写
时间: 2024-09-30 13:13:10 浏览: 45
在C语言中,我们可以使用结构体和动态内存分配来实现一个简单的顺序表,这里我们假设顺序表的元素类型为`void *`,以便可以存储不同类型的数据。以下是基本的操作实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表节点结构
typedef struct Node {
void *data; // 存储数据
struct Node* next; // 指向下一个节点
} ListNode;
// 创建顺序表
ListNode* createList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->next = NULL;
return head;
}
// 在第i个位置插入元素
void insert(ListNode** head, int i, void* data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->next = NULL;
if (*head == NULL || i == 0) {
newNode->next = *head;
*head = newNode;
return;
}
ListNode* current = *head;
for (int j = 0; j < i - 1; j++) {
if (current->next == NULL) {
printf("Index out of range.\n");
free(newNode);
return;
}
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
// 输出顺序表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%p -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
// 删除第i个元素
void delete(ListNode** head, int i) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
if (i == 0) {
ListNode* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
ListNode* current = *head;
ListNode* prev = NULL;
for (int j = 0; j < i - 1 && current != NULL; j++) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("Index out of range.\n");
return;
}
prev->next = current->next;
free(current);
}
int main() {
ListNode* list = createList();
// 插入操作示例
void* data1 = ...; // 请填充实际数据
insert(&list, 0, data1); // 插入第一个元素
// 输出操作
printList(list);
// 删除操作示例
delete(&list, 0); // 删除第一个元素
// 输出删除后的列表
printList(list);
// 确保释放所有内存
while (list != NULL) {
ListNode* temp = list;
list = list->next;
free(temp);
}
return 0;
}
```
注意:这个例子仅展示了顺序表的基本操作,并未处理边界条件和错误检查。在实际应用中,应添加更多的错误处理和优化。
阅读全文