工作之余来写写C语言相关知识,以免忘记。今天就来聊聊C语言链表,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。
学习过程中如有任何疑问,可底下评论!
如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!
提起链表,相信大家都很熟悉,无非就是数据域和指针域的相关操作,这里不多说,直接上代码;
#include <stdio.h>
#include <stdlib.h>
/******************链表结构体变量定义******************/
typedef struct Node {
int data;
struct Node* next;
}node;
/******************函数声明******************/
node* creatList();
node* creatNode(int data);
void insertNodeByHead(node* headNode, int data);
void insertNodeByBack(node* headNode, int data);
void deleteNode(node* headNode, int data);
void printList(node* headNode);
int main() {
node* list = creatList();
//insertNodeByHead(list, 1);
//insertNodeByHead(list, 2);
//insertNodeByHead(list, 3);
insertNodeByBack(list, 1);
insertNodeByBack(list, 2);
insertNodeByBack(list, 3);
deleteNode(list, 10);
printList(list);
return 0;
}
/******************函数定义******************/
/* 函数名:creatList
* 参数: /
* 功能: 创建链表
* 返回值:node*
*/
node* creatList() {
node* headNode = (node*)malloc(sizeof(node));
headNode->next = NULL;
return headNode;
}
/* 函数名:creatNode
* 参数: data
* 功能: 创建链表节点
* 返回值:node*
*/
node* creatNode(int data) {
node* newNode = (node*)malloc(sizeof(node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
/* 函数名:insertNodeByHead
* 参数: headNode,data
* 功能: 从链表头部插入节点
* 返回值:void
*/
void insertNodeByHead(node* headNode, int data) {
node* newNode = creatNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
/* 函数名:insertNodeByBack
* 参数: headNode,data
* 功能: 从链表尾部插入节点
* 返回值:void
*/
void insertNodeByBack(node* headNode, int data) {
node* newNode = creatNode(data);
while (headNode->next) {
headNode = headNode->next;
}
newNode->next = NULL;
headNode->next = newNode;
}
/* 函数名:deleteNode
* 参数: headNode,data
* 功能: 删除链表中的节点
* 返回值:void
*/
void deleteNode(node* headNode, int data) {
node* posNode = headNode->next;
node* posNodeFront = headNode;
if (posNode == NULL) {
printf("链表为空");
}
else {
while (posNode->data != data) {
posNode = posNode->next;
posNodeFront = posNodeFront->next;
if (posNode == NULL) {
printf("未找到可删除节点\n");
return;
}
}
posNodeFront->next = posNode->next;
free(posNode);
}
}
/* 函数名:printList
* 参数: list
* 功能: 打印链表数据
* 返回值:void
*/
void printList(node* headNode) {
node* pmove = headNode->next;
while (pmove) {
printf("%d ", pmove->data);
pmove = pmove->next;
}
}
上述代码是链表最简单的使用形式,其余复杂使用场合都可基于此代码进行添加;
感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!