Что такое стэк в рэпе

О стеке простыми словами — для студентов и просто начинающих

Привет, я студент второго курса технического университета. После пропуска нескольких пар программирования по состоянию здоровья, я столкнулся с непониманием таких тем, как «Стек» и «Очередь». Путем проб и ошибок, спустя несколько дней, до меня наконец дошло, что это такое и с чем это едят. Чтобы у вас понимание не заняло столько времени, в данной статье я расскажу о том что такое «Стек», каким образом и на каких примерах я понял что это такое. Если вам понравится, я напишу вторую часть, которая будет затрагивать уже такое понятие, как «Очередь»

Теория

На Википедии определение стека звучит так:

Поэтому первое, на чем бы я хотел заострить внимание, это представление стека в виде вещей из жизни. Первой на ум мне пришла интерпретация в виде стопки книг, где верхняя книга — это вершина.

На самом деле стек можно представить в виде стопки любых предметов будь то стопка листов, тетрадей, рубашек и тому подобное, но пример с книгами я думаю будет самым оптимальным.

Итак, из чего же состоит стек.

Стек состоит из ячеек(в примере — это книги), которые представлены в виде структуры, содержащей какие-либо данные и указатель типа данной структуры на следующий элемент.
Сложно? Не беда, давайте разбираться.

На данной картинке схематично изображен стек. Блок вида «Данные/*next» и есть наша ячейка. *next, как мы видим, указывает на следующий элемент, другими словами указатель *next хранит адрес следующей ячейки. Указатель *TOP указывает на вершину стек, то есть хранит её адрес.

С теорией закончили, перейдем к практике.

Практика

Для начала нам нужно создать структуру, которая будет являться нашей «ячейкой»

Новичкам возможно будет не понятно, зачем наш указатель — типа comp, точнее сказать указатель типа структуры comp. Объясню, для того чтобы указатель *next мог хранить структуру comp, ей нужно обозначить тип этой структуры. Другими словами указать, что будет хранить указатель.

После того как у нас задана «Ячейка», перейдем к созданию функций.

Функции

Функция создания «Стека»/добавления элемента в «Стек»

При добавлении элемента у нас возникнет две ситуации:

  • Стек пуст, и нужно создать его
  • Стек уже есть и нужно лишь добавить в него новый элемент

Разберем чуть чуть по-подробнее.
Во-первых, почему функция принимает **top, то есть указатель на указатель, для того чтобы вам было наиболее понятно, я оставлю рассмотрение этого вопроса на потом. Во-вторых, по-подробнее поговорим о q->next = *top и о том, что же означает ->.

-> означает то, что грубо говоря, мы заходим в нашу структуру и достаем оттуда элемент этой структуры. В строчке q->next = *top мы из нашей ячейки достаем указатель на следующий элемент *next и заменяем его на указатель, который указывает на вершину стека *top. Другими словами мы проводим связь, от нового элемента к вершине стека. Тут ничего сложного, все как с книгами. Новую книгу мы кладем ровно на вершину стопки, то есть проводим связь от новой книги к вершине стопки книг. После этого новая книга автоматически становится вершиной, так как стек не стопка книг, нам нужно указать, что новый элемент — вершина, для этого пишется: *top = q;.

Функция удаления элемента из «Стека» по данным

Данная функция будет удалять элемент из стека, если число Data ячейки(q->Data) будет равна числу, которое мы сами обозначим.

Здесь могут быть такие варианты:

  • Ячейка, которую нам нужно удалить является вершиной стека
  • Ячейка, которую нам нужно удалить находится в конце, либо между двумя ячейками

Указатель q в данном случае играет такую же роль, что и указатель в блокноте, он бегает по всему стеку, пока не станет равным NULL(while(q != NULL)), другими словами, пока стек не закончится.

Для лучшего понимания удаления элемента проведем аналогии с уже привычной стопкой книг. Если нам нужно убрать книгу сверху, мы её убираем, а книга под ней становится верхней. Тут то же самое, только в начале мы должны определить, что следующий элемент станет вершиной *top = q->next; и только потом удалить элемент free(q);

Если книга, которую нужно убрать находится между двумя книгами или между книгой и столом, предыдущая книга ляжет на следующую или на стол. Как мы уже поняли, книга у нас-это ячейка, а стол получается это NULL, то есть следующего элемента нет. Получается так же как с книгами, мы обозначаем, что предыдущая ячейка будет связана с последующей prev->next = q->next;, стоит отметить что prev->next может равняться как ячейке, так и нулю, в случае если q->next = NULL, то есть ячейки нет(книга ляжет на стол), после этого мы очищаем ячейку free(q).

Так же стоит отметить, что если не провести данную связь, участок ячеек, который лежит после удаленной ячейки станет недоступным, так как потеряется та самая связь, которая соединяет одну ячейку с другой и данный участок просто затеряется в памяти

Функция вывода данных стека на экран

Самая простая функция:

Здесь я думаю все понятно, хочу сказать лишь то, что q нужно воспринимать как бегунок, он бегает по всем ячейкам от вершины, куда мы его установили вначале: *q = top;, до последнего элемента.

Главная функция

Хорошо, основные функции по работе со стеком мы записали, вызываем.
Посмотрим код:

Вернемся к тому, почему же в функцию мы передавали указатель на указатель вершины. Дело в том, что если бы мы ввели в функцию только указатель на вершину, то «Стек» создавался и изменялся только внутри функции, в главной функции вершина бы как была, так и оставалась NULL. Передавая указатель на указатель мы изменяем вершину *top в главной функции. Получается если функция изменяет стек, нужно передавать в нее вершину указателем на указатель, так у нас было в функции s_push,s_delete_key. В функции s_print «Стек» не должен изменяться, поэтому мы передаем просто указатель на вершину.
Вместо цифр 1,2,3,4,5 можно так-же использовать переменные типа int.

Заключение

Полный код программы:

Так как в стек элементы постоянно добавляются на вершину, выводиться элементы будут в обратном порядке

В заключение хотелось бы поблагодарить за уделенное моей статье время, я очень надеюсь что данный материал помог некоторым начинающим программистам понять, что такое «Стек», как им пользоваться и в дальнейшем у них больше не возникнет проблем. Пишите в комментариях свое мнение, а так же о том, как мне улучшить свои статьи в будущем. Спасибо за внимание.

Значение слова «стек»

Источник (печатная версия): Словарь русского языка: В 4-х т. / РАН, Ин-т лингвистич. исследований; Под ред. А. П. Евгеньевой. — 4-е изд., стер. — М.: Рус. яз.; Полиграфресурсы, 1999; (электронная версия): Фундаментальная электронная библиотека

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

Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

В цифровом вычислительном комплексе стек называется магазином — по аналогии с магазином в огнестрельном оружии (стрельба начнётся с патрона, заряженного последним).

В 1946 Алан Тьюринг ввёл понятие стека. А в 1957 году немцы Клаус Самельсон и Фридрих Л. Бауэр запатентовали идею Тьюринга.

СТЕК [тэ], а, м. [англ. stick] (спорт.). Твердый, эластичный хлыст, употр. при верховой езде.

стёк, -ся, екла́, -сь. Прош. вр. от стечь, -ся.

Источник: «Толковый словарь русского языка» под редакцией Д. Н. Ушакова (1935-1940); (электронная версия): Фундаментальная электронная библиотека

стек I

1. короткая тонкая трость с ременной петлёй на конце ◆ Военный сурово слушал, ударяя стеком по голенищу сапога. В. В. Вересаев, «В тупике», 1923 г. (цитата из НКРЯ) ◆ Маленькую голову всадника венчала офицерская английская фуражка, в руке он держал стек. А. И. Пантелеев, «Ленька Пантелеев», 1938–1952 г. (цитата из НКРЯ)

стек II

1. комп. структура данных, отличающаяся возможностью доступа исключительно к своему последнему элементу ◆ Стек вызовов

2. техн. комп. группа сетевых устройств, протоколов, каких-либо технических средств, логически интегрированных в единую систему ◆ Стек коммутаторов логически представляет собой одно устройство, которое управляется внутри стека главным коммутатором. ◆ Для совместной работы устройств, занимающихся передачей аудио- и видеотрафика, применяют несколько схем работы, которые используют разные рекомендации и стеки протоколов. «Протоколы, используемые в IP-телефонии», 2004 г. // «Информационные технологии» (цитата из НКРЯ) ◆ Отметим, что при помещении BP в стек относительные смещения параметров увеличатся на 2, поскольку стек теперь увеличится на два. Алексей Калугин

3. игр. количество денег или фишек, которым игрок располагает за столом для игры

Фразеологизмы и устойчивые сочетания

стек III

1. то же, что стека, инструмент скульптора, применяемый при лепке из глины и других мягких материалов; деревянная, костяная или металлическая палочка с расширенными в виде лопатки концами ◆ Основная скульптурная техника — лепка. Художник вылепливает руками из воска или влажной глины формы, которые он затем «доводит» с помощью инструментов — шпателя или стека. «Всемирная энциклопедия искусства. Техники скульптуры»

стёк I

Делаем Карту слов лучше вместе

/>Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!

Спасибо! Я стал чуточку лучше понимать мир эмоций.

Вопрос: осуждаться — это что-то нейтральное, положительное или отрицательное?

Шат аут всем моим хоумис: гид по сленгу рэперов

Мы живем в эпоху рэперов, которые диссят, байтят и гамают. Для тех, кто не знает значения этих слов, мы создали мини-словарь по их сленгу. Чтобы ты всегда был в теме!

Бэнгер – трек, который качает

Доуп – запрещенные вещества

Бадибэг – мешок для тела (трупов)

Гострайтинг – написание и продажа текстов другим артистам (от англ. ghost – «призрак», автор текста остается анонимным)

Крю, гэнг и сквад – компания приятелей и друзей, тусовка (от англ. Flava, Crew, Gang, Squad)

Хоу – девушка легкого поведения (от англ. whore)

Бэнкролл – большое количество денег

Байт – заимствование чего-либо (например, использовать строчку из чужой песни)

Флоу – манера рэпера зачитывать свои строчки (от англ. flow)

Вайб – настроение, атмосфера

Панч – унижение оппонента

Тру – классный парень

Биф – вражда между хип-хоп-артистами

Дисс – трек, в котором артист унижает другого исполнителя (от англ. disrespect)

Даблтайм – зачитывание рэпа, ускоренное в два раза

Диггер – поклонник репа, который изображает из себя репера, но сам не читает

Ганбарс – черный юмор под рифму

Баттл – соревнование между рэперами, в котором они по очереди «диссят» друг друга

Стафф – песни и альбомы рэпера

Фит – совместное творчество двух рэперов

Несведенка – первоначальный вариант записи без наложения каких-либо звуковых эффектов

Андеграунд – направление, отличающееся от массового творчества и общего стандарта

Эдлиб – короткая голосовая вставка, которая, как правило, ничего не значит и используется как «фишка» артиста (например, «скр-скр-скр» у Pharaoh)

Тейк – запись трека с первой попытки без сведения отдельных отрывков

Дэб – танцевальное движение

Клауд-рэп – жанр хип-хопа с замедленными битами

Коллаб – совместное творчество

Трэп-хата – место для тусовок

Фрешмен – новый перспективный рэпер

Шоти – девчонка (от англ. shawty)

Гамать – играть (от слова game)

Хоуми – бро, земляк (от англ. homie)

O.G. – Original Gangsta

Войс-тег – метка битмейкеров в начале трека (например, «Слава, что ты сделал»)

Флексить – в хип-хоп-среде качаться, двигаться под какой-то трек. Сейчас используется в значении «расслабляться» или «выпендриваться»

Панч – изначально в рэпе (особенно в баттлах) колкая фраза, нацеленная на оппонента (от англ. punch – «удар кулаком»)

Хасл – успех, признание

Флип – быстрая реакция на текст оппонента

Шат аут – приветствие друзей (чаще всего используется на рэп-концертах, чтобы передать кому-то привет)

От бадибэга до байта: гид по рэп-сленгу, после которого можно сразу залетать на баттл

Я приготовил бадибэги всем ноунеймам, кто нас диссит. Playboy флексит вместе с групис, Playboy флексит даже в кризис.

От бадибэга до байта: гид по рэп-сленгу, после которого можно сразу залетать на баттл

Здесь и далее фото unsplash.com

Буквально несколько лет назад российское общество сотрясла новость о противостоянии двух матерых рэперов — Оксимирона и Гнойного. Они встретились в рамках проекта Versus Battle, облили друг друга грязью в стихотворной форме и на несколько недель стали главной культурной сенсацией современности.

Двух артистов обсуждали буквально все — от главных телеведущих федеральных каналов и солидных политиков в галстуках до простых обывателей (не шарящих за рэп) и их любопытных бабушек. Надо признать, что далеко не все поняли, почему вокруг какого-то интернет-события поднялось столько хайпа, и почему эти ноунеймы так много сквернословили, называя свои строчки рил током.

Но процесс уже было не остановить. Культура баттлов, да и рэпа в целом еще плотнее вошла в повседневность непритязательного российского слушателя, дав ему новые смыслы и потребность быть в теме.

Несмотря на то, что сейчас в России рэперские батлы почти полностью утратили свою актуальность, вернувшись в дремучий андерграунд, интерес к самому рэпу по-прежнему остается большим. Вместе с этим растет потребность понимать, о чем вообще читают все эти эмси, выдавая в каждой строчке по новому неизвестному слову.

Будучи рэпером со стажем (рил ток), я постараюсь ввести тебя в курс дела и познакомить с основными понятиями, которыми оперируют современные артисты. После того, как все запомнишь, можешь смело залетать на баттл (если их еще где-то проводят).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *