Организовать стек из однородного массива и реализовать действия с ним - C (СИ)
Формулировка задачи:
Здравствуйте, я только что зарагестрировался на форуме и не знаю всех правил, так что прошу простить, если что не так делаю.
А задача такая:
Организовать стек из однородного массива и реализовать действия с ним, т.е. включение и исключение элементов (в стеке эти действия производятся только с верхним элементом, т.е. - последним добавленным, он же является вершиной стека.). Элементами стека являются слова не более 20 символов.
Мне бы помогла любая возможная информация - ссылки на справочники, идеи какие-то и т.п. В принципе знаком со списками и стеками, но не представляю, как именно стек слов реализовать.
Большое спасибо.
Решение задачи: «Организовать стек из однородного массива и реализовать действия с ним»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct NODE { const char * word; struct NODE * next; } node_t, * wordsstack_t; int push(wordsstack_t * pStack, const char * word) { node_t * pNode = malloc(sizeof(node_t)); if ( ! pNode ) return -1; pNode->word = word; pNode->next = *pStack; *pStack = pNode; return 0; } const char * pop(wordsstack_t * pStack) { if ( ! *pStack ) return NULL; else { node_t node = **pStack; free(*pStack); *pStack = node.next; return node.word; } } #define DELIM " \t\n" int main(void) { char buf[BUFSIZ], * pWord; wordsstack_t stack = NULL; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) { for ( pWord = strtok(buf, DELIM); pWord; pWord = strtok(NULL, DELIM) ) if ( push(&stack, pWord) ) return -1; printf("Reversed: "); while ( pWord = pop(&stack) ) printf("%s ", pWord); printf("\n"); } return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
для работы с I/O, для работы со строками и для работы с памятью. - Определяется структура узла (NODE) для организации стека. Узел содержит указатель на слово (const char ) и указатель на следующий узел (struct NODE ).
- Создаются две функции: push и pop. Функция push добавляет новое слово в стек, а функция pop удаляет и возвращает последнее добавленное слово.
- В функции main создается буфер (buf) для чтения входных данных, а также указатель на вершину стека (stack).
- В цикле while считываются строки с помощью fgets и разделяются на отдельные слова с помощью функции strtok. Каждое слово добавляется в стек с помощью функции push.
- После окончания ввода слов, в цикле while выводятся все слова из стека в обратном порядке с помощью функции pop и оператора printf.
- В конце программы возвращается 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д