Сформировать двунаправленный связанный список (стек), содержащий последовательность целых чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сформировать двунаправленный связанный список (стек), содержащий последовательность целых чисел, вводимых из файла. Даны и два целых числа X1 и X2. Вставить число 2000 после каждого элемента, большего, чем X1 и меньшего чем X2. Язык С Спасибо!

Решение задачи: «Сформировать двунаправленный связанный список (стек), содержащий последовательность целых чисел»

textual
Листинг программы
#include <iostream>
 
using namespace std;
 
template <class T> class stack_t {
 
    struct node_t {
        T           m_data;
        node_t *    m_prev;
        node_t *    m_next;
        node_t( int data ) : m_data( data ) {}
    };
 
    node_t *    m_head;
    node_t *    m_tail;
 
public:
    stack_t() : m_head(0), m_tail(0) {}
 
    void push_back( T data ) {
        node_t * p_node = new node_t( data );
        if ( !m_head ) {
            m_head = m_tail = p_node;
            p_node->m_prev = 0;
        } else {
            m_tail->m_next = p_node;
            p_node->m_prev = m_tail;
            m_tail = p_node;
        }
        p_node->m_next = 0;
    }
 
    T pop_back() {
        T value = m_tail->m_data;
        if ( m_tail->m_prev ) m_tail = m_tail->m_prev;
        if ( m_tail->m_next ) {
            delete m_tail->m_next;
            m_tail->m_next = 0;
        }
        return value;
    }
};
 
int main()
{
    stack_t <int> my_stack;
 
    for ( int i = 0; i < 10; i++ ) {
        my_stack.push_back( i );
    }
 
    for ( int i = 0; i < 10; i++ ) {
        cout << my_stack.pop_back() << endl;
    }
 
    return 0;
}

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

В этом коде создается шаблонный класс stack_t для работы с двунаправленным связанным списком (стеком). Узел списка (node_t) содержит данные (m_data), указатель на предыдущий элемент (m_prev) и указатель на следующий элемент (m_next). В конструкторе класса инициализируются указатели head и tail, которые обозначают начало и конец списка. Метод push_back добавляет новый узел в конец списка, а метод pop_back удаляет и возвращает последний элемент списка. В функции main создается экземпляр класса stack_t для целых чисел (int), затем в цикле добавляются 10 элементов в стек, а затем в другом цикле удаляются и выводятся на экран эти же 10 элементов в обратном порядке.

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


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

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

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