C语言 链表(二) 对链表进行增删改查的操作

编译器是VS2019 基本上都有注释,需要学习的同学可以在编译器中进行调试,根据每一行进行的数据变化来对链表进行加深理解和学习。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

typedef struct MyList
{
    
    
	int num;      //数据域 若有其他数据继续添加就是了
	MyList* next; //指针域
}MyList;

//初始化链表,对链表插入原始数据
void Init_MyList(MyList* head)
{
    
    
	MyList* myList = head;
	for (size_t i = 0; i < 20; i++)
	{
    
    
		myList->next = (MyList*)malloc(sizeof(MyList));
		myList = myList->next;
		myList->num = i;
	}
	myList->next = NULL;
	myList = head;
}

//显示链表所有结点数据
void MyList_Show(MyList* head)
{
    
    
	MyList* myList = head;
	while (myList->next != NULL)
	{
    
    
		myList = myList->next;
		printf("%d,", myList->num);
	}
	printf("\n");
}


//寻找某一个结点
void MyList_Find(MyList* head, int goal)
{
    
    
	MyList* myList = head;

	while (myList->next != NULL)
	{
    
    
		if (myList->next->num == goal)
		{
    
    
			printf("查到了!!!数值为%d\n", myList->next->num);
			break;
		}
		myList = myList->next;
	}
}

//修改结点数据
void MyList_Modify(MyList* head, int goal, int newValue)
{
    
    
	MyList* myList = head;

	while (myList->next != NULL)
	{
    
    
		if (myList->next->num == goal)
		{
    
    
			myList->next->num = newValue;
			break;
		}
		myList = myList->next;
	}
}

//删除结点
void MyList_Remove(MyList* head, int goal)
{
    
    
	MyList* myList = head;
	MyList* delNode = NULL;

	while (myList->next != NULL)
	{
    
    
		if (myList->next->num == goal)
		{
    
    
			delNode = myList->next;
			//将要删除结点的前后节点相连
			myList->next = myList->next->next;

			free(delNode);
			break;
		}
		myList = myList->next;
	}
}

//后插法,在指定的节点后插入新的节点
void MyList_Add_Follow(MyList* head, int goal, MyList* insert)
{
    
    
	MyList* myList = head;
	//存放指定结点后一个结点
	MyList* tmp1 = (MyList*)malloc(sizeof(MyList));
	while (myList->next != NULL)
	{
    
    
		if (myList->next->num == goal)
		{
    
    
			//当后插位置为链表末尾,直接新增结点
			if (myList->next->next == NULL)
			{
    
    
				myList->next->next = (MyList*)malloc(sizeof(MyList));
				myList->next->next = insert;
				insert->next = NULL;
			}
			else
			{
    
    
				tmp1 = myList->next->next;
				myList->next->next = insert;
				insert->next = tmp1;
			}
			break;
		}
		myList = myList->next;
	}
}

//前插法,在指定的节点后插入新的节点
void MyList_Add_Ahead(MyList* head, int goal, MyList* insert)
{
    
    
	MyList* myList = head;
	//存放指定结点后一个结点
	MyList* tmp1 = (MyList*)malloc(sizeof(MyList));

	while (myList->next != NULL)
	{
    
    
		if (myList->next->num == goal)
		{
    
    
			tmp1 = myList->next;
			myList->next = insert;
			myList->next->next = tmp1;
			break;
		}
		myList = myList->next;
	}
}

int main()
{
    
    
	MyList* myList = (MyList*)malloc(sizeof(MyList));

	printf("/****************遍历结点*****************/\n");
	Init_MyList(myList);
	MyList_Show(myList);
	printf("/*****************************************/\n\n");


	printf("/*************前插法插入结点***************/\n");
	//在2前面加个100
	//要插入的结点
	MyList* insert = (MyList*)malloc(sizeof(MyList));
	//结点中存放的数据
	insert->num = 100;
	MyList_Add_Ahead(myList, 2, insert);
	MyList_Show(myList);
	printf("/*****************************************/\n\n");

	printf("/*************后插法插入结点***************/\n");
	//在2后面加个200
	//要插入的结点
	MyList* insert2 = (MyList*)malloc(sizeof(MyList));
	//结点中存放的数据
	insert2->num = 200;
	MyList_Add_Follow(myList, 2, insert2);
	MyList_Show(myList);
	printf("/*****************************************/\n\n");

	printf("/****************删除结点***************/\n");
	//删除2这个结点
	MyList_Remove(myList, 2);
	MyList_Show(myList);
	printf("/*****************************************/\n\n");

	printf("/*************修改结点数据***************/\n");
	//将3这个结点的数据3改为666
	MyList_Modify(myList, 3, 666);
	MyList_Show(myList);
	printf("/*****************************************/\n\n");

	printf("/*************查找结点数据***************/\n");
	//查找18这个结点
	MyList_Show(myList);
	MyList_Find(myList, 18);
	printf("/*****************************************/\n\n");

}




效果图:

在这里插入图片描述
源码下载链接

C语言 链表(三) 项目实战:学生管理系统单链表和文件操作通用框架

有意➕wechat a923510073 QQ 923510073 欢迎咨询进行学习上的问题交流。

猜你喜欢

转载自blog.csdn.net/weixin_44291381/article/details/112669724