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 次浏览

开启您的 职业生涯

完成课程获得认证

开始学习
广告