写了个链表,代码在下面:
https://github.com/tioover/c-study/blob/master/linklist.h
https://github.com/tioover/c-study/blob/master/linklist.c
应该没有人有闲心看我的代码,基本上链表的结构是这样的
List 结构体类似一般实现中的头节点,里面有节点总数和首末节点的指针。
每一个Node里面有自己的前驱和后继的指针以及连接到List结构体的指针。
问题是这样的,如果我要查询第42个节点,那必须从第一个节点开始不断用指针读取到下一个节点,直到数到42,但如果需要的是42^42或者更大的元素呢?那还是必须老老实实的跳吧,当然因为有节点总数,如果是靠后的节点可以从后往前跳,但是如果在一个极大链表中中间位置的节点不是还是要花费很多时间吗?而普通的数组需要的仅仅是对第一个元素的地址做加法运算。
我现在的想法是这样的,对于大链表,建立一个索引数组,如果链表总数超过了索引数组,那么数组最后一项会指向下一个索引数组,但这种方法首先是不好适用各种情况,并且如果考虑到删除的话会很麻烦,还有就是不够简洁简单。
https://github.com/tioover/c-study/blob/master/linklist.h
https://github.com/tioover/c-study/blob/master/linklist.c
应该没有人有闲心看我的代码,基本上链表的结构是这样的
List 结构体类似一般实现中的头节点,里面有节点总数和首末节点的指针。
每一个Node里面有自己的前驱和后继的指针以及连接到List结构体的指针。
问题是这样的,如果我要查询第42个节点,那必须从第一个节点开始不断用指针读取到下一个节点,直到数到42,但如果需要的是42^42或者更大的元素呢?那还是必须老老实实的跳吧,当然因为有节点总数,如果是靠后的节点可以从后往前跳,但是如果在一个极大链表中中间位置的节点不是还是要花费很多时间吗?而普通的数组需要的仅仅是对第一个元素的地址做加法运算。
我现在的想法是这样的,对于大链表,建立一个索引数组,如果链表总数超过了索引数组,那么数组最后一项会指向下一个索引数组,但这种方法首先是不好适用各种情况,并且如果考虑到删除的话会很麻烦,还有就是不够简洁简单。