Java程序搜索环形链表中的元素


什么是链表和环形链表?

链表是一种数据结构,其中每个节点包含两个部分,一个数据和一个地址路径。这些部分指向下一个节点,始终与前面的节点形成互连。基于此,环形链表是指最后一个节点与第一个节点互连,这就是此类链表被称为环形链表的原因。

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

环形链表如何工作及其应用?

环形链表的工作方法

对于环形链表,用户可以在该特定列表中的任何位置输入数据(在数组中,由于它是相邻内存,因此这是不可能的)。在此链表中,后向数据存储下一个节点的地址节点。这样,数据以循环方式相互指向,形成一个大小动态的循环链。这里的动态是指:内存分配将根据需要进行。

需要记住以下几点

  • 任何节点都可以作为环形链表的起点

  • 数据列表可以从任何随机节点遍历

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

环形链表的应用

  • 环形链表在我们个人电脑中使用,同时多个应用程序执行其任务。

  • 用于创建循环队列。

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

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

环形链表算法

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

  • 步骤1 - 根据给定值声明一个newNode()。

  • 步骤2 - 搜索空列表。

  • 步骤3 - 如果结果为空,则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。如果头的 position 为空,则整个列表为空。否则遍历整个列表。如果输出为零,则表示列表中未找到该元素。

示例

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在环形链表中搜索元素。

更新于: 2023年3月31日

318 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.