在C++中搜索双向循环链表中的元素

在c++中搜索双向循环链表中的元素

给定一个双向循环链表和一个关键字,我们需要在链表中搜索关键字,并在找到时给出适当的消息。假设我们有一个具有特定字符的链表,并且我们需要在其中搜索一个元素。所以让我们从下面的链表开始 –

5 8 9 2 4

我们将使用4作为寻找给定问题解决方案的关键。双向链表没有固定的头部,所以我们将从任意节点开始,然后将该节点标记为头部,直到我们再次遇到这个头部,我们对链表进行线性搜索,并搜索关键字。

让我们看一些输入输出的场景 –

立即学习“C++免费学习笔记(深入)”;

假设我们有一个双向循环链表,其中有5个节点 3 4 5 6 7,要查找的元素是6。

Input =  3  4 5 6 7 key=6Output = Element found

登录后复制

让我们考虑另一种情况,即在双向循环链表中没有要搜索的元素。

Input =  1020304050 key=100Output = Element not found

登录后复制

算法

以下是接近的步骤。

实现一个链表,并通过在链表的每个节点中分配前向节点来传递值。

将节点的前一部分分配给最后一个节点的下一部分。

将节点的每个前一部分分配给节点的下一部分。

将关键元素传递给检查它是否存在于双向循环链表中的关键元素。

如果键存在于双向循环链表中,则返回true。

Else, it returns false.

Example

的中文翻译为:

示例

以下是在双向链表中执行搜索操作的C++实现代码:

#include #include using namespace std;class Node {   public:   int val;   Node *left, *right;   Node(int val) {      this->val = val;   }};bool solve(Node* root, int key) {   Node* copy = root;   do {      if(copy->val == key) return true;      copy = copy->right;   }while(copy!=root);   return false;}int main() {   // assigning the forward node in each node of the linked list   Node* phead = new Node(5);   phead->right = new Node(8);   phead->right->right = new Node(9);   phead->right->right->right = new Node(2);   phead->right->right->right->right = new Node(4);   phead->right->right->right->right->right = phead;    // assignment of the previous node in each node in the linked list    // assigning the previous of the head to the last element   phead->left = phead->right->right->right->right;   // assigning the left node in each node of the linked list   phead->right->left = phead;   phead->right->right->left = phead->right;   phead->right->right->right->left = phead->right->right;   phead->right->right->right->right->left = phead->right->right->right;   if(solve(phead, 4)) cout 

Output

Element present

登录后复制

Explanation

的中文翻译为:

解释

关键字4存在于双向链表中。

结论

在一个双向循环链表中,我们可以从任何位置开始,因为没有固定的头部和尾部。在上述方法中,我们有一个“头部”,它是一个伪头部,我们从这里开始搜索。上述算法的时间复杂度是O(n),因为是线性搜索。

以上就是在C++中搜索双向循环链表中的元素的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2584897.html

(0)
上一篇 2025年3月6日 14:55:11
下一篇 2025年3月6日 07:24:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • C++程序在数组中搜索特定值

    假设我们有一个数组“arr”,其中包含 n 个已排序的整数值。我们还得到了一个大小为 q 的数组“query”,我们必须告诉“query”中的值是否存在于给定数组“arr”中。如果查询中的值存在于 arr 中,则打印“存在”以及该值所在的位…

    2025年3月6日
    200
  • 使用给定的操作将数组缩减为一个元素

    给定一个整型变量 Number 作为输入。让我们考虑一个按排序顺序包含 1 到 Number 范围内的元素的数组。如果我们对数组执行操作,则每一步都会删除奇数位置的元素。那么目标就是执行这个操作N直到只剩下一个元素为止的次数。在末尾打印该元…

    2025年3月6日
    200
  • 通过对数组元素应用“+”和“*”操作可以得到的最小数字

    问题陈述 我们给出了一个长度为“N”的数组,其中包含一些正整数。另外,我们给出了长度为“N-1”的字符串,仅包含“*”和“+”字符,其中“*”是乘法运算符,“+”是加法运算符。我们要求对数组元素进行算术运算,以获得最小的正整数值。 示例 输…

    2025年3月6日
    200
  • 重新排列一个数组,使得每个奇数索引的元素都大于其前一个元素

    我们有一个正整数类型的数组,假设为arr[],大小任意。任务是重新排列数组,使得所有奇数索引位置的元素的值大于偶数索引位置的元素,并打印结果。 让我们看看各种输入输出情况: 输入 − int arr[] = {2, 1, 5, 4, 3, …

    2025年3月6日
    200
  • 对一个包含两种类型元素的数组进行排序

    有不同的方法来对只包含两种元素(即只有1和0)的数组进行排序。我们将讨论三种不同的方法来实现这个目标。第一种方法简单地使用预定义的sort()函数对给定的数组进行排序。第二种方法是计数排序方法,我们将计算0和1的数量,然后通过首先写入0的次…

    2025年3月6日
    200
  • 用C++编写一个程序,找出数组中所有元素对之间第k小的差值

    假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 k 个最小的差异数。索引从 0 开始,值 k 作为输入提供给我们。 因此,如果输入类似于numbers = {2, 6, 4, 8}, k = 2,那么输出将为…

    2025年3月6日
    100
  • 打印矩阵边界元素之和的C程序

    给定一个矩阵,我们需要打印矩阵的边界元素并显示它们的总和。 示例 参考下面给出的矩阵 – 给定矩阵 1 2 34 5 67 8 9 登录后复制 边界矩阵 1 2 34   67 8 9 登录后复制 边界元素之和:1 + 2 + …

    2025年3月6日
    200
  • C++程序填充数组的特定元素

    数组是一种同质数据结构,用于在连续的内存位置中保存相似类型的数据,可以使用基地址和索引进行访问。有很多不同的应用程序中,我们使用数组来保存适用于合适用途的数据。向数组中插入元素是一种繁琐的过程之一。我们可以通过循环从用户那里获取输入来插入它…

    2025年3月6日
    200
  • 广度优先搜索不使用队列

    广度 首先,Look (BFS) 是一种图表遍历计算,用于研究图表中广度运动中的中心。 BFS 的正常使用利用线路信息结构来跟踪即将到来的集线器。无论如何,可以想象在不使用明确线路的情况下利用其他信息结构来执行 BFS。 在没有线路的情况下…

    2025年3月6日
    200
  • 如何使用C++中的哈希搜索算法

    如何使用C++中的哈希搜索算法 哈希(Hash)搜索算法是一种高效的查找和存储技术,它将关键字通过哈希函数转化为一个固定长度的索引,然后利用这个索引在数据结构中进行搜索。在C++中,我们可以通过使用标准库中的哈希容器和哈希函数来实现哈希搜索…

    2025年3月6日
    200

发表回复

登录后才能评论