Организовать стек из однородного массива и реализовать действия с ним - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: для работы с I/O, для работы со строками и для работы с памятью.
  2. Определяется структура узла (NODE) для организации стека. Узел содержит указатель на слово (const char ) и указатель на следующий узел (struct NODE ).
  3. Создаются две функции: push и pop. Функция push добавляет новое слово в стек, а функция pop удаляет и возвращает последнее добавленное слово.
  4. В функции main создается буфер (buf) для чтения входных данных, а также указатель на вершину стека (stack).
  5. В цикле while считываются строки с помощью fgets и разделяются на отдельные слова с помощью функции strtok. Каждое слово добавляется в стек с помощью функции push.
  6. После окончания ввода слов, в цикле while выводятся все слова из стека в обратном порядке с помощью функции pop и оператора printf.
  7. В конце программы возвращается 0, что означает успешное выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы