写一c语言程序,满足以下条件,1. 创建空单链表; 2. 在单链表上通过插入A~E建立非空单链表并输出; 3. 取第3个数据元素并输出; 4. 在已有单链表里查找B,并输出查找结果; 5. 删除单链表里的第4个数据元素并输出删除后的单链表。
时间: 2024-10-11 13:09:26 浏览: 24
C语言实现头插法、尾插法两种方法来构建带头结点的单链表.zip
在 C 语言中,你可以使用结构体和指针来创建、操作单链表。下面是一个简单的示例程序,它实现了上述所有功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
char data;
struct Node* next;
} Node;
// 初始化链表头节点为空
Node* createEmptyList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->next = NULL;
return head;
}
// 插入节点
void insertNode(Node** head, char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
// 输出链表
void printList(Node* head) {
while (head != NULL) {
printf("%c -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
// 获取第3个节点
Node* getThirdNode(Node* head) {
if (head == NULL || head->next == NULL || head->next->next == NULL) {
printf("No third element in the list.\n");
return NULL;
}
return head->next->next;
}
// 查找节点
int searchNode(Node* head, char key) {
Node* current = head;
while (current != NULL) {
if (current->data == key) {
return 1; // 成功找到
}
current = current->next;
}
return 0; // 未找到
}
// 删除第四个节点
void deleteFourthNode(Node** head) {
if (*head == NULL || (*head)->next == NULL || (*head)->next->next == NULL) {
printf("List does not have a fourth node to delete.\n");
return;
}
Node* temp = *head;
while (temp->next->next != NULL) {
temp = temp->next;
}
free(temp->next);
temp->next = NULL;
}
int main() {
Node* head = createEmptyList();
// 插入 A 到 E
for (char letter = 'A'; letter <= 'E'; letter++) {
insertNode(&head, letter);
}
// 输出插入后的链表
printList(head);
// 获取并输出第3个数据元素
Node* thirdNode = getThirdNode(head);
if (thirdNode) {
printf("The third element is '%c'.\n", thirdNode->data);
}
// 查找 B 并输出结果
int found = searchNode(head, 'B');
if (found) {
printf("Found 'B'\n");
} else {
printf("Not found 'B'\n");
}
// 删除第4个数据元素并输出删除后的链表
deleteFourthNode(&head);
printList(head);
return 0;
}
```
这个程序先创建了一个空链表,然后依次插入 A 到 E 的节点,接着输出链表、获取第三个节点、查找 B 以及删除第四个节点。运行该程序后,你会看到相关的操作结果。
阅读全文