比如一个链表,还有树和图之类的要借助于指针或者引用来实现的数据结构,在c#里面怎么实现呢?
在c#里面结构体是一种值类型,所以不能使用引用来控制结构体,那样的话,好像很多经典的数据结构思想方法都不能在C#里面运用啊。。。 比如一个链表,还有树和图之类的要借助于指针或者引用来实现的数据结构,在c#里面怎么实现呢?
问题点数:20、回复次数:9Top
1 楼feels30000(船长)回复于 2006-05-01 21:02:09 得分 0
我觉得你想和C 一样的操作也可以用保护代码,但大多数的数据结构还是可以实现的,可能效率不是这么高Top
2 楼tczyp()回复于 2006-05-01 22:25:14 得分 0
但是像链表,树之类的数据结构是非常常用的...
难道C#对这么常用的数据结构都不提供一种方便的方法吗?Top
3 楼ivorstar(单击此处留言)回复于 2006-05-01 22:42:16 得分 20
比如你定义一个链表
class ListNode
{
private ListNode m_next;
public ListNode Next{get{....}; set{....}; }
//写成属性或者干脆写成公有成员变量,不是一样么,都可以用.Next来得到啊,不过效率差距很大了;都是引用类型,觉得跟指针操作差别不大
}
如果非要用指针的话只能是unsafe的了。Top
4 楼tczyp()回复于 2006-05-01 23:15:59 得分 0
哦,类是引用类型的,这倒是可以实现链表。效率差距很大?为什么这样说?既然是引用,那么本质上应该也是一个指针吧?只不过该指针是一个已经被绑定了的指针吧?Top
5 楼tczyp()回复于 2006-05-03 01:09:49 得分 0
???Top
6 楼tczyp()回复于 2006-05-03 01:16:32 得分 0
public Node[] Neighbours = { null, null, null, null };
我见到过这样一种定义方法,不知道它的意思是不是定义一个Node类型的指针数组?Top
7 楼ivorstar(单击此处留言)回复于 2006-05-03 10:26:16 得分 0
效率的差距因为IL毕竟不是本地代码,不被CPU直接执行^_^
Node[]那个不是指针数组吧,只不过是把数组里的每一个Node初始化为null,也就是在托管堆(如果Node是class的话)里都是二进制的0Top
8 楼shrinerain(圣影雨)回复于 2006-05-03 10:53:56 得分 0
数据结构,算法与语言无关,实际上很多经典数据结构算法都是Pascal写的,甚至SmallTalk
如果你想用C#描述
差别只是在C++中是Node=Node->Next
改成C#中的Node=Node.Next
引用本质是类型安全的指针
如果你不明白,可以买本 数据结构(Java语言描述) 就行了。
Top
9 楼tczyp()回复于 2006-05-03 11:42:03 得分 0
那么现在我还有一点不太明白,就是c#里面的结构体为什么要设定为值类型?既然结构体是一个简化了的类(轻量级的类),为什么设定为引用类型?
另外,引用本质上也是指针,那么速度上来说应该影响不大吧~~Top




