【链表】由一个链表元素指定另一个链表对应位置的元素输出,计算运行时间

基于上一篇博客创建的链表,这里使用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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值