Организовать стек из однородного массива и реализовать действия с ним - 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, что означает успешное выполнение.