Пример 25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")
Пример 25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")
#!/bin/bash
# stack.sh: Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")
# Подобно стеку процессора, этот "стек" сохраняет и возвращает данные по принципу
#+ "первый вошел -- последний вышел".
BP=100 # Базовый указатель на массив-стек.
# Дно стека -- 100-й элемент.
SP=$BP # Указатель вершины стека.
# Изначально -- стек пуст.
Data= # Содержимое вершины стека.
# Следует использовать дополнительную переменную,
#+ из-за ограничений на диапазон возвращаемых функциями значений.
declare -a stack
push() # Поместить элемент на вершину стека.
{
if [ -z "$1" ] # А вообще, есть что помещать на стек?
then
return
fi
let "SP -= 1" # Переместить указатель стека.
stack[$SP]=$1
return
}
pop() # Снять элемент с вершины стека.
{
Data= # Очистить переменную.
if [ "$SP" -eq "$BP" ] # Стек пуст?
then
return
fi # Это предохраняет от выхода SP за границу стека -- 100,
Data=${stack[$SP]}
let "SP += 1" # Переместить указатель стека.
return
}
status_report() # Вывод вспомогательной информации.
{
echo "-------------------------------------"
echo "ОТЧЕТ"
echo "Указатель стека SP = $SP"
echo "Со стека был снят элемент ""$Data"""
echo "-------------------------------------"
echo
}
# =======================================================
# А теперь позабавимся.
echo
# Попробуем вытолкнуть что-нибудь из пустого стека.
pop
status_report
echo
push garbage
pop
status_report # Втолкнуть garbage, вытолкнуть garbage.
value1=23; push $value1
value2=skidoo; push $value2
value3=FINAL; push $value3
pop # FINAL
status_report
pop # skidoo
status_report
pop # 23
status_report # Первый вошел -- последний вышел!
# Обратите внимание как изменяется указатель стека на каждом вызове функций push и pop.
echo
# =======================================================
# Упражнения:
# -----------
# 1) Измените функцию "push()" таким образом,
# + чтобы она позволяла помещать на стек несколько значений за один вызов.
# 2) Измените функцию "pop()" таким образом,
# + чтобы она позволяла снимать со стека несколько значений за один вызов.
# 3) Попробуйте написать простейший калькулятор, выполняющий 4 арифметических действия?
# + используя этот пример.
exit 0
--
Иногда, манипуляции с "индексами" массивов могут потребовать введения переменных для хранения промежуточных результатов. В таких случаях вам предоставляется лишний повод подумать о реализации проекта на более мощном языке программирования, например Perl или C.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Эмуляция дискуссий в блогосфере
Эмуляция дискуссий в блогосфере Организация PR-кампаний в блогосфере постепенно входит в стандартные наборы услуг российских агентств. Существуют три принципиально разные схемы ее использования в PR-целях. Применение каждой из них может (при условии профессиональной
Эмуляция классов
Эмуляция классов Часто случается, что разработчики классов желают развернуть новые версии уже существующих классов, чтобы исправить дефекты или расширить функциональные возможности. Полезно придать этим новым реализациям новые идентификаторы класса CLSID , чтобы
Глава 2 Эмуляция CD/DVD-приводов
Глава 2 Эмуляция CD/DVD-приводов • Программа Alcohol 120 %.• Настройка программы.• Поиск образов и Диспетчер CD/DVD.• Запись CD/DVD из образов.• Эмуляция и запись.• Копирование дисков в программе Alcohol 120 %.• Стирание информации с CD/DVD.Виртуальный привод компакт-дисков – это
Эмуляция и запись
Эмуляция и запись Эмуляция применяется, если вы не уверены в правильности выбранных настроек: файл-образ сначала записывается не на компакт-диск, а на винчестер. Так можно поэкспериментировать с установкой различных параметров в настройках Тип данных. Жестких
2.1.4. Стек TCP/IP
2.1.4. Стек TCP/IP Физический и канальный уровни полностью реализуются сетевой картой или модемом (или другим устройством, выполняющим ту же функцию) и ее драйвером. Здесь действительно достигнута настолько полная абстракция, что программист обычно не задумывается о том,
Первый пример
Первый пример Скроем все данные, не выделенные синим цветом.1. Нажмите кнопку в ячейке R1C1. На экране появится список команд.2. В появившемся списке выберите пункт Фильтр по цвету и на открывшейся палитре – синий цвет. В таблице останутся только товары, которые мы ранее
Стек (Stack)
Стек (Stack) Любая последовательность, поддерживающая операции back, push_back и pop_back, может использоваться для модификации stack. В частности, могут использоваться vector, list и deque.template ‹class Container›class stack { friend bool operator==(const stack‹Container›& х, const stack‹Container›& y); friend bool operator‹(const
6.16. Стек
6.16. Стек В разделе 4.5 операции инкремента и декремента были проиллюстрированы на примере реализации абстракции стека. В общем случае стек является очень полезным механизмом для сохранения текущего состояния, если в разные моменты выполнения программы одновременно
Пример структуры встроенной инсталляции
Пример структуры встроенной инсталляции Приведем пример структуры каталогов и содержание файлов конфигурации для инсталлированного приложения встраиваемого сервера:D:my_appMyApp.exeD:my_appgds32.dllD:my_appfbfirebird.confD:my_appfbaliases.confD:my_appfbfirebird.msgD:my_appfbintlfbintl.dllD:my_appfbUDFfbudf.dllФайл firebird.conf:RootDirectory =
Эмуляция карточки памяти
Эмуляция карточки памяти Все модели карманных компьютеров и смартфонов имеют возможность увеличения объема памяти при помощи различных карточек памяти. Дополнительный объем дискового пространства используют для хранения фильмов, фотографий и других документов.
Пример 25-11. Эмуляция массива с двумя измерениями
Пример 25-11. Эмуляция массива с двумя измерениями #!/bin/bash# Эмуляция двумерного массива.# Второе измерение представлено как последовательность строк.Rows=5Columns=5declare -a alpha # char alpha [Rows] [Columns]; # Необязательное объявление массива.load_alpha (){local rc=0local indexfor i in A B C D E F G H I J K L M N O P
Стек
Стек Стек – абстрактная структура данных, устроенная по принципу LIFO «последний вошел – первый вышел» (last in, first out – LIFO). Наглядно стек может быть представлен стопкой подносов в кафетерии. Например, если кто-то кладет поднос на вершину стопки, то этот поднос будет первым,
ПРАКТИКА: Золотая сеть: Golden Wi-Fi вышел на финишную прямую
ПРАКТИКА: Золотая сеть: Golden Wi-Fi вышел на финишную прямую Автор: Родион Насакин1 февраля компания «Голден Телеком» запустила в коммерческую эксплуатацию свою WiFi-сеть. На сегодняшний день это самый крупный проект такого рода в Европе. Открытию предшествовала трехмесячная