主题:[原创]matlab7.0版本中实现指链表,树等数据结构
似乎已经很久没来过这里了,一直都忙着美国数学建模,刚刚才结束,感觉结果不尽人意,但这种大型的比赛还是让我学到了很多,其中觉得最有用的就是这个在matlab7.0中实现指针的方法。指针对于实现数据结构而言是非常地重要的,可惜matlab却偏偏没设(2008a版本后就增加这个功能了,但08版本的实在太庞大,我机子上跑起来像头牛一样),于是我自己写了个静态链表建立的算法,包括建立初始化指针空间的函数,管理指针的函数(分配指针函数和释放指针的函数),整体上和c里的差不多。只是由于matlab函数只能传值传递参数的限制,操作起来略麻烦点稍有点不同。
建立初始化链表空间:
[L,Maintain]=InitList(N,'a1','a2','a3',......);
例子:现在需要建立一树,每个节点包含数据域,左指针域,和右指针域,估计需要的空间是100
[L,Maintain]=InitList(100,'Lcur','Rcur');
这样就得到一个主链表空间L,和一个维护数组Maintain。
L =
1x100 struct array with fields:
data
Lcur
Rcur
分配指针:
[P,Maintain]=Malloc(Maintain);
这里P就是分配到的指针号,注意一定要返回Maintain这个维护数组(因为matlab函数只能传值传递参数的原因)。然后就可操作了,比如L(P).data=1,赋值操作,和c里的P->data=1差不多意思。
释放指针:
Maintain = Free(Maintain,P)
在这里P是要释放的指针
有了这几个函数,就能凑合的用了,构建小规模的链表,树等数据结构应该没问题,当然和真的指针还差很远,有点浪费内存。大家有什么好的建议提提吧。
建立初始化链表空间:
[L,Maintain]=InitList(N,'a1','a2','a3',......);
例子:现在需要建立一树,每个节点包含数据域,左指针域,和右指针域,估计需要的空间是100
[L,Maintain]=InitList(100,'Lcur','Rcur');
这样就得到一个主链表空间L,和一个维护数组Maintain。
L =
1x100 struct array with fields:
data
Lcur
Rcur
分配指针:
[P,Maintain]=Malloc(Maintain);
这里P就是分配到的指针号,注意一定要返回Maintain这个维护数组(因为matlab函数只能传值传递参数的原因)。然后就可操作了,比如L(P).data=1,赋值操作,和c里的P->data=1差不多意思。
释放指针:
Maintain = Free(Maintain,P)
在这里P是要释放的指针
有了这几个函数,就能凑合的用了,构建小规模的链表,树等数据结构应该没问题,当然和真的指针还差很远,有点浪费内存。大家有什么好的建议提提吧。