【讨论思考】可不可以不用pointer而实现一个linked list?

来源:互联网 发布:淘宝客购物车结算 编辑:程序博客网 时间:2024/05/22 13:09

今天momo瞎扯出来一个题目,能不能realize a linked list without using pointers in C++。

我这人比较细心,爱钻个牛角尖,于是就就着他这个扯淡题往下深究了一会。首先我觉得不可能不用pointer达到同样的效果,他说能,然后跟我扯,他的大体想法是用class,里面在定义个同样的class,这样就可以A.a.a.a......实现了singly linked list。

我乍一听觉得说不定还可行,于是帮他实现,但是发现不是这个样子的。

class A{  A(){};  ~A(){};  A a;  addNode(){     A a = new A(); //错误,因为new返回的是一个地址,前面应该是A * a了。  }}

可是如果是不用new, 直接定义A a, 这就掉入了一个无限循环的情况,结果overflow。


原因:

1,首先,class 和struct是同一回事除了access specifiers (private,public等),class本质上是struct的extension。

2,在struct中,要有两个东西,一个type,一个name。

struct A { int data; struct B;//struct 不是type,故这样使得A中只有一个int的data。 };struct B {  int number;};
其实这跟使用class是一样的,我们都是用 MySB sb; 而不是class sb。。

3, 如果成了这样,问题在于:

struct A { int data; struct A;// };//You can't have the same struct inside itself. That would be an infinitely recursive definition.

最后,解决方法:
还是可以不用pointer使用linked list的,就是用array,用index来起到链接的作用,替换pointer。
其实本质上一想,pointer就是一个链接作用,你声明了一个新的,怎么把两个连起来 link起来,这才是他的作用,要是不用他,那就得找个别的有链接这个作用的,array的index就是一个。但是毕竟pointer好用很方便,用array就只能有个最大的maximum size,不灵活,这就是trade-off啊。

0 0