Стекове и опашки

Стек

Стекът е структура от данни "Последен влязъл, първи излязъл". Представете си огромна купчина тухли. Имате задачата да вземете тези тухли и да ги поставите в кутии за изпращане. И така, гледайки тази огромна купчина, започваме ли да дърпаме тухли от дъното на купчината или ги сваляме от върха? Здравият разум би ни диктувал да започнем от върха, а не да започнем игра на Jenga от 10 000 lb. Това е много подобно на начина, по който работят стековете тук. Последният елемент, поставен в структурата на данните LIFO, е първият елемент, от който се извлича.

Докато един стек може външно да прилича на масив, подреждането на елементите е в основата на функционалността. Следователно, когато създавате стек, е важно да ограничите начина на достъп до елементите в него.

var stack = Stack<String>()
stack.push(element: "one")
print(stack.count) // 1
stack.push(element: "two")
print(stack.count) // 2
stack.push(element: "three")
print(stack.count) // 3
stack.push(element: "four")
print(stack.count) // 4
stack.isEmpty() // False
print(stack.pop()) // Optional("four")
print(stack.pop()) // Optional("three")
print(stack.pop()) // Optional("two")
print(stack.pop()) // Optional("one")

Опашка

Опашката е структура от данни от списък „Първи влезли, първи излезли“. Структурата на данните „Първо влязло, първо излязло“ означава, че елементите могат да бъдат вмъкнати само отзад и отстранени от опашката отпред. Опашката може най-добре да бъде представена в реалния свят чрез линия за закупуване на билети за кино. В опашката за билети първият човек, който се реди на опашката, може да купи своите билети първи и всички в опашката купуват своите билети в реда, в който са се присъединили към опашката. Подобно на Stacks, подреждането на премахване на данни от опашката е от решаващо значение за правилното й функциониране, така че гарантирането, че достъпът до данните на опашката се управлява по подходящ начин, е жизненоважно.

var queue = Queue<String>()
queue.isEmpty // true
queue.push(value: "one")
print(queue.count) // 1
queue.push(value: "two")
print(queue.count) // 2
queue.push(value: "three")
print(queue.count) // 3
queue.push(value: "four")
print(queue.count) // 4
queue.isEmpty // false
print(queue.pop()) // one
print(queue.pop()) // two
print(queue.pop()) // three
print(queue.pop()) // four

Практическа употреба за стекове и опашки

Стекове и опашки могат да се използват като временни структури от данни в ситуации, когато трябва да се запази редът на списъка или редът, в който елементите са добавени или премахнати, е важен.