Искусство программирования: стек и очередь
Оглавление:
- Введение в статью
- Что такое стек
- Преимущества использования стека
- Основные операции стека
- Реализация стека с использованием массива
- Пример кода на стеке
- Что такое очередь
- Преимущества использования очереди
- Основные операции очереди
- Реализация очереди с использованием связанного списка
- Пример кода на очереди
💡 Введение в статью
В этой статье мы поговорим о двух новых контейнерных структурах - стеке и очереди. Мы рассмотрим их преимущества и основные операции, а также реализацию с использованием массива и связанного списка. Оба этих контейнера строятся на основе списка, но в них есть особенность - ограниченный доступ к данным.
🔥 Что такое стек
🔹 Преимущества использования стека
Операции стека:
- Push: добавление элемента в стек.
- Pop: удаление и возвращение верхнего элемента стека.
- Top: возвращение значения верхнего элемента без его удаления.
Пример реализации стека с использованием массива:
class Stack:
def __init__(self, size):
self.size = size
self.stack = []
def push(self, element):
if len(self.stack) < self.size:
self.stack.append(element)
else:
print("Стек переполнен")
def pop(self):
if len(self.stack) > 0:
return self.stack.pop()
else:
print("Стек пуст")
def top(self):
if len(self.stack) > 0:
return self.stack[-1]
else:
print("Стек пуст")
def is_empty(self):
return len(self.stack) == 0
🔥 Что такое очередь
🔹 Преимущества использования очереди
Операции очереди:
- Enqueue: добавление элемента в конец очереди.
- Dequeue: удаление и возвращение элемента из начала очереди.
- Front: возвращение значения первого элемента без его удаления.
- Rear: возвращение значения последнего элемента без его удаления.
Пример реализации очереди с использованием связанного списка:
class Queue:
def __init__(self):
self.front = None
self.rear = None
def enqueue(self, element):
node = Node(element)
if self.is_empty():
self.front = node
self.rear = node
else:
self.rear.next = node
self.rear = node
def dequeue(self):
if not self.is_empty():
temp = self.front
self.front = self.front.next
if self.front is None:
self.rear = None
return temp.data
def front(self):
if not self.is_empty():
return self.front.data
def rear(self):
if not self.is_empty():
return self.rear.data
def is_empty(self):
return self.front is None
Теперь, когда мы познакомились с основными принципами стека и очереди, их преимуществами и операциями, вы можете приступить к использованию этих мощных инструментов в своих программах. Надеюсь, данная статья поможет вам в разработке и значительно упростит ваш код. Удачи!
🔍 FAQ
-
В чем разница между стеком и очередью?
- В стеке элементы добавляются и удаляются только с одного конца, тогда как в очереди добавление элементов происходит в один конец, а удаление - из другого.
-
Каковы преимущества использования связанного списка для реализации очереди?
- Связанный список позволяет легко добавлять и удалять элементы в начале и конце очереди, без необходимости переупорядочивания других элементов.
-
Какой контейнер использовать, стек или очередь?
- Если вам нужно отслеживать только последний добавленный элемент и работать с ним, то лучше использовать стек. Если вам нужен доступ к обоим концам списка, то очередь может быть более подходящим выбором.
🔗 Ресурсы