作者yauhh (哟)
看板Programming
标题Re: [问题] linked list& array
时间Thu Mar 10 23:13:18 2011
※ 引述《Lordaeron (Terry)》之铭言:
: ※ 引述《adrianshum (Alien)》之铭言:
: : 就说你没在留心别人在说什麽.
: : 你可以把 array 或 linked list 理解成实作
好,不要吵. 就算这个千万不能想成那个,那也只不过是:
"直尺的边线很直"
"太阳从东边出来"
那一类的常识,不是吗?
想想看,为什麽大家一开始学程式,老师说array的取值时间是O(1),他们就一点
没有怀疑,可能也没有具体思考过?
为什麽array的任一元素取值是O(1)时间成本?
在此所讲的array是 C 的记忆体对应的基本 array.
为什麽取值是 O(1) ?
是因为这个array对应记忆体,而 array的底层---记忆体的取值都是用base和offset
来算,任何位置全都是几个加法求出来,然後去取值,所以是 O(1).
由这项基本知识,我们可以隐约知道, array 的随机存取便利并不是因为 C 语言本身
的特质,而只不过是几乎大部份的程式语言基础都在这一台机器上. 机器特性是这样,
顺着机器的特性, array 才有随机存取的特徵.
最初那位love谁网友所回应说:stack或queue要怎麽做 array?
是,的确很具体. 但是如果就因为这样,就认为任何语言全部都是这样,太不切实际.
事实上,跳到不同语言中,思考的基础不会一样. 若你只是因为站在 C 语言中
看到 array 就是这样子,就拒绝接受其他种语言的可能,拒绝思考用其他模型实作
array, 那未免太可怜.
这种思考方式只不过是打从你学程式一开始,就已经养成拒绝思考的习惯.
说穿了,很多人跟你一样,全都是时薪多少钱的程式匠而已,没什麽了不起.
与其留在圈圈之内,因为无足够资讯而说不,倒不如跨出圈圈,多看一点点东西,
然後有足够的资讯可以说不.
另外...
如果把随机存取的便利抽掉, array 的原型是什麽?
Array 就是一堆数字(索引)对应到一堆目标物,所以 array 的原型就是函数.
照电脑电路来看,可能是因为电力速度很快,所以从索引数字,base,offset算到目标元素
太快了. 但是,换作你用人力在真正的仓储系统找东西,给你一个编号,你还是找蛮久的,
所以随机存取可能不是必要. 不过,许多别的电脑语言也要实作 array, VM也需要实作
记忆空间,像 Java 的 heap. 在这时,所谓实体结构的坚持就很没有必要.
如你所想,你认为我用stack做出linked list其实是用linked list实作linked list,
显然是直接认定 stack 就是linked list. 但是这样想也很有缺陷,谁说stack就一定
是linked list了? 对一个抽象结构我们只关心介面,而不关心实作,你这样一下子
进去拆解里头的结构显然很乱. 同样的道理,用来做资料库索引的B-Tree,也直接想成
用array实作的树结构,那就回去慢慢分析所有的结构,被那堆资讯淹没.
我们只是需要那些抽象结构帮助好用好想而已,而不是强调抽象结构必须是怎麽样的
抽象结构,或不得是哪些实体结构.
------
最後回归正题: 根本不值得争论stack可不可以做 linked list.
以我回应原po的文字意思,是说, "这种问题很好,表示你有在动脑袋."
"如果你有在动脑袋,我建议你怎麽动脑袋比较好."
重点是在对原po的学习加以鼓励.
但是,你觉得我们真的要浪费时间争执 stack 和 queue 到底可以不可以做 array 和
linked list 吗? 等你争完了,会发现:一场空.
我随便举一个例子,例子可能很不完整很破烂,你却认真分析那个例子,
那麽谁是傻子?
你早就知道这没有意义了,不是吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.209.63
※ 编辑: yauhh 来自: 218.160.209.63 (03/10 23:37)
1F:→ Lordaeron:array/stack/queue 是处理资料的方式 114.45.226.61 03/14 09:38
2F:→ Lordaeron:Linked List 是资料存放的方法. 114.45.226.61 03/14 09:38
3F:→ Lordaeron:有人连基本的定义也不懂,给link 也不看 114.45.226.61 03/14 09:39
4F:→ Lordaeron:就爱在这扯在一起谈 114.45.226.61 03/14 09:39
5F:→ firejox:Link List/array/stack/queue都可以作为 210.60.107.233 03/14 17:22
6F:→ firejox:处理资料的方式和存放的方法 210.60.107.233 03/14 17:23
7F:→ firejox:後来却扯远了QQ 210.60.107.233 03/14 17:31
9F:→ Lordaeron:array/stack/queue都有operation 114.45.226.61 03/14 21:02
10F:→ Lordaeron:但linklist 没有 114.45.226.61 03/14 21:03
11F:推 arcred:呃..linked list删点加点都是operation啊 208.29.54.91 03/14 22:54
12F:→ arcred:不就资料不完整而已? @@ 208.29.54.91 03/14 22:54
13F:→ firejox:他们都属於data structure啊 ..... 210.60.107.233 03/15 18:43
14F:→ Lordaeron:定义就在哪,请自己看.118.168.236.204 03/16 00:45
15F:推 arcred:丢个网站就斩钉截铁说定义是你想的那样, 别 208.29.54.91 03/16 02:44
16F:→ arcred:人的话听不进去, 只能说: 你高兴就好 -o- 208.29.54.91 03/16 02:44
17F:→ Lordaeron:你最好比哪个网站的说明还要强罗. 1.161.212.24 03/16 21:01
18F:→ adrianshum:@arcred:如果有看过某人以前做的讨论, 61.238.156.185 03/17 15:45
19F:→ adrianshum:你会发觉这是常态. 所以我也懒得再说下 61.238.156.185 03/17 15:46
20F:→ adrianshum:去了 XD 放轻松就好. 61.238.156.185 03/17 15:46
21F:→ firejox:网站也是人写的啊 210.60.107.233 03/17 17:07
22F:→ firejox:又不是一定绝对的 210.60.107.233 03/17 17:49
23F:→ Lordaeron:当然不绝对, 因为你连基本的什麽叫定义220.136.226.179 03/17 20:20
24F:→ Lordaeron:都不知道, 更别说哪个网站是干嘛的220.136.226.179 03/17 20:21
25F:→ Lordaeron:而adrianshum的常态就是打嘴炮打了就跑220.136.226.179 03/17 20:22
26F:→ Lordaeron:如果对定义有问题,请你拿出你手边的220.136.226.179 03/17 20:22
27F:→ Lordaeron:DS/algorithm 的书来看.220.136.226.179 03/17 20:22
28F:→ Lordaeron:还是你比较强,自己定义出自己的stack220.136.226.179 03/17 20:24
29F:→ Lordaeron:和linklist像adrianshum哪样来玩文字220.136.226.179 03/17 20:25
30F:→ Lordaeron:哪就没什麽好讨论的了,因为你爽就好了220.136.226.179 03/17 20:25
31F:→ firejox:我觉得定义只是最简单的部份123.240.128.241 03/19 00:55
32F:→ firejox:因为不能再简化了,而延伸的是他的性质123.240.128.241 03/19 00:56
33F:→ firejox:有很多的操作都是由性质延伸的123.240.128.241 03/19 00:57
34F:→ firejox:所以我顶多只能对他描述罢了123.240.128.241 03/19 01:00
35F:→ firejox:重定义没有意义阿123.240.128.241 03/19 01:01
36F:→ firejox:array+stack凑一凑就很像vector了123.240.128.241 03/19 01:04
37F:→ firejox:因为用了性质去处理就有办法达到123.240.128.241 03/19 01:05
38F:→ Lordaeron:看来你是没有数学观念,更像没学过DS的人 1.161.197.54 03/19 14:48
39F:→ Lordaeron:哪样,现在连vector 都跑出来了. 1.161.197.54 03/19 14:48
40F:→ Lordaeron:如果真的没学过DS,请你去好好的学吧 1.161.197.54 03/19 14:50
41F:→ Lordaeron:不要再硬拗了,现在stack,LinkedList都 1.161.197.54 03/19 14:52
42F:→ Lordaeron:是早就有人定义好的了,是你们爱拗说 1.161.197.54 03/19 14:53
43F:→ Lordaeron:哪只是一个介面,B-Tree也是一个array的 1.161.197.54 03/19 14:54
44F:→ Lordaeron:这种烂文字游戏,又是谁在这自high呢? 1.161.197.54 03/19 14:54
45F:→ Lordaeron:你们有读过B-tree 的定义?还是你爱叫 1.161.197.54 03/19 14:55
46F:→ Lordaeron:它是B-Tree 它就是? 1.161.197.54 03/19 14:55
47F:→ firejox:我只是说"很像" 并没有说"相等"123.240.128.241 03/19 15:17
48F:→ firejox:性质相似并不是本质一样123.240.128.241 03/19 15:18
49F:→ firejox:打个比方 如果要把三角形相似说成全等123.240.128.241 03/19 15:42
50F:→ firejox:我只能无言了123.240.128.241 03/19 15:43
51F:→ Lordaeron:你真的无言就好了,因为只有你的DS中有118.160.168.253 03/20 09:11
52F:→ Lordaeron:Vector 这个东西,你还是回去看书吧118.160.168.253 03/20 09:11
53F:→ firejox:我愈来愈觉得谈话是处於平行的状态下123.240.128.241 03/20 19:12
54F:→ firejox:我觉得你还没听懂我说的话,完全误会了我123.240.128.241 03/20 19:31
55F:→ firejox:的意思123.240.128.241 03/20 19:31
56F:→ firejox:我没有在玩文字游戏,这种只是简单的逻辑123.240.128.241 03/20 19:33
57F:→ firejox:而已123.240.128.241 03/20 19:33
58F:→ Lordaeron:你的简单的逻辑就是,你没去读DS 的书 118.160.172.44 03/21 07:10
59F:→ Lordaeron:还在这拗,你还是回去读书吧 118.160.172.44 03/21 07:10
60F:→ Lordaeron:连什麽是定义都没搞清楚,书也不见, 就在 118.160.172.44 03/21 07:14
61F:→ Lordaeron:扯,网站是人写的, 又不一定 118.160.172.44 03/21 07:14
62F:→ Lordaeron:又说什麽延申性质. 118.160.172.44 03/21 07:15
63F:→ wfgh:看了一整串下来 只觉得Lord大没有接受别人看220.131.139.250 04/03 13:16
64F:→ wfgh:法的心态 人家强调是思考过程 唉 死读书的脑220.131.139.250 04/03 13:17