|
//file SLL06.cpp //date 11/08/2006 //author aou //csis250.tripod.com // SLL: Singly-linked list /* name: description: example: preconditions: postcondition: side-effect: protype: algorithm: code: test-driver: test-data: test-results: */ /////////////////////////////////////////////////////////// //includes /////////////////////////////////////////////////////////// #include <iostream> using namespace std; class CInfo { private: int value; CInfo *next; friend class CSLL; friend ostream & operator << (ostream & bob, const CSLL & list); }; class CSLL { private: int n; CInfo *first; //essential CInfo *last; private: void initialize(void); public: CSLL(void); //default constructor/////////////////////////////// bool insert(int x);///////////////////////////////////////////////// friend ostream & operator << (ostream & bob, const CSLL & list);///// CSLL(char ch); //constructs based on value of ch /////////////////// CSLL(int low, int high); //////////////////////////////////////// CSLL(int low, int high, int n);////////////////////////////////// bool operator == (const CSLL &list2); CSLL(const CSLL &list); void input(void); bool insert(const CSLL & list2); }; void main(void) { /* CSLL myList; cout << myList << endl; myList.insert(666); cout << myList << endl; myList.insert(555); cout << myList << endl; */ /* for (int i=1; i<=10; i++) { CSLL myList('r'); cout << myList << endl; } */ /* for (int i=1; i<=10; i++) { CSLL myList(10, 20); cout << myList << endl; } */ /* for (int i=1; i<=10; i++) { CSLL myList(10, 20, 5); cout << myList << endl; } */ CSLL myList, yourList; cout << myList << endl << yourList << endl; if(myList == yourList) cout << "myList == yourList\n"; else cout << "myList != yourList\n"; myList.insert(5); yourList.insert(5); cout << myList << endl << yourList << endl; if(myList == yourList) cout << "myList == yourList\n"; else cout << "myList != yourList\n"; myList.insert(6); yourList.insert(7); cout << myList << endl << yourList << endl; if(myList == yourList) cout << "myList == yourList\n"; else cout << "myList != yourList\n"; myList.insert(66); myList.insert(56); yourList.insert(77); cout << myList << endl << yourList << endl; if(myList == yourList) cout << "myList == yourList\n"; else cout << "myList != yourList\n"; } bool CSLL::operator == (const CSLL &list2) { if (this->n != list2.n) return false; CInfo *p1, *p2; p1 = this->first; p2 = list2.first; while (p1 != NULL) { if (p1->value != p2->value) return false; p1 = p1->next; p2 = p2->next; } return true; } CSLL::CSLL(int low, int high, int n) { this->initialize(); if (low > high) return; if (n<0) n = -n; int m = n; for (int i=1; i<=m; i++) { int x = low + rand()%(high-low+1); this->insert(x); } } CSLL::CSLL(int low, int high) { this->initialize(); if (low > high) return; int m = rand()%20; for (int i=1; i<=m; i++) { int x = low + rand()%(high-low+1); this->insert(x); } } CSLL::CSLL(char ch) { this->initialize(); if (ch == 'r') { int m = rand()%20; for (int i=1; i<=m; i++) { int x = rand()%100; this->insert(x); } } } bool CSLL::insert(int x) { /* set agent to available block of type CInfo copy x to value part of new block set next part of new block to NULL set first to agent set last to agent */ CInfo *agent; agent = new CInfo; agent->value = x; agent ->next = NULL; if (n == 0) { first = agent; last = agent; } else { last->next = agent; last = agent; } this->n++; return true; } ostream & operator << (ostream & bob, const CSLL & list) { bob << "SLL(" << list.n << "): "; CInfo *agent; agent = list.first; while (agent != NULL) { bob << agent->value << ' '; agent = agent->next; } return bob; } CSLL::CSLL(void) { this->initialize(); } /* name: initialize description: initializes a new singly-linked list example: n/a preconditions:list should not exist postcondition:empty list side-effect: none protype: void initialize(void) algorithm: set n to 0, first and last to null code: follows test-driver: n/a test-data: n/a test-results: n/a */ void CSLL::initialize(void) { //n = 0; //(*this).n = 0; this->n = 0; this->first = NULL; this->last = NULL; } |