/* teht8_2.cpp M 2.30.2 */ /* 2) Toteuta list "oikeana" dynaamisena listana. */ #include #define TYPE char class list; class elem { friend list; TYPE data; elem *next_elem; elem(TYPE d) { data = d; next_elem = NULL; } int add(elem *n) { next_elem = n; return 0; } }; class list { protected: elem *first_elem; elem *last_elem; elem *cursor; // Sijainti listassa TYPE out_data; int no_elem() { first_elem = last_elem = cursor = NULL; out_data = 0; return 0; } public: int delete_all(); list() { no_elem(); } ~list() { delete_all(); } int out() { return ( cursor == NULL ); } int tobegin() { cursor = first_elem; return out(); } int forward() { if ( !cursor ) return 1; out_data = cursor->data; cursor = cursor->next_elem; return 0; } int toend() { cursor = last_elem; return out(); } TYPE current() { return cursor ? cursor->data : out_data; } TYPE first() { tobegin(); return current(); } TYPE next() { forward(); return current(); } TYPE last() { toend(); return current(); } int empty() { return ( first_elem == NULL ); } int add(TYPE p) { elem *n = new elem(p); if ( !n ) return 1; if ( first_elem ) last_elem->add(n); else first_elem = n; last_elem = n; return 0; } }; /* list */ int list::delete_all() { elem *e; tobegin(); while ( cursor ) { e = cursor; forward(); delete e; } return no_elem(); } #define VIIVA "------------------------------------------------------------\n" /****************************************************************************/ int main(void) { cout << VIIVA; list lc; lc.add('a'); lc.add('b'); lc.add('c'); lc.add('d'); for (char c=lc.first(); !lc.out(); c=lc.next() ) cout << c << " "; cout << c << "\n" << VIIVA; for (lc.tobegin(); !lc.out(); lc.forward() ) cout << lc.current() << " "; cout << lc.current() << "\n" << VIIVA; return 0; }