数据结构 链表【按位序查找指定数据域的元素】

按位序查找

由于链表是链式存储,所以如果我们要查找某一个结点,也需要借助头指针一个一个的遍历下去。

代码:

int LinkedListFind(LinkedList L, int x)
{
	Node* ret;
	int num;
	num = 1;
	L = L->next;
	while (L != NULL)
	{
		ret = L;
		if (ret->data == x)
		{
			cout << "找到第一个数据域为" << x << "的元素,他是链表中的第" << num << "个元素。" << endl;
			return num;
		}
		L = L->next;
		num++;
	}
	cout << "未找到该元素!" << endl;
	return -1;
}

首先,这个函数的返回类型是int,

我让返回值的结果是位序,如果没有查找到,就返回-1,因为位序不可能是负数。

还是和回收的想法一样,

建立一个临时指针变量ret,和L共同操纵链表。

还定义了一个计数器,初值为1,代表第x个元素位序。

我们先让L = L->next,

因为头结点的数据域没有意义。

然后进行一个while循环:

只要L不是NULL,就循环下去。

先让ret = L,

然后判断ret的数据域,

如果满足,直接返回位序;

如果不满足,让L指向下一个结点,

直到查找到了某个元素或者L到达了链表的尽头。

测试代码:

int main()
{
	cout << "请输入单链表的数据:";
	LinkedList list,start;
	list = LinkedListCreatT();
	//LinkedListDelete(list, 3);
	for (start = list->next; start != NULL; start = start->next)
	{
		cout << start->data<<endl;
	}
	LinkedListFind(list, 6);
	LinkedListFree(list);
	if (list == NULL)
	{
		cout << "链表已释放完毕" << endl;
	}
	return 0;
}

运行截图:

查找数据域为6的第一个元素

时间复杂度

由于不管是顺序存储还是随机存储,

我们只有头指针,

所以时间复杂度为O(n)。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值