①建立一个包括头结点和3个结点(4,2,1)的单链 表,实现单链表建立的基本操作:插入、删除、查找操 作。请用c语言实现
时间: 2024-10-11 16:10:33 浏览: 31
在C语言中,我们可以使用结构体定义节点,并创建一个链表结构。这里是一个基本的单链表实现,包括头节点和三个节点(4, 2, 1),以及插入、删除和查找操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表头节点
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0; // 初始化头节点数据为0
head->next = NULL;
return head;
}
// 插入节点
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed for new node.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 删除节点
void deleteNode(Node** head, int key) {
Node* temp = *head, *prev = NULL;
if (temp != NULL && temp->data == key) {
*head = temp->next; // 如果头节点是要删除的,则直接更新头指针
free(temp); // 释放已删除节点内存
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
printf("Element not found in the list.\n");
return;
}
prev->next = temp->next; // 将前一个节点的下一个节点指向当前节点的下一个节点
free(temp); // 释放当前节点内存
}
// 查找节点
Node* findNode(Node* head, int key) {
Node* current = head;
while (current != NULL) {
if (current->data == key)
return current;
current = current->next;
}
return NULL;
}
int main() {
Node* head = createList();
// 插入节点
insertNode(&head, 4);
insertNode(&head, 2);
insertNode(&head, 1);
// 打印链表
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
// 删除节点并打印结果
deleteNode(&head, 2);
temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
// 查找节点
Node* result = findNode(head, 1);
if (result)
printf("Found element: %d\n", result->data);
else
printf("Element not found.\n");
return 0;
}
```
这个程序首先创建了一个包含节点4, 2, 1的链表,然后展示了如何插入、删除和查找元素。请注意,在实际应用中,还需要处理更多边缘情况,如空链表、链表为空等。
阅读全文