当前位置:实例文章 » 其他实例» [文章]【数据结构】单链表---C语言版(全网最最最最细!小白必必必必看!!!有图有真相!)

【数据结构】单链表---C语言版(全网最最最最细!小白必必必必看!!!有图有真相!)

发布人:shili8 发布时间:2024-11-16 10:09 阅读次数:0

**单链表---C语言版**

**前言**

在计算机科学中,数据结构是指组织和存储数据的方式。单链表是一种常见的线性数据结构,它由一系列结点组成,每个结点包含一个值和一个指向下一个结点的指针。在本文中,我们将详细介绍单链表的定义、特点、操作以及C语言版的实现。

**单链表的定义**

单链表是一种线性数据结构,它由一系列结点组成,每个结点包含两个部分:

* **值域(Value)**: 每个结点存储一个具体的值。
* **指针域(Pointer)**: 每个结点存储一个指向下一个结点的指针。

**单链表的特点**

1. **线性结构**:单链表是一种线性的数据结构,每个结点都有一个前驱结点和一个后继结点。
2. **动态分配内存**:单链表可以动态地分配和释放内存,适合于存储大量的数据。
3. **插入和删除操作**:单链表支持高效的插入和删除操作,只需要改变相应结点的指针域即可。

**C语言版的实现**

下面是C语言版的单链表实现:

c#include <stdio.h>
#include <stdlib.h>

// 结点结构体定义typedef struct Node {
 int data; // 值域 struct Node* next; // 指针域} Node;

// 单链表结构体定义typedef struct LinkedList {
 Node* head; // 头结点指针} LinkedList;

// 创建一个新结点Node* createNode(int value) {
 Node* newNode = (Node*)malloc(sizeof(Node));
 if (!newNode) {
 printf("Memory error
");
 return NULL;
 }
 newNode->data = value;
 newNode->next = NULL;
 return newNode;
}

// 初始化一个空链表LinkedList* initList() {
 LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
 if (!list) {
 printf("Memory error
");
 return NULL;
 }
 list->head = NULL;
 return list;
}

// 插入结点到头部void insertHead(LinkedList* list, int value) {
 Node* newNode = createNode(value);
 if (list->head == NULL) {
 list->head = newNode;
 } else {
 newNode->next = list->head;
 list->head = newNode;
 }
}

// 插入结点到尾部void insertTail(LinkedList* list, int value) {
 Node* newNode = createNode(value);
 if (list->head == NULL) {
 list->head = newNode;
 } else {
 Node* current = list->head;
 while (current->next != NULL) {
 current = current->next;
 }
 current->next = newNode;
 }
}

// 删除头结点void deleteHead(LinkedList* list) {
 if (list->head == NULL) {
 printf("List is empty
");
 return;
 }
 Node* temp = list->head;
 list->head = list->head->next;
 free(temp);
}

// 删除尾结点void deleteTail(LinkedList* list) {
 if (list->head == NULL) {
 printf("List is empty
");
 return;
 }
 if (list->head->next == NULL) {
 Node* temp = list->head;
 list->head = NULL;
 free(temp);
 return;
 }
 Node* current = list->head;
 while (current->next->next != NULL) {
 current = current->next;
 }
 Node* temp = current->next;
 current->next = NULL;
 free(temp);
}

// 打印链表void printList(LinkedList* list) {
 Node* current = list->head;
 while (current != NULL) {
 printf("%d ", current->data);
 current = current->next;
 }
 printf("
");
}


**示例代码**

cint main() {
 LinkedList* list = initList();
 insertHead(list,1);
 insertHead(list,2);
 insertTail(list,3);
 printList(list); // 输出:213 deleteHead(list);
 printList(list); // 输出:13 deleteTail(list);
 printList(list); // 输出:1 return0;
}


**总结**

在本文中,我们详细介绍了单链表的定义、特点、操作以及C语言版的实现。通过示例代码,读者可以更好地理解单链表的使用和应用。

其他信息

其他资源

Top