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语言设计康难度而定只需1北左右。 有意➕微信 a923510073 QQ 923510073 欢迎咨询进行学习上的问题交流。