C语言 链表(一) 创建一个简单的链表

C语言 创建一个简单的链表

下载链接

用面向对象的思维使用C语言。
在进行链表学习前,还需要各位同学补充下函数指针的相关概念哦。

/*
->首先编写头文件MyListDemo.h,我们定义了一个链表的结构体
->里面简单封装了链表自身的属性(存放的数据,指向下一个链表的指针)
->以及链表的简单功能(添加数据和展示数据)
*/
#pragma once
#include <stdio.h>
#include <malloc.h>

typedef struct MyList
{
    
    
	int m_num;           //链表中需要存放的数据
	MyList* m_next;      //指向链表
	//下面定义了两个函数指针,指向链表功能(增加和展示数据)函数
	void (*MyListAdd)(MyList** myList, int data);
	void (*MyListShow)(MyList* head);
}MyList;

//定义了两个功能函数
void Add(MyList** myList, int data);
//MyList* MyListInsert2(MyList* myList, int data);
void Show(MyList* head);

//给函数指针赋值
MyList List = {
    
    
	.MyListAdd = Add,
	.MyListShow = Show,
};

完成上一步后,在c文件中,我们开始进行功能函数的编写。

#include "MyListDemo.h"

int main()
{
    
    
	//定义一个链表变量(对象)并为其申请空间
	MyList* myList = (MyList*) malloc(sizeof(MyList));
	//我们需要记录下链表头的位置,因为后面若遍历到表尾需要根据这位置遍历回表头
	MyList* head = myList;
	//传入功能函数的地址,接下来我们就可以编写我们的功能函数拉
	myList->MyListAdd =Add;
	myList->MyListShow = Show;

	for(int i=0;i<10;i++)
	{
    
     
		List.MyListAdd(&myList, i);
	}
	
	myList->m_next = NULL;//当链表遍历到最后,我们需要对下一个结点地址赋为NULL值,以便后续使用
						 //因为后续使用中,判断链表是否为结尾的情况就是最后的结点为NULL值
	List.MyListShow(head);
}

//增添一个节点
void Add(MyList** myList2, int data)
{
    
    
	(*myList2)->m_num = data;//数据赋值
	(*myList2)->m_next= (MyList*)malloc(sizeof(MyList));//为下一个节点申请空间
	(*myList2) = (*myList2)->m_next;//关键是理解这步,从当前节点移动到下个节点,那么后面的"当前结点"就是结点next了
	//return myList2;
}

//展示数据
void Show(MyList* head)
{
    
    
	//当下一个结点不为空的话,就一直向后遍历数据
	while (head->m_next != NULL)
	{
    
    
		printf("num:%d\r\n", head->m_num);
		//移动到下一个结点
		head=head->m_next;
	}
}

最后验证功能,遍历成功

在这里插入图片描述
C语言 链表(二) 对链表进行增删改查的操作

承接C语言设计康难度而定只需1北左右。 有意➕微信 a923510073 QQ 923510073 欢迎咨询进行学习上的问题交流。

猜你喜欢

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