Один из часто встречающихся видов списка стек — список, в котором все операции включения и извлечения, сопровождающегося удалением из списка, элементов выполняются только с одного края. Механизм функционирования стека отражён ...

 Один из часто встречающихся видов списка стек — список, в котором все операции включения и извлечения, сопровождающегося удалением из списка, элементов выполняются только с одного края. Механизм функционирования стека отражён в его названии «LIFO» (Last In First Out — последним вошёл, первым вышел, подобно патронам в обойме). Следовательно, любой элемент не может быть извлечён и удалён из стека раньше, чем будут извлечены все элементы, помещённые в стек позднее него. Составить программу, реализующую функционирование стека. Стек оформить как массив.
Гость
Ответ(ы) на вопрос:
Гость
Option Explicit Const n = 50 'Максимальная емкость стека Dim LIFO(1 To n) As Variant Dim ptr As Integer  'указатель на вершину стека, моделируемого LIFO Dim Overflow As Boolean Dim EmptyLIFO As Boolean Sub Push(Elem As Variant)     'добавляет элемент на вершину стека     If ptr < n Then         ptr = ptr + 1         LIFO(ptr) = Elem         Overflow = False         EmptyLIFO = False     Else         Overflow = True     End If End Sub Sub Pop(Elem As Variant)     'Возвращает элемент с вершины стека и удаляет его из стека     If ptr > 0 Then         Elem = LIFO(ptr)         ptr = ptr - 1     End If     EmptyLIFO = (ptr = 0) End Sub Sub main()     ' Пример работы со стеком - перестановка букв в словах строки.     ' Не меняя порядка слов в строке, переставить в каждом слове буквы в обратном порядке.     ' Слова разделяются ровно одним пробелом.     Dim s As String, s1 As String, i As Integer, e As String     s = Sheets("Лист1").Cells(1, 1).Value     If Len(s) = 0 Then         MsgBox "Нет входной строки"         Exit Sub     End If     EmptyLIFO = True     Overflow = False     s1 = ""     For i = 1 To Len(s)         e = Mid(s, i, 1)    'Очередной символ         If e <> " " Then             Push e         Else             s1 = s1 + " "             Do While Not EmptyLIFO                 Pop e                 s1 = s1 + e             Loop         End If     Next i     s1 = s1 + " "     Do While Not EmptyLIFO         Pop e         s1 = s1 + e     Loop     s1 = Trim(s1)     Sheets("Лист1").Cells(2, 1).Value = s1 End Sub
Не нашли ответ?
Ответить на вопрос
Похожие вопросы