使用棧反轉字串的 Swift 程式


棧是一種基於 LIFO(後進先出)原則的資料結構。它用於儲存和管理資料,其中最近新增的專案是第一個從棧中移除的專案。棧支援以下操作:

  • 入棧 - 用於將元素新增到棧中。因此,在 Swift 中,我們透過 append() 方法實現入棧操作。

語法

func push(_ items: T) {
   item.append(items)
}

在這裡,append() 函式將一個新元素壓入 item 棧中。

  • 出棧 - 用於從棧中移除元素。因此,在 Swift 中,我們透過 popLast() 方法實現出棧操作。

語法

func pop() -> T? {
   return item.popLast()
}

在這裡,popLast() 函式從棧中移除最近新增的元素。

  • isEmpty - 用於檢查棧是否為空。因此,在 Swift 中,我們使用 isEmpty 屬性來實現此操作。

語法

 func isEmpty() -> Bool {
   return item.isEmpty
}

在這裡,isEmpty 屬性用於在棧為空時返回 true。否則,如果棧不為空,則返回 false。

在 Swift 中,要反轉字串,我們將使用基於陣列和基於結構的棧實現。這是實現棧最常見和最直接的方法。

示例

Input: String = "Ram got first place"

Output: "ecalp tsrif tog maR"

在這裡,我們使用棧反轉輸入字串。

演算法

  • 步驟 1 - 建立一個接收輸入字串的函式。

  • 步驟 2 - 現在此函式首先使用陣列建立一個棧。

  • 步驟 3 - 將原始字串中的所有字元壓入棧中。

  • 步驟 4 - 建立一個空字串來儲存結果。

  • 步驟 5 - 現在開始從棧中彈出最近新增的字元,直到棧為空,並將它們儲存到一個新字串中。

  • 步驟 6 - 返回反轉後的字串。

  • 步驟 7 - 建立一個字串。

  • 步驟 8 - 呼叫函式並將輸入字串作為引數傳遞給它。

  • 步驟 9 - 顯示輸出。

示例 1

在以下 Swift 程式中,我們將使用棧保留一個字串。為此,我們建立了一個接收輸入字串的函式。然後它使用陣列實現建立了一個棧。然後它使用 append() 方法將給定字串的所有字元壓入棧中。

然後它建立一個空字串來儲存反轉後的字串。然後它使用 popLast() 函式從棧中彈出字元,同時棧不為空,並將它們附加到新的空字串中。最後,此函式使用棧返回反轉後的字串。

import Foundation
import Glibc

func reverseStringUsingStack(str: String) -> String {
   var myStack = [Character]()
    
   for char in str {
      myStack.append(char)
   }
    
   var reversedStr = ""
    
   while !myStack.isEmpty {
      reversedStr.append(myStack.popLast()!)
   }
   return reversedStr
}

let originalStr = "Learn String"
let resultantString = reverseStringUsingStack(str: originalStr)

print("Original String:", originalStr)
print("Reversed String:", resultantString)

輸出

Original String: Learn String
Reversed String: gnirtS nraeL

示例 2

在以下 Swift 程式中,我們將使用棧保留一個字串。因此,我們使用基於結構的實現來實現棧。在這裡,我們定義了一個帶有 push、pop 和 isEmpty 方法的結構。然後建立一個函式,在其中我們建立一個棧結構的例項並將輸入字串的所有字元壓入棧中,然後以相反的順序彈出它們以建立反轉後的字串。

import Foundation
import Glibc

// Implementing stack using structure
struct myStack<T> {
   private var item = [T]()
    
   mutating func push(_ items: T) {
      item.append(items)
   }
    
   mutating func pop() -> T? {
      return item.popLast()
   }
    
   func isEmpty() -> Bool {
      return item.isEmpty
   }
}

func reverseString(inputStr: String) -> String {
   var stack = myStack<Character>()
    
   for c in inputStr {
      stack.push(c)
   }
    
   var resultantStr = ""
    
   while !stack.isEmpty() {
      if let c = stack.pop() {
         resultantStr.append(c)
      }
   } 
   return resultantStr
}

let Str = "My cas color is green"
let reversedString = reverseString(inputStr: Str)

print("Input String is: \(Str)")
print("Reversed String is: \(reversedString)")

輸出

Input String is: My cas color is green
Reversed String is: neerg si roloc sac yM

結論

這就是我們如何使用棧反轉字串。儘管 Swift 不支援任何內建的棧資料結構,但我們仍然可以透過多種方式實現棧,例如連結列表、結構、類、陣列等。在所有這些方法中,實現棧最簡單和最直接的方法是陣列。

更新於: 2023年6月16日

919 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告