写c语言代码的链表有退出和初始化链表和前插法建立链表和后插法建立链表和查找和插入和打印功能的
时间: 2024-09-22 12:06:47 浏览: 39
在C语言中,我们可以创建一个简单的链表结构来实现上述操作。这里是一个基本的链表结构和相应的函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化链表函数 (空链表)
Node* initList() {
return (Node*)malloc(sizeof(Node)); // 分配内存并返回头节点
}
// 退出链表函数(释放内存)
void freeList(Node** head) {
if (*head != NULL) {
Node* temp = *head;
while (temp != NULL) {
Node* nextTemp = temp->next;
free(temp); // 释放当前节点
temp = nextTemp; // 更新临时指针到下一个节点
}
*head = NULL; // 设置头节点为NULL
}
}
// 前插法添加元素
void insertAtFront(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
// 后插法添加元素
void insertAtEnd(Node** head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) { // 如果链表为空
*head = newNode;
return;
}
Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 查找元素
int search(Node* head, int key) {
Node* temp = head;
while (temp != NULL) {
if (temp->data == key) {
return 1; // 找到了,返回1
}
temp = temp->next;
}
return 0; // 没找到,返回0
}
// 插入元素
void insertElement(Node** head, int key, int index) {
if (index <= 0) {
printf("Invalid index\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = key;
newNode->next = *head;
Node* temp = newNode;
for (int i = 1; i < index - 1 && temp != NULL; i++) {
temp = temp->next;
}
if (temp != NULL) {
temp->next = newNode->next;
} else {
printf("Index out of range\n");
}
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
Node* head = initList();
// 示例操作
insertAtFront(&head, 5);
insertAtEnd(&head, 10);
printList(head);
// 插入、查找和删除等其他操作
freeList(&head);
return 0;
}
```
阅读全文