栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构】链表分类,定义,优势与缺陷,C语言实现单向链表代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构】链表分类,定义,优势与缺陷,C语言实现单向链表代码


LinkList.h(头文件,定义接口):

#pragma once  //防止头文件重复包含
#define _CRT_SECURE_NO_WARNINGS
#include 
#include
#include
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

	struct LinkNode
	{
		int data;
		struct LinkNode *next;
	};

	//初始化链表
	struct LinkNode* Init_LinkList();
	//在值为oldvalue的后面插入一个新的数据newvalue
	void InsertByValue_LinkList(struct LinkNode *header,int oldValue,int newValue);
	//删除值为val的结点
	void RemoveByValue_LinkList(struct LinkNode* header, int delValue);
	//遍历
	void Foreach_LinkList(struct LinkNode *header);
	//销毁链表
	void Destory_LinkList(struct LinkNode * header);
	//清空链表
	void Clear_LinkList(struct LinkNode *header);
#ifdef __cplusplus
}
#endif

LinkList.c(实现接口):

#include"LinkList.h"



struct LinkNode* Init_LinkList()
{
	struct LinkNode *header = malloc(sizeof(struct LinkNode));
	header->data = -1;
	header->next = NULL;
	int val = -1;
	struct LinkNode *pRear = header;

	while  (true)
	{
		printf("输入插入的数据:n");
		scanf("%d", &val);
		if (val == -1)
		{
			break;
		}
		struct LinkNode *newNode = malloc(sizeof(struct LinkNode));
		newNode->data = val;
		newNode->next = NULL;
		pRear->next = newNode;
		pRear = newNode;
	}
	return header;
}
//在值为oldvalue的后面插入一个新的数据newvalue
void InsertByValue_LinkList(struct LinkNode* header, int oldValue, int newValue)
{
	while (header==NULL)
	{
		return;
	}
	struct LinkNode* pPrev = header;
	struct LinkNode* pCurrent = pPrev->next;
	while (pCurrent!=NULL)
	{
		if (pCurrent->data==oldValue)
		{
			break;
		}
		pPrev = pCurrent;
		pCurrent = pCurrent->next;
	}
#if 0   
	if (pCurrent == NULL)   //数据没找到	
	{
		return;
	}
#endif // 0

	struct LinkNode* newNode = malloc(sizeof(struct LinkNode));
	newNode->data = newValue;
	newNode->next = NULL;
	pPrev->next = newNode;
	newNode->next = pCurrent;
}
void RemoveByValue_LinkList(struct LinkNode* header, int delValue)
{
	if (header==NULL)
	{
		return;
	}
	struct LinkNode* pPrev = header;
	struct LinkNode* pCurrent = pPrev->next;
	while (pCurrent!=NULL)
	{
		if (pCurrent->data==delValue)
		{
			break;
		}
		pPrev = pCurrent;
		pCurrent = pCurrent->next;  //移动俩指针
	}
	if (pCurrent==NULL)
	{
		return;
	}
	pPrev->next = pCurrent->next;
	free(pCurrent);
	pCurrent = NULL;
}
void Foreach_LinkList(struct LinkNode* header)
{
	if (header==NULL)
	{
		return;
	}
	struct LinkNode* pCurrent = header->next;
	while (pCurrent!=NULL)
	{
		printf("% d", pCurrent->data);
		pCurrent = pCurrent->next;
	}
}
void Destory_LinkList(struct LinkNode* header)
{
	if (header==NULL)
	{
		return;
	}
	struct LinkNode* pCurrent = header;
	while (pCurrent!=NULL)
	{
		struct LinkNode* pNext = pCurrent->next;
		printf("%d结点被销毁n", pCurrent->data);
		free(pCurrent);
		pCurrent = pNext;
	}


}
void Clear_LinkList(struct LinkNode* header)
{
	if (header==NULL)
	{
		return;
	}
	//辅助指针变量
	struct LinkNode *pCurrent = header->next;
	while (pCurrent!=NULL)
	{
		struct LinkNode* pNext = pCurrent->next;
		free(pCurrent);
		pCurrent = pNext;
	}
	header->next = NULL;
}

TestLinkList.c(测试接口):

	#include"LinkList.h"

void test()
{
	struct LinkNode* header = Init_LinkList();  //输入100 200 300 400 500 600
	Foreach_LinkList(header);
	InsertByValue_LinkList(header, 300, 66666666);  //插入后的
	printf("n----------n");
	Foreach_LinkList(header);
	printf("n----------n");
	Clear_LinkList(header);    //清空后
	Foreach_LinkList(header);


	printf("n----------n");
	InsertByValue_LinkList(header, 0, 111);
	InsertByValue_LinkList(header, 0, 222);
	InsertByValue_LinkList(header, 0, 333);
	InsertByValue_LinkList(header, 0, 444);
	InsertByValue_LinkList(header, 0, 555);
	printf("n----------n");
	Foreach_LinkList(header);
	printf("n----------n");
	RemoveByValue_LinkList(header, 444);
	Foreach_LinkList(header);
	Destory_LinkList(header);

}


int main()
{
	test();
	system("pause");
	return EXIT_SUCCESS;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971327.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号