用数据结构中C语言写代码,需要删除顺序表中第i个数据节点
时间: 2024-10-11 13:13:17 浏览: 3
在C语言中,如果你使用的是链表作为数据结构,删除顺序表(数组通常不适合插入和删除操作)中第i个数据节点的操作可以分为以下几个步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 删除第i个节点函数
void deleteNode(Node** head, int i) {
if (*head == NULL) { // 空表处理
return;
}
Node* current = *head; // 初始化当前节点为头节点
Node* previous = NULL; // 前一个节点
// 遍历链表到第i个节点
for (int j = 0; j < i && current != NULL; j++) {
previous = current;
current = current->next;
}
// 如果找到了第i个节点,删除它并调整后续节点
if (current != NULL) {
if (previous == NULL) { // 删除头节点
*head = current->next;
} else {
previous->next = current->next;
}
free(current); // 释放内存
}
}
// 测试删除
void printList(Node* head) {
while (head) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 创建链表示例
Node* list = malloc(sizeof(Node));
list->data = 1;
list->next = malloc(sizeof(Node));
list->next->data = 2;
list->next->next = malloc(sizeof(Node));
list->next->next->data = 3;
list->next->next->next = NULL;
printf("Before deletion: ");
printList(list);
deleteNode(&list, 1); // 删除第二个节点(索引从0开始)
printf("After deletion: ");
printList(list);
return 0;
}
```
在这个例子中,`deleteNode` 函数接受一个指向链表头节点的指针 `head` 和一个整数 `i`。函数遍历链表找到第 `i` 个节点,并将其从链表中移除。
注意:这个代码假设你已经有一个初始化好的链表。如果 `i` 超出了链表的实际长度,或者尝试删除头节点(即列表为空),你需要添加相应的错误检查。