Сформировать двунаправленный связанный список (стек), содержащий последовательность целых чисел - 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 элементов в обратном порядке.