Swift 實現連結串列程式


連結串列是一種用於儲存和管理資料的資料結構。它是一個節點序列,每個節點包含兩部分:資料和指向序列中下一個節點的引用。使用連結串列,我們可以輕鬆地插入或刪除列表中任何位置的元素。

連結串列有兩種型別:

  • 單鏈表 - 它只能單向移動,因為每個節點都只包含指向下一個節點的引用。最後一個節點的 next 指標指向 NULL。

  • 雙向連結串列 - 它可以雙向移動,因為每個節點都包含指向下一個節點和上一個節點的引用。

雖然 Swift 不支援任何內建的連結串列資料結構,但我們仍然可以使用類或結構來實現連結串列。您可以根據需要使用任何方法來實現連結串列。在本文中,我們將討論如何在 Swift 中建立一個單鏈表。

連結串列支援以下操作:

  • 刪除 - 用於從連結串列中刪除一個節點。

  • 插入 - 用於在連結串列中插入新元素。

  • 顯示 - 用於列印連結串列。

  • 搜尋 - 用於在給定的連結串列中查詢元素。

示例

在下面的 Swift 程式中,我們將使用類來實現單鏈表。在這裡,我們將使用一個類建立一個單個節點,該節點包含一個值和下一個節點的引用。然後,我們將建立一個 LinkedList 類來管理連結串列並提供插入新元素和顯示連結串列的方法。然後,我們將建立一個 LinkedList 類的例項來向 LinkedList 新增新元素。最後,透過呼叫 LinkedList 類的 display 方法來顯示輸出。

import Foundation
import Glibc

class node<X> {
   var element: X
   var next: node<X>?
    
   init(element: X) {
       self.element = element
       self.next = nil
   }
}

// Implementing linkedlist using class
class linkedList<X> 
{
  var head: node<X>?
    
  var First: node<X>? {
      return head
   }
    
   var Last: node<X>? {
      if var n = head {
          while let nextVal = n.next {
              n = nextVal
          }
          return n
      }
      return nil
  }
    
   // Adding new elements
   func appendElement(item: X) 
   {
      let nNode = node(element: item)
      if let endNode = Last {
          endNode.next = nNode
      } else {
          head = nNode
      }
   }
    
   // Displaying linked list
   func showList() 
   {
      var cNode = head
      while cNode != nil {
          print("\(cNode!.element) ->", terminator: "")
          cNode = cNode?.next
      }
      print("nil")
   }
}

let myLinkedList = linkedList<Int>()
myLinkedList.appendElement(item: 34)
myLinkedList.appendElement(item: 12)
myLinkedList.appendElement(item: 84)
myLinkedList.appendElement(item: 92)

print("LinkedList elements are:")
myLinkedList.showList()

輸出

LinkedList elements are:
34 ->12 ->84 ->92 ->nil

結論

這就是我們如何實現連結串列的方法。連結串列對於動態大小、插入、刪除、實現圖、堆疊和佇列等非常有用。連結串列資料結構的靈活性和效率使其在管理資料和有效地實現某些特定演算法方面更加通用。它也用於實現雜湊表。

更新於:2023年6月13日

911 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.