【讨论思考】可不可以不用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
- 【讨论思考】可不可以不用pointer而实现一个linked list?
- JS可不可以实现:改变地址栏地址而不跳转
- LeetCode[Linked List]: Copy List with Random Pointer
- Copy A Linked List With Next And Random Pointer
- Copy A Linked List With Next And Random Pointer
- list实现ALDS1_3_C;double Linked List
- Hibernate双向关联中常常用Set 而不用List
- 为什么Hibernate的OneToMany用Set集合而不用list
- 对单链(Single-Linked List)操作的思考
- 【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】
- 取出linked list中间一个元素返回
- 一个简单的linked list问题
- 复制双链表 Copy a linked list with next and arbit pointer
- 停止一个Web App而不用停止IIS
- Leetcode 206. Reverse Linked List cpp实现
- 单链表Singly Linked List之JAVA实现
- PAT1074:Reversing Linked List Java语言实现
- c++实现LeetCode142. Linked List Cycle II
- iOS开发之多媒体播放
- Linux利用GIMP截图
- Sum Root to Leaf Numbers
- Fedora VMware Workstation Kernel headers install
- 第一部分C语言入门 第一章 程序的基本概念
- 【讨论思考】可不可以不用pointer而实现一个linked list?
- Android AIDL proxy/stub 分析
- Balanced Binary Tree
- Android HAL 分析
- 在Java中用引号创建String对象和用构造函数的区别
- Solve Problem: “Unable to load realm info from SCDynamicStore” on Mac OS X Mavericks 10.9.1
- ASP.NET 页面中加添加用户控件的写法
- c#异步task示例分享(异步操作)
- linux输入输出重定向使用详解(收藏)