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 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始
廣告