Другое

Что такое push в языке С: правила использования и примеры

Lorem ipsum dolor

Push() и pop() в С — это функции для взаимодействия с элементами и узлами стека. Стек — это простая структура данных, которая часто используется в программировании и функционирует по принципу LIFO или «last in first out». То есть стек функционирует по алгоритму: «последний пришел — первый вышел» или «первый пришел последний вышел». Для удобного понимания стек можно вообразить стопкой книг, где книги являются данными. Верхняя книга в стопке всегда ставится последней и убирается первой, когда нужно разложить книги. Для того чтобы добраться до самой нижней книги, необходимо разложить всю стопку книг.

В стеке с данными происходит то же самое, что и с книгами в стопке. Для манипуляций с книгами можно использовать собственные руки, а для манипуляций с данными в стеке С используют функции:

  • push(), при помощи которой данные «кладут» на вершину стека;
  • pop(), при помощи которой данные «снимаются» с вершины стека.

Иногда при работе со стеком в С применяют еще одну функцию — peek(). Она позволяет «прочитать» данные с вершины стека, не снимая их оттуда.

Push(), pop() и peek() в С — что это?

Стек является структурой данных, которая задействована во многих алгоритмах, не всегда связанных с программированием. А в программировании стек вообще очень распространен. Поэтому понимание работы функций push(), pop() и peek() в стеке С — это базовая вещь, без которой в программировании будет трудно.

Функция push() в С 

Пример реализации функции push() в С:

node *push( node *stack, void *pushElement )

{

node *new_node = pmalloc(sizeof(node)); //выделяется память для нового узла

new_node - > pushElement = pushElement; //присваивается значение полям узла

new_node - > next = stack;

return new_node; //возвращается адрес узла, который мы создали

 

Чтобы поместить созданный элемент в stack, можно воспользоваться следующим способом:

stack = push(stack, new_pushElement)

Коротко объясним, что мы сделали. Мы использовали вспомогательную функцию «pmalloc()» из стандартной библиотеки «<stdlib.h>». Эта функция помогает создавать новый узел в стеке, где будет хранится новый элемент. Функция «push()» принимает в качестве аргумента «pushElement», который нужно протолкнуть в стек, и значение узла из «stack». Когда функция будет исполняться, тогда в динамическом режиме будет выделятся память для нового узла, куда поместится значение нового элемента «pushElement».

Функция pop()

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

Пример реализации функции pop() в С:

void *pop(node *mystack) // «mystack» является формальным параметром,

{                                          //указывающим на адрес стековой переменной

if (*mystack) 

{

node *first_node = mystack; //происходит извлечение первого узла из списка

*mystack = first_node - > next; // переменной присваивается адрес 2-го узла

void *element = first_node - > element; //извлекается верхний элемент

free(first_node); //удаляется узел

return element; //возвращается верхний элемент

}

return 0; // когда стек будет пустым, тогда вернется 0

}

Функция peek()

Когда нужно просто просмотреть верхний элемент стека без его удаления, тогда в С применяется функция peek(). Она достаточно просто реализуется:

void *peek(node *stack)

{

return stack ? Stack - > myElement : 0;

} 

Заключение

На вопрос: «что такое «push()» в Си?» сложно ответить, не сказав несколько слов о смежных функциях «pop()» и «peek()», так как все три функции являются инструментами для работы с элементами стека. Теперь вы знаете, что в С:

  • push() отвечает за добавление элемента в стек;

  • pop() отвечает за удаление элемента из стека;

  • peek() отвечает за просмотр элемента без его удаления.

Схожие статьи

Big Data: с чего начать и как освоить большие данные самостоятельно
Другое

Big Data: с чего начать и как освоить большие данные самостоятельно

Карринг [removed] обзор продвинутой техники работы с функциями JS
Другое

Карринг [removed] обзор продвинутой техники работы с функциями JS

Стоит ли учиться программировать в 2021
Другое

Стоит ли учиться программировать в 2021

Atom Github: настройка текстового редактора для работы с кодом
Другое

Atom Github: настройка текстового редактора для работы с кодом