class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
var stack = IntegerStack()
var queue = MyQueue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.enqueue(4)
queue.enqueue(5)
queue.enqueue(6)
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
print(queue.dequeue())
}
}
struct MyQueue {
var stackA = IntegerStack()
var stackB = IntegerStack()
/// 入队
func enqueue(_ val : Int) -> Void {
stackA.push(val)
}
//出队
func dequeue() -> Int? {
shift()
return stackB.pop()
}
/// 交换栈数据
func shift() {
if stackB.isEmpty{
while (!stackA.isEmpty){
if let element = stackA.pop() {
stackB.push(element)
}
}
}
}
}
protocol Stack {
associatedtype Element
var isEmpty : Bool {get}
var size : Int {get}
//栈顶元素
var peek : Element?{get}
func push(_ newElement : Element)
func pop() -> Element?
}
class IntegerStack : Stack {
typealias Element = Int
var isEmpty: Bool{
return stack.isEmpty
}
var size: Element{
return stack.count
}
var peek: Element?{
return stack.last
}
func push(_ newElement: Element) {
stack.append(newElement)
}
func pop() -> Element? {
return stack.popLast()
}
var stack = [Element]()
}
网友评论