本文主要是介绍C语言-单链表和双链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C语言-单链表和双链表
单链表
// 定义单链表结点结构体
typedef struct Node {int data; // 数据域struct Node* next; // 指针域,指向下一个结点
} ListNode;// 创建新结点
ListNode* createNode(int data) {ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));if (!newNode) {printf("内存分配失败!\n");return NULL;}newNode->data = data;newNode->next = NULL;return newNode;
}// 在链表末尾插入新结点
void insertNode(ListNode** head, int data) {ListNode* newNode = createNode(data);if (*head == NULL) {*head = newNode;} else {ListNode* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newNode;}
}// 生活案例:
// 假设单链表模拟一条公交线路的各个站牌顺序,每个站牌(节点)只知道下一站(next指针),乘客只能按照规定的路线依次前进。### 双链表```c
// 定义双链表结点结构体
typedef struct Node {int data;struct Node* prev; // 新增的指向前一个结点的指针域struct Node* next;
} DListNode;// 创建新结点
DListNode* createDNode(int data) {DListNode* newNode = (DListNode*)malloc(sizeof(DListNode));if (!newNode) {printf("内存分配失败!\n");return NULL;}newNode->data = data;newNode->prev = NULL;newNode->next = NULL;return newNode;
}// 在链表末尾插入新结点
void insertDNode(DListNode** head, int data) {DListNode* newNode = createDNode(data);if (*head == NULL) {*head = newNode;} else {DListNode* temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = newNode;newNode->prev = temp;}
}// 生活案例:
// 双链表可以模拟一条双向通行的道路,每个路口(节点)不仅知道自己前方通往哪个路口(next指针),还知道后方连接哪个路口(prev指针),车辆可以根据道路标志自由选择前进或倒退方向。
这篇关于C语言-单链表和双链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!