帮我写一份包含链表的初始化,建立,插入,删除,查找,修改,打印的C语言程序
时间: 2024-11-15 14:20:25 浏览: 8
在C语言中,我们可以创建一个简单的单向链表结构来实现这些操作。首先,我们定义一个节点结构体,并声明链表相关的函数。下面是一个基础的链表实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表为空
Node* createList() {
return NULL;
}
// 插入新元素到链表头部
void insertAtHead(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = *head;
*head = newNode;
} else {
printf("Memory allocation failed.\n");
}
}
// 删除指定值的节点
void deleteElement(Node** head, int value) {
Node* temp = *head;
if (temp != NULL && temp->data == value) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != value) {
temp = temp->next;
}
if (temp == NULL) {
printf("Element not found.\n");
} else {
Node* nextTemp = temp->next;
free(temp);
temp = nextTemp;
}
}
// 查找特定值的节点
Node* findElement(Node* head, int value) {
Node* current = head;
while (current != NULL) {
if (current->data == value)
return current;
current = current->next;
}
return NULL; // 如果没找到则返回NULL
}
// 修改链表中的节点值
void modifyElement(Node* head, int oldVal, int newVal) {
Node* temp = head;
while (temp != NULL) {
if (temp->data == oldVal) {
temp->data = newVal;
break;
}
temp = temp->next;
}
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* list = createList();
// 初始化、插入、删除、查找、修改和打印操作...
insertAtHead(&list, 5); // 插入5
printList(list); // 打印链表
deleteElement(&list, 5); // 删除5
modifyElement(list, 7, 10); // 将7改为10
Node* found = findElement(list, 10); // 查找10
if (found) {
printf("Found element at position %d\n", findElementIndex(head, 10)); // 使用自定义函数findElementIndex()
} else {
printf("Element not found.\n");
}
printList(list); // 再次打印链表
return 0;
}
```
这里我们假设你需要一个`findElementIndex`辅助函数来获取节点的索引,你可以自行编写。注意在实际项目中,还需要考虑内存管理和其他边界条件。
阅读全文