软件开发中常用数据结构介绍:C语言链表

工作之余来写写C语言相关知识,以免忘记。今天就来聊聊C语言链表,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。

学习过程中如有任何疑问,可底下评论!

如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!

提起链表,相信大家都很熟悉,无非就是数据域和指针域的相关操作,这里不多说,直接上代码;

#include 
#include 

/******************链表结构体变量定义******************/
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;
	}
}

上述代码是链表最简单的使用形式,其余复杂使用场合都可基于此代码进行添加;

感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!

你可能感兴趣的:(嵌入式C语言,数据结构,c语言,链表,开发语言)