C 语言编写程序 1. 创建空单链表; 2. 在单链表上通过插入A~E建立非空单链表并输出; 3. 取第3个数据元素并输出; 4. 在已有单链表里查找B,并输出查找结果; 5. 删除单链表里的第4个数
时间: 2024-10-12 16:16:17 浏览: 17
在C语言中创建和操作单链表的基本步骤可以分为以下几个部分:
1. **创建空单链表**:
- 使用结构体`node`表示链表节点,包含数据域`data`和指向下一个节点的指针`next`。
```c
typedef struct node {
int data;
struct node* next;
} Node;
```
创建空链表就是初始化一个头节点,使其`next`指向NULL。
```c
Node* createEmptyList() {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
```
2. **插入元素**:
- 通过递归或迭代的方式,在已有的链表末尾添加新的节点。
```c
void insert(Node** head, char letter) {
if (*head == NULL) {
*head = (Node*)malloc(sizeof(Node));
(*head)->data = letter - 'A'; // 将字符转换为数字索引
(*head)->next = NULL;
} else {
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = (Node*)malloc(sizeof(Node));
temp->next->data = letter - 'A';
temp->next->next = NULL;
}
}
```
分别对'A'到'E'插入节点。
3. **取第3个数据元素并输出**:
需要遍历链表直到找到第三个节点。
```c
void printThirdElement(Node* head) {
if (head != NULL && head->next != NULL && head->next->next != NULL) {
printf("第3个元素: %d\n", head->next->next->data);
} else {
printf("链表太短,无法获取第3个元素。\n");
}
}
4. **查找特定元素**:
从头开始逐个比较每个节点的数据。
```c
Node* searchLetter(Node* head, char target) {
while (head != NULL) {
if (head->data == target - 'A') {
return head;
}
head = head->next;
}
return NULL; // 如果未找到,返回NULL
}
void printSearchResult(Node* result) {
if (result != NULL) {
printf("找到了字母B,其位置是: ");
} else {
printf("未找到字母B。\n");
}
}
```
5. **删除第4个数**:
类似于查找,先找到第四个节点再删除它。
```c
void deleteFourthElement(Node** head) {
if (*head == NULL || (*head)->next == NULL) {
printf("链表太短,无法删除第四个元素。\n");
} else {
Node* fourthNode = *head;
while (fourthNode->next->next != NULL) {
fourthNode = fourthNode->next;
}
Node* temp = fourthNode->next;
fourthNode->next = fourthNode->next->next;
free(temp); // 释放被删除的节点内存
}
}
```
完成上述函数后,你可以按照顺序调用它们来实现整个过程。记得在操作完后处理内存泄漏,特别是动态分配的内存。
阅读全文