函数指针与单链表的爱恨情仇(一)

 

 

1、单链表的构造

        这里呢,主要是简单的实现一下单链表的基本操作方法,创建与遍历,其目的是想和函数指针一起使用,看看会有什么不同的地方!我们简单的看一下单链表节点的定义吧!

typedef int DataType;       //数据类型

typedef struct Node
{
    DataType data;      //数据域
    struct Node *next;      //指针域
}Node;

typedef struct Node *LinkList;      //结构体指针

2、函数指针的构造

      函数指针的构造,你需要弄懂什么是函数指针,什么又是指针函数呢?这里我怕你搞不懂,咱们先来瞅一瞅,看看你能否弄清楚呢?

       这里呢,有函数指针,指针函数,以及函数指针数组是如何定义的,以及一个例子,相信机智的应该能看懂少许的吧!那么,在我们这个用例中,我们只用到了函数指针这个概念,我们只需要为我们的APP赋予两个操作函数,然后我们对着APP实例就可调用相应的操作函数啦!

void CreateNode(LinkList *L, int num);
void DisplayNode(LinkList L);

 

3、APP测试用例

        首先我先来规划一下APP的结构体,首先我们为这个APP起个名字,叫做XXX,然后呢,我们为这个APP添加一些操作函数的函数指针,在实例化的时候,就会对应到相应的函数名称啦!后面直接就用咱们实例化的APP就可以操作自己对应的方法啦!废话不多说,咱们先看看APP的结构体长什么样子呢?

struct App
{
    char *name;     //应用名称
    void (*List_Create)(LinkList *L, int num);
    void (*List_Display)(LinkList L);
};

typedef struct App *App_Ptr;

        接下来就开始完成我们的测试函数啦!至于单链表的构造与遍历在之前的文章有讲过哦,不懂的小伙伴可以翻翻前面的文章哦(单链表的基本操作) ,好啦,我们一起看看咱们的测试函数怎么写吧!

int main()
{
    App_Ptr list_app = malloc(sizeof(struct App));
    int num = 10;
    LinkList me;
    list_app->name = "list";
    list_app->List_Create = CreateNode;
    list_app->List_Display = DisplayNode;

    list_app->List_Create(&me, num);
    list_app->List_Display(me);
    return 0;
}

        测试函数长这个样子,很简单的哦,感兴趣的小伙伴可以自行扩展哈!比如将单链表的插入、删除、更新、销毁等操作全部封装到APP里面,这样是不是就有点像面向对象编程的意思呢?哈哈!想让c也有对象,那可是要自己努力的啊!(做一个不恰当的比喻哈!像JAVA、C++、C#这些语言,都是有对象的哇,人家那是出身富贵家庭,所以人家那叫高富帅,自然不缺对象喽;然而咱们C呢,出身于农村家庭,但是你也想找对象,那么你只能自己努力,才能迎娶白富美哈!哈哈哈!菜哥开始乱讲话啦!) 

4、makefile的编写

      Makefile的编写就不多说了哈!都基本上是最基础的哈!直接给你们上代码喽!


BASEDIR = $(PWD)
SRCDIR = $(BASEDIR)/../function_point
BUILDDir = $(BASEDIR)/../Build
BINDIR = $(BASEDIR)/../bin

CFLAGS = -c -Wall -g
CC = gcc

OBJS = $(BUILDDir)/point.o

$(BINDIR)/point_test:$(OBJS)
	$(CC) $^  -o $@

$(BUILDDir)/%.o:$(SRCDIR)/%.c
	$(CC) $^ $(CFLAGS) -o $@


clean:
	$(RM) $(BUILDDir)/*.o  $(BINDIR)/point_test  -r

run:
	$(BINDIR)/point_test

5、总结

        最近菜哥也开始建立自己的gitHub仓库啦!会将文章中所讲的用例的源码全部放到github中,希望小伙伴们多多点赞,多多fork哈!加油,一个又菜又爱玩的博主!附上我github的链接哈!(菜哥的GitHub) 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值