使用C模拟面向对象实现如java的LinkedList集合(好精彩)

本文介绍如何使用C语言的结构体模拟面向对象编程中的类和对象概念,通过具体实例展示了如何实现类似Java LinkedList的功能。

我们都知道C是一个面向过程的语言,怎么模拟面向对象呢?

大家不要忘了结构体这东西,说起来和类还是有些相似的

首先我们得理解一下什么叫做链表,就像一队人排队一个连着一个,你找到第一个就能知道下一个

如果不清楚,大家可以去看看java的LinkedList集合

接下来就会带大家实现和LinkedList一模一样的集合

首先,为了好理解,先使用java编写再改编成C的版本

链表是一个一个节点连着一起的,所以我们首先创建一个实体类Node(其中使用到了泛型,如果有疑问可以查看我的另一编关于泛型的文章)

这个Value表示这个节点的值,由于我们做的是双链表,就有说自己有自己的上一个(up)和下一个(next)两个属性

为了模拟LinkedList 我们看看使用他的语法

既然LinkedList有这些方法,我们也创建一个自己的集合  叫做  MyLinkedList 

首先得有三个成员变量来记录

我们也使用到泛型,然后下面是每一个方法的具体实现

删除这里就像一排人排成一纵队,你准备要走了你就跟你前面的人说:"我要走了,你的后面的不再是我,是我后面这位"

然后再对后面的说:"你的前面不再是我,是我前面这位",其实就是赋2个值罢了

 

说了这么多,还没讲到C,接下来才是java转C的重要时刻:

注意对照着看,你会发现有点面向对面的样子,由于C没有泛型,所以我们模拟的集合只能装int类型的数据

首先是Node类,可是C没有类,但有结构体,就这样做;

看出其中的相同和不同了吗?initNode方法其实就等于类的构造方法,其中的malloc() 在C中就是开辟内存空间的意思

唯一的缺陷就是C没有封装这一特性,构造方法写在外面,而且没有private等修饰符来控制访问

接下来就是MyLinkedList的代码,这里C的结构体里就有方法了哦!

由于有些字是关键字不能用作函数名,所以对照java版有些不同,不过也很容易看出来

我们可以再结构体里放函数的指针,这样就能通过这个结构体调用方法啦,java版:list.save(1)  C版: list->save(1) 

因为刚才我们也说了,C没有封装的概念所以方法只能写在结构体外面,也因为这点所以没有this这种东西

所以我们的成员变量

只能写成 C的全局变量

这个是个缺陷,我们定义的List *list 可以当成this来用,而且no用来记录

然后是我们的构造方法,由于结构体里的成员不能初始化,只能写一个相当于构造方法的来初始化

实际上就是开辟空间,把对应的方法指针赋值到结构体成员里

下面提供添加的方法实现,其他的自己对照java版举一反三

最后对照java版和C版的调用方法,你会发现,完全一样,只是C没有泛型

java版:

C版:

 

转载于:https://www.cnblogs.com/nimendezaige/p/4914250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值