写一简单的c语言程序,满足以下条件,1. 创建空单链表; 2. 在单链表上通过插入A~E建立非空单链表并输出; 3. 取第3个数据元素并输出; 4. 在已有单链表里查找B,并输出查找结果; 5. 删除单链表里的第4个数据元素并输出删除后的单链表。
时间: 2024-10-11 12:09:27 浏览: 32
数据结构课程设计单链表优质资料.doc
创建一个简单的 C 语言程序来实现这些功能可以按照以下步骤:
首先,我们需要定义一个结构体表示链表节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
char data;
struct Node* next;
} Node;
// 初始化链表为空
Node* createEmptyList() {
return (Node*)malloc(sizeof(Node));
}
// 插入节点到链表
void insertNode(Node** head, char data) {
Node* newNode = createEmptyList();
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");
}
// 获取第n个节点的数据
char getNthElement(Node* head, int n) {
if (n <= 0 || head == NULL) {
return '\0'; // 如果索引错误或链表为空,返回空字符
}
Node* current = head;
for (int i = 1; i < n && current != NULL; ++i) {
current = current->next;
}
return current ? current->data : '\0';
}
// 查找特定节点
Node* findNode(Node* head, char key) {
Node* current = head;
while (current != NULL) {
if (current->data == key) {
return current;
}
current = current->next;
}
return NULL; // 如果未找到,返回NULL
}
// 删除链表中的指定节点
void deleteNode(Node** head, int index) {
if (*head == NULL) return;
Node* temp = *head;
if (index == 0) { // 删除头节点
*head = temp->next;
free(temp);
return;
}
for (int i = 0; temp != NULL && i < index - 1; ++i) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) {
return; // 索引超出范围
}
Node* nextToDel = temp->next->next;
temp->next = nextToDel;
free(nextToDel);
}
int main() {
Node* head = createEmptyList();
// 插入 A 到 E
insertNode(&head, 'A');
insertNode(&head, 'B');
insertNode(&head, 'C');
insertNode(&head, 'D');
insertNode(&head, 'E');
// 输出链表
printf("Initial List: ");
printList(head);
// 输出第3个元素
char thirdElement = getNthElement(head, 3);
if (thirdElement != '\0') {
printf("Third element is: %c\n", thirdElement);
} else {
printf("Invalid index for the third element.\n");
}
// 查找 B 并输出结果
Node* foundNode = findNode(head, 'B');
if (foundNode != NULL) {
printf("Found 'B': %c\n", foundNode->data);
} else {
printf("Could not find 'B'.\n");
}
// 删除第4个元素
deleteNode(&head, 3); // 注意索引从0开始计数
// 输出删除后链表
printf("After deleting the fourth element:\n");
printList(head);
return 0;
}
```
在这个程序中,我们实现了链表的基本操作,包括创建、插入、打印、获取节点值、查找和删除节点。请注意,这个示例假设所有操作都在正确的情况下进行,实际应用中需要添加更多的错误检查和边界处理。
阅读全文