В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
sabrina23052006
sabrina23052006
26.05.2022 23:42 •  Информатика

Один из часто встречающихся видов списка стек — список, в котором все операции включения и извлечения, удалением из списка, элементов выполняются только с одного края. механизм функционирования стека отражён в его названии «lifo» (last in first out — последним вошёл, первым вышел, подобно патронам в обойме). следовательно, любой элемент не может быть извлечён и удалён из стека раньше, чем будут извлечены все элементы, помещённые в стек позднее него. составить программу, реализующую функционирование стека. стек оформить как массив.

Показать ответ
Ответ:
арманп
арманп
08.07.2020 01:43
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
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота