首页  >  文章  >  Java  >  Java程序:在循环链表中搜索元素

Java程序:在循环链表中搜索元素

王林
王林转载
2023-09-11 11:45:04761浏览

Java程序:在循环链表中搜索元素

什么是喜欢列表和循环链表?

链表是一种数据结构,其中每个节点都包含两部分,数据和地址路径。这些部分指向下一个节点,该节点始终与先前的节点创建互连。基于此,循环链表是最后一个节点与第一个节点有内部链接,这就是这种类型的链表称为循环链表。

在Java环境中,当我们查找元素循环链表时,需要在链表中创建一个临时节点来指向。这样我们还需要声明两个变量。它们是曲目索引和曲目搜索。如果 Temp 节点在起始点为空,那么遍历列表就很重要,因为此时它不包含任何项目。

循环链表的工作原理及其应用?

循环链表的工作方法

对于循环链表,用户可以在该特定列表中的任何位置输入数据(在不可能是相邻存储器的数组中)。在这个链表中,向后数据存储的是下一个的地址节点。通过这种方式,数据以循环方式相互指向,形成大小动态的循环链。这里动态的意思是;内存分配将根据要求完成。

需要记住以下几点

  • 任意节点都可以作为循环链表的起点

  • 数据列表可以从任意随机节点开始遍历

  • 这里没有第一个节点的指针

循环链表的应用

  • 我们个人计算机中使用的循环链表是同时执行其任务的多个应用程序。

  • 用于创建循环队列。

  • 在多人游戏中循环切换玩家。

  • 用于 Word 或 Photoshop 应用程序中的撤消功能。

循环链表算法

循环链表的实现和操作方法非常简单。有两个特征,data 和 next。要定义另一个循环链表,我们可以使用:头和尾。新节点始终由“当前节点”定义,它将指向链表的头部。每次迭代后点都会移动到下一个节点。

  • 第 1 步 - 通过给定值声明一个 newNode()。

  • 第 2 步 - 搜索无效列表。

  • 步骤 3 − 如果结果为 void,则 head = newNode()。

  • 步骤 4 - 否则,将节点指针定义为 temp 并初始化。

循环链表的语法

struct Node {int dataset; struct Node * to next;};

在此语法中,列表中存在的每个节点都有数据和指针部分,用于在接收新输入时创建新节点。

我们可以使用以下方法来搜索特定列表中的元素 -

  • 通过将新数据添加到特定列表中

  • 通过搜索特定循环链表中的元素

通过将新数据添加到特定的链接列表

在新节点中添加一些新元素有助于从循环链表中找出某些特定数据。首先,您需要将一个新节点插入到分配的内存中。存储新数据后,可以将下一个数据更改到新节点。您还可以在节点末尾存储其他数据并应用遍历。

示例

public class SearchNodearb {   
   public class Nodefind{  
      int datafall;  
      Nodefind next;  
      public Nodefind(int datafall) {  
         this.datafall = datafall;  
      }  
   }  
   public Nodefind head = null;  
   public Nodefind tail = null;  
   public void add(int datafall){   
      Nodefind newNode1 = new Nodefind(datafall);      
      if(head == null) {        
         head = newNode1;  
         tail = newNode1;  
         newNode1.next = head;  
      }  
      else {     
         tail.next = newNode1;
            
         tail = newNode1;         
         tail.next = head;  
      }  
   }  
   public void search(int element) {  
      Nodefind current = head;  
      int i = 1;  
      boolean flagon = false;  
              
      if(head == null) {  
         System.out.println("List is totally Void! So Sad!");  
      }  
      else {  
         do{  
            if(current.datafall ==  element) {  
               flagon = true;  
               break;  
            }  
            current = current.next;  
            i++;  
         }while(current != head);  
         if(flagon)  
         System.out.println("Element is present in the list with a position tag : " + i);  
         else  
         System.out.println("Element is not present in the list");  
      }  
   }  
   public static void main(String[] args) {  
      SearchNodearb cl1 = new SearchNodearb();            
      cl1.add(1000);  
      cl1.add(5000);  
      cl1.add(3);  
      cl1.add(4);  
      cl1.search(2);  
      cl1.search(5000);  
   }  
} 

输出

Element is not present in the list
Element is present in the list with a position tag: 2

通过在特定循环链表中搜索元素

首先,您需要初始化一个节点,然后计数器 f=0。如果头的位置为空,则整个列表为空。否则遍历完整列表。如果输出为零,则在列表中找不到该元素。

示例

public class search {
   class Nodeval {
      int data;
      Nodeval next;
      public Nodeval(int data) { this.data = data; }
   }
   public Nodeval head = null;
   public Nodeval tempo = null;
   public void addNode2001(int data){
      Nodeval new10 = new Nodeval(data);
      if (head == null) {
         head = new10;
      }
      else {
         tempo.next = new10;
      }
      tempo = new10;
      tempo.next = head;
   }
   public void find(int key){
      Nodeval temp07 = head;     
      int f = 0;
      if (head == null) {
         System.out.println("List is empty, Please Fill It ASAP");
      }
      else {
         do {
            if (temp07.data == key) {
               System.out.println(
               "element is present in the running list");
               f = 1;
               break;
            }
            temp07 = temp07.next;
         } while (temp07 != head);
         if (f == 0) {
            System.out.println(
            "element is not present here, I am sorry!");
         }
      }
   }
   public static void main(String[] args){
      search srdd = new search();
      srdd.addNode2001(5);
      srdd.addNode2001(4);
      srdd.addNode2001(3);
      srdd.addNode2001(2);
      srdd.find(2);
      srdd.find(6);
   }
} 

输出

element is present in the running list
element is not present here, I am sorry!

结论

使用循环链表有很多优点和缺点。最重要的优点是可以从链表的任意节点发起遍历操作。不需要使用 NULL,对于 CPU 循环调度非常有用。但最大的缺点是,如果列表没有以正确的编程方式编写,则可能会变成无限循环,服务器可能会挂起。通过这篇文章,我们学习了如何使用Java在循环链表中查找元素。

以上是Java程序:在循环链表中搜索元素的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除