C++ LIST链表

C++语言 码拜 9年前 (2016-04-13) 1239次浏览
在链表中定位的时候,若本人要找第j个元素

linklist p;
for(i=0;i<j;i++)
 p=p->next;

若本人这样写

linklist p;
for(i=0;i<j/5;i++)
p=p->next->next->next-next->next;
for(i*=5;i<j;i++)
p=p->next;

后一种写法是不是可以更快,原因是少了很多赋值。原因是总说在插入删除元素的时候,链表的遍历(要先找到插入点)较于数组的移位是很快的,但本人若不用上面所讲的后一种方法,也没见得有多快啊,

解决方案

40

引用:
Quote: 引用:
Quote: 引用:

应该是小于5的情况并不会执行第一个循环

你的第一个循环执行与否完全取决于j的大小,跟你链表里元素个数无关。本人只想说你用错误的代码得出了错误的结论。

linklist p;
for(i=0;i<j;i++)
 p=p->next;

这代码都没判断p是不是为空就一直next下去了。C++ LIST链表

好吧,但是这不是主要问题。本人只是在问这个本人后面那个方法的可行性。还有遍历链表与数组移位的速度可以相差多少

你那个很简单啊,就像本人刚才说的一样,从来不判断当前节点下面还有没有节点了就一直next下去。
关于数组和链表,本人前面也说了,各有优劣,用什么视情况而定,不要想着可以用数组取代链表。数组访问是快了,但是链表灵活啊。再有就是本人遇到的情况很少有说让删除第几个节点,而是让删除满足哪些条件的节点,所以你还要遍历来找啊。再说了,C++的容器里面还是有list和array,自有其道理啊C++ LIST链表

10

编译器的注意事项主要指你写代码的顺序不一定和编译之后的执行顺序相同。
例如
int a = 1;
char b = “a”;
有可能编译器会把它变成
char b = “a”;
int a = 1;
这点在多线程里面很重要。
还有现代编译器的优化能力灰常给力,所以LZ两种写法的效率差别可能微乎其微,甚至没有区别。
例如很多人说大块内存直接memcpy会比通过for循环一小块一小块一个一个copy效率要高,本人的测试结果是debug的情况下memcpy确实快不少,release的情况下两者是一样快的。所以不要把精力过于放在这种细节的优化上。事实上选择合适的容器就是最好的优化。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ LIST链表
喜欢 (0)
[1034331897@qq.com]
分享 (0)