Код | #include <iostream> using namespace std;
class Node{ // узел списка public: union { double n; char ch; }; // данные Node * Next; bool Num; // true-число, false-символ
Node( double a = 0 ): n(a), Next(NULL), Num(true) {}; Node( char c = 0 ): ch(c), Next(NULL), Num(false) {}; friend ostream & operator<<( ostream & out, const Node & n ); };
class List{ // связанный список Node *Begin, *End; // первый и последний элемент списка public: List(): Begin(NULL), End(NULL){}; Node * begin(){ return Begin; } // начало списка Node * end() { return NULL; } // конец списка // добавление числа в конец списка void Push_back( double a ){ if( End ) End = End->Next = new Node(a); else Begin = End = new Node(a); } // добавление символа в начало списка void Push_front( char c ){ Node * n = new Node(c); if( Begin ){ n->Next = Begin; Begin = n; } else Begin = n; } // удаление данных из списка void Erase(){ for( End = Begin; Begin; Begin = End ){ End = End->Next; delete Begin; } Begin = End = NULL; } ~List(){ Erase(); } }; ostream & operator<<( ostream & out, const Node & n ){ if( n.Num ) // если узел содержит число out << n.n; else out << n.ch; // иначе содержится симол return out; } ////////////////////////// MAIN ///////////////////////////// int main(){ List array; cout << "Enter 10 int or char:\n"; double n; char c;
// цикл добавления 10 чисел или символов for( int i=0; i<10; i++ ){ if( cin >> n ){ // если считали число array.Push_back( n ); // число в конец списка } else{ // если считываем не число cin.clear(); cin >> c; array.Push_front( c ); // символ в начало списка } } cout << "\n\nList out:\n";
// Вывод всего что считали for( Node * pt = array.begin(); pt; pt = pt->Next ) cout << *pt << "\n"; array.Erase(); // удаление всех элементов
cin.sync(); cout << "\n\nPress enter key to continue"; cin.get(); // пауза return 0; }
|
|