Я пытаюсь реализовать тип коллекции Queue на платформе Swift. У меня возникли проблемы с функциями просмотра, опроса и предложения. Когда я пытаюсь использовать эти функции в своем коде, он терпит неудачу. У вас есть какой-нибудь совет или настоящий алгоритм?Реализация очереди в языке Swift
import Foundation
class Node<T> {
var value: T? = nil
var next: Node<T>? = nil
var prev: Node<T>? = nil
init() {
}
init(value: T) {
self.value = value
}
}
class Queue<T> {
var count: Int = 0
var head: Node<T> = Node<T>()
var tail: Node<T> = Node<T>()
var currentNode : Node<T> = Node<T>()
init() {
}
func isEmpty() -> Bool {
return self.count == 0
}
func next(index:Int) -> T? {
if isEmpty() {
return nil
} else if self.count == 1 {
var temp: Node<T> = currentNode
return temp.value
} else if index == self.count{
return currentNode.value
}else {
var temp: Node<T> = currentNode
currentNode = currentNode.next!
return temp.value
}
}
func setCurrentNode(){
currentNode = head
}
func enQueue(key: T) {
var node = Node<T>(value: key)
if self.isEmpty() {
self.head = node
self.tail = node
} else {
node.next = self.head
self.head.prev = node
self.head = node
}
self.count++
}
func deQueue() -> T? {
if self.isEmpty() {
return nil
} else if self.count == 1 {
var temp: Node<T> = self.tail
self.count--
return temp.value
} else {
var temp: Node<T> = self.tail
self.tail = self.tail.prev!
self.count--
return temp.value
}
}
//retrieve the top most item
func peek() -> T? {
if isEmpty() {
return nil
}
return head.value!
}
func poll() -> T? {
if isEmpty() {
return nil
}else{
var temp:T = head.value!
deQueue()
return temp
}
}
func offer(var key:T)->Bool{
var status:Bool = false;
self.enQueue(key)
status = true
return status
}
}
Я думаю, вы должны быть более конкретными, когда вы говорите, у вас есть * некоторые проблемы * и * он терпит неудачу *. Неожиданные результаты, исключения времени выполнения, ... – Antonio
@ Антонио вы правы. основная проблема заключается в том, что я считаю. Особенно популярность и предложение algoritm дают ноль, и приложение терпит неудачу. Все они являются общими исключениями, я не мог понять это – gokhangokce
Я предлагаю вам поставить некоторые точки останова и потратить некоторое время на отладку - и я рекомендую написать несколько тестов, начиная с очень простых тестов (таких как длина тестирования для пустой очереди) и постепенно увеличивая их сложность. – Antonio