基于上一篇博客创建的链表,这里使用static局部变量巧妙地将时间复杂度由m*n转换成了m+n
static Position FindPosition(Position position, NodeElement element)
{
// static 将时间复杂度由m×n变成了m+n
static NodeElement index = 0;
while( position!=NULL && index!=element){
position = position->Next;
index++;
}
return position;
}
static void PrintLots(List l, List p)
{
struct timeval start, end;
float timeuse = 0.0;
gettimeofday(&start, NULL);
Position p1 = p;
Position l1 = l;
while(p1!=NULL){
// 因为链表是不连续空间,所以不能直接通过指针的运算来找到第几个元素
l1 = FindPosition(l1, p1->element);
if(l1!=NULL){
printf("find data is %d\n", l1->element);
}
p1 = p1->Next;
}
gettimeofday(&end, NULL);
timeuse = ((end.tv_sec - start.tv_sec)*1000000 + end.tv_usec - start.tv_usec)/1000;
printf("timeuse is %f\n", timeuse);
}
由于时间太短,根本统计不出来了
实现结果:
element is 0
element is 1
element is 2
element is 3
element is 4
element is 6
element is 0
element is 3
element is 4
element is 6
element is 8
element is 9
find data is 0
find data is 3
find data is 4
find data is 6
find data is 8