•  Один из часто встречающихся видов списка стек — список, в котором все операции включения и извлечения, сопровождающегося удалением из списка, элементов выполняются только с одного края. Механизм функционирования стека отражён в его названии «LIFO» (Last In First Out — последним вошёл, первым вышел, подобно патронам в обойме). Следовательно, любой элемент не может быть извлечён и удалён из стека раньше, чем будут извлечены все элементы, помещённые в стек позднее него. Составить программу, реализующую функционирование стека. Стек оформить как массив.

Ответы 1

  • Option ExplicitConst n = 50 'Максимальная емкость стекаDim LIFO(1 To n) As VariantDim ptr As Integer  'указатель на вершину стека, моделируемого LIFODim Overflow As BooleanDim EmptyLIFO As BooleanSub Push(Elem As Variant)    'добавляет элемент на вершину стека    If ptr < n Then        ptr = ptr + 1        LIFO(ptr) = Elem        Overflow = False        EmptyLIFO = False    Else        Overflow = True    End IfEnd SubSub Pop(Elem As Variant)    'Возвращает элемент с вершины стека и удаляет его из стека    If ptr > 0 Then        Elem = LIFO(ptr)        ptr = ptr - 1    End If    EmptyLIFO = (ptr = 0)End SubSub 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 = s1End Sub
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years