Intermediate Business Programming with C++

Open table as spreadsheet

Program

Demonstrates

date.h

This header contains the definition of the class date that is used in many different examples.

bst.cpp

Demonstrates BST searching.

bst2.cpp

Extends bst.cpp by adding a function to display the binode data values.

bst3.cpp

Extends bst.cpp by adding a function to delete a particular binode

bst4.cpp

Extends bst.cpp by adding a function to delete a particular binode

bst.h

Implements a BST on general data.

bst2.h

Implements a BST on general data This header adds to the header bst.h the ability to display the data of the nodes.

bst3.h

Implements a BST on general data. This header adds to the header bst.h the ability to display the data of the nodes.

bst4.h

Implements a BST on general data. This header adds to the header bst.h the ability to display the data of the nodes.

linked.h

The link list class is contained in this header.

linked2.cpp

Demonstrates a search on a linked list of dates.

vector6.cpp

Demonstrates that a vector of non-system data can be searched using a linear search.

vector7.cpp

Demonstrates that a vector of non-system data can be searched using a linear search after being sorted. Then the search is exited if the value exceed.

vector8.cpp

Demonstrates that a vector of non-system data can be searched using a binary search after being sorted. Then the search is exited if the value exceed.

// program_id bst2.cpp // written_by don voils // date_written 11/3/2006 // // description Extends BST.CPP by adding a // function to display the binode // data values. // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst2.h" void main() { Date a_date[7]; a_date[0].set_date(3L,19L,1984L); a_date[1].set_date(5L,5L,1957L); a_date[2].set_date(11L,24L,1934L); a_date[3].set_date(9L,29L,1962L); a_date[4].set_date(1L,19L,1955L); a_date[5].set_date(9L,13L,1960L); a_date[6].set_date(9L,7L,1940L); bst<datatype> bst1; cout << "The following dates are being entered into the BST:" << endl; short index; for(index=0;index<7;++index) { cout << a_date[index] << "\n"; bst1.insert(a_date[index]); } char resp; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; cout << endl << endl << "The data value of the nodes are: " << endl; bst1.display(cout); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; cout << endl << endl; } void clear_screen() { for(short index=0;index<250;++index) cout << endl; } // header_id bst2.h // written_by don voils // date_written 11/3/2006 // // // descripton Implements a BST on general data // This header adds to the header bst.h // the ability to display the data of the nodes. // #ifndef BST #define BST class binode { public: datatype data; binode * left; binode * right; binode() { left = right = NULL; } binode(datatype value) { data = value; left = right = NULL; } binode(datatype value,binode* ptr1,binode * ptr2) { data = value; left = ptr1; right = ptr2; } }; template <typename datatype> class bst { private: binode * root; public: bst() { root = NULL; } ~bst() { binode * ptr, * parent; bool left_node; while(!empty()) { ptr = root; while((ptr->left!=NULL)||(ptr->right!=NULL)) { left_node = false; if(ptr->left!=NULL) { parent = ptr; ptr = ptr->left; left_node = true; } else { parent = ptr; ptr = ptr->right; } } if(root==ptr) root = NULL; else if(left_node) parent->left = NULL; else parent->right = NULL; delete ptr; } if(!empty()) cerr << endl << "The destructor did not work correctly." << endl << endl; } bool empty() { return (root == NULL); } void insert(datatype& item); bool search(datatype &item,binode* &location); void display(ostream & out); void traverse(ostream& out,binode * ptr); }; template<typename datatype> void bst<datatype>::display(ostream & out) { traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out, binode * ptr) { if(ptr != NULL) { traverse(out,ptr->left); out << ptr->data << "\n"; traverse(out,ptr->right); } } template<typename datatype> void bst<datatype>::insert(datatype& item) { binode* ptr = root, * parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; parent = ptr; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else found = true; } if(found) cerr << "The item " << item << " already is in the tree.\n"; else { ptr = new binode(item); if(parent == 0) root = ptr; else if(item < (parent->data)) parent->left = ptr; else parent->right = ptr; } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location) { binode* ptr = root; bool found = false; for(;;) { if(found || (ptr == NULL)) break; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else { found = true; location = ptr; } } return found; } #endif // program_id bst3.cpp // date_written 11/3/2006 // // program description Extends BST.CPP by adding a // function to delete a particular binode // ‥ // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst3.h" void main() { Date a_date[7]; a_date[0].set_date(3L,19L,1984L); a_date[1].set_date(5L,5L,1957L); a_date[2].set_date(11L,24L,1934L); a_date[3].set_date(9L,29L,1962L); a_date[4].set_date(1L,19L,1955L); a_date[5].set_date(9L,13L,1960L); a_date[6].set_date(9L,7L,1940L); bst<datatype> bst1; short index; for(index=0;index<7;++index) { bst1.insert(a_date[index]); } Date delete_date; char resp; do { clear_screen(); cout << endl << endl << "The data value of the nodes are: " << endl; bst1.display(cout); cout << endl<< endl << "What date do you want to delete? (mm/dd/yyyy) "; cin >> delete_date; cout << endl; bst1.delete_node(delete_date); cout << endl << endl << "The data value of the nodes are: " << endl; bst1.display(cout); cout << endl << endl << "Do you want to delete another? (Y/N) "; cin >> resp; }while((resp=='y') || (resp=='Y')); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; clear_screen(); cout << endl << endl; } void clear_screen() { for(short index=0;index<250;++index) cout << endl; } // header_id bst3.h // written_by don voils // date_written 11/3/2006 // // descripton Implements a BST on general data // This header adds to the header bst.h // the ability to display the data of the nodes. // #ifndef BST #define BST class binode { public: datatype data; binode * left; binode * right; binode() { left = right = NULL; } binode(datatype value) { data = value; left = right = NULL; } binode(datatype value,binode* ptr1,binode * ptr2) { data = value; left = ptr1; right = ptr2; } }; template <typename datatype> class bst { private: binode * root; public: bst() { root = NULL; } ~bst() { binode * ptr, * parent; bool left_node; while(!empty()) { ptr = root; while((ptr->left!=NULL)||(ptr->right!=NULL)) { left_node = false; if(ptr->left!=NULL) { parent = ptr; ptr = ptr->left; left_node = true; } else { parent = ptr; ptr = ptr->right; } } if(root==ptr) root = NULL; else if(left_node) parent->left = NULL; else parent->right = NULL; delete ptr; } if(!empty()) cerr << endl << "The destructor did not work correctly." << endl << endl; } bool empty() { return (root == NULL); } void insert(datatype& item); bool search(datatype &item,binode* &location,binode* &parent); void display(ostream & out); void traverse(ostream& out,binode * ptr); void delete_node(datatype& item); }; template<typename datatype> void bst<datatype>::display(ostream & out) { traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out,binode * ptr) { if(ptr != NULL) { traverse(out,ptr->left); out << ptr->data << "\n"; traverse(out,ptr->right); } } template<typename datatype> void bst<datatype>::insert(datatype& item) { binode* ptr = root, * parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; parent = ptr; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else found = true; } if(found) cerr << "The item " << item << " already is in the tree.\n"; else { ptr = new binode(item); if(parent == 0) root = ptr; else if(item < (parent->data)) parent->left = ptr; else parent->right = ptr; } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location, binode* &parent) { binode* ptr = root; parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; if(item < ptr->data) { parent = ptr; ptr = ptr->left; } else if(item > ptr->data) { parent = ptr; ptr = ptr->right; } else { found = true; location = ptr; } } return found; } template<typename datatype> void bst<datatype>::delete_node(datatype& item) { bool found; binode* ptr, *location, *parent; found = search(item,location,parent); if(!found) cerr << "Item not in the BST\n"; else { ptr = location; if((ptr->left != NULL) && (ptr->right != NULL)) { binode *successor = ptr->right; parent = ptr; while(successor->left != NULL) { parent = successor; successor = successor -> left; } ptr->data = successor->data;; ptr = successor; } binode * subtree = ptr->left; if(subtree==NULL) subtree = ptr->right; if(parent==NULL) root = subtree; else if(parent->left == ptr) parent->left = subtree; else parent->right = subtree; delete ptr; } } #endif // program_id bst4.cpp // written_by don voils // date_written 11/12/2006 // // description Extends BST.CPP by adding a // function to delete a particular binode // ‥ // // #include<iostream> #include<fstream> using namespace std; #include"date.h" typedef Date datatype; #include"bst4.h" void clear_screen(); void insert_from_file(bst<datatype> &bst1); void store_in_file(bst<datatype> &bst1); void save_file_destroy(bst<datatype> &bst1); void main() { Date a_date[7]; a_date[0].set_date(3L,19L,1984L); a_date[1].set_date(5L,5L,1957L); a_date[2].set_date(11L,24L,1934L); a_date[3].set_date(9L,29L,1962L); a_date[4].set_date(1L,19L,1955L); a_date[5].set_date(9L,13L,1960L); a_date[6].set_date(9L,7L,1940L); bst<datatype> bst1; datatype b_date; short which, index; char resp; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Insert data into the BST from the file" << endl << endl << "2. Insert data from the stored array"<< endl << endl << "3. Insert data into the BST from the keyboard" << endl << endl << "4. Is the BST empty?" << endl << endl << "5. Delete data from the BST" << endl << endl << "6. Display all of the elements of the list" << endl << endl << "7. Send the data from the BST to the file" << endl << endl << "8. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: insert_from_file(bst1); break; case 2: clear_screen(); cout << "The elements being inserted are: " << endl << endl; for(index=0;index<7;++index) { cout << a_date[index] << " "; bst1.insert(a_date[index]); } cout << endl << endl << "The array stored in the BST. " << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); cout << "What date do you want to insert into the BST? "; cin >> b_date; bst1.insert(b_date); cout << endl << endl << "The date " << b_date << " is stored in BST. " << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(bst1.empty()) cout << "The BST is empty."; else cout << "The BST is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); cout << "The dates in the BST are the following: " << endl; bst1.display(cout); cout << endl << endl << "What date do you want to delete from the BST? "; cin >> b_date; bst1.delete_node(b_date); cout << endl << endl << "The date " << b_date << " is stored in BST. " << endl << endl << "Continue? (Y/N)"; cin >> resp; break; break; case 6: clear_screen(); cout << "The dates in the BST are the following: " << endl; bst1.display(cout); cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 7: clear_screen(); save_file_destroy(bst1); cout << "The data in the BST is the following: " << endl << endl; bst1.display(cout); cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 8: break; default: break; } }while(which != 8); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } void insert_from_file(bst<datatype> &bst1) { clear_screen(); ifstream infile("date.dat",ios::binary|ios::in); if(!infile||infile.eof()) { cout << "\nError opening the file.\n"; return; } datatype b_date; while(infile) { infile.read((char*)&b_date,sizeof(datatype)); bst1.insert(b_date); } infile.close(); cout << endl << endl << "The data from the file was inserted " << "into the BST. " << endl << endl << "Continue? (Y/N)"; char resp; cin >> resp; } void save_file_destroy(bst<datatype> &bst1) { binode * ptr, * parent; ofstream outfile("date.dat",ios::binary | ios::out); if(!outfile) { cout << "Error opening the file."; char resp; cin >> resp; return; } datatype a_date; bool left_node; while(!bst1.empty()) { ptr = bst1.root; while((ptr->left!=NULL)||(ptr->right!=NULL)) { left_node = false; if(ptr->left!=NULL) { parent = ptr; ptr = ptr->left; left_node = true; } else { parent = ptr; ptr = ptr->right; } } if(bst1.root==ptr) bst1.root = NULL; else if(left_node) parent->left = NULL; else parent->right = NULL; outfile.write((char*)&(ptr->data),sizeof(datatype)); delete ptr; } } // header_id bst4.h // written_by don voils // date_written 11/3/2006 // // // descripton Implements a BST on general data // This header adds to the header bst.h // the ability to display the data of the nodes. // #ifndef BST #define BST class binode { public: datatype data; binode * left; binode * right; binode() { left = right = NULL; } binode(datatype value) { data = value; left = right = NULL; } binode(datatype value,binode* ptr1,binode * ptr2) { data = value; left = ptr1; right = ptr2; } }; template <typename datatype> class bst { private: binode * root; public: bst() { root = NULL; } ~bst() { binode * ptr, * parent; bool left_node; while(!empty()) { ptr = root; while((ptr->left!=NULL)||(ptr->right!=NULL)) { left_node = false; if(ptr->left!=NULL) { parent = ptr; ptr = ptr->left; left_node = true; } else { parent = ptr; ptr = ptr->right; } } if(root==ptr) root = NULL; else if(left_node) parent->left = NULL; else parent->right = NULL; delete ptr; } if(!empty()) cerr << endl << "The destructor did not work correctly." << endl << endl; } bool empty() { return (root == NULL); } void insert(datatype& item); bool search(datatype &item,binode* &location,binode* &parent); void display(ostream & out); void traverse(ostream& out,binode * ptr); void delete_node(datatype& item); friend void save_file_destroy(bst &bst1); }; template<typename datatype> void bst<datatype>::display(ostream & out) { traverse(out,root); } template<typename datatype> void bst<datatype>::traverse(ostream& out,binode * ptr) { if(ptr != NULL) { traverse(out,ptr->left); out << ptr->data << "\n"; traverse(out,ptr->right); } } template<typename datatype> void bst<datatype>::insert(datatype& item) { binode* ptr = root, * parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; parent = ptr; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else found = true; } if(found) cerr << "The item " << item << " already is in the tree.\n"; else { ptr = new binode(item); if(parent == 0) root = ptr; else if(item < (parent->data)) parent->left = ptr; else parent->right = ptr; } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location, binode* &parent) { binode* ptr = root; parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; if(item < ptr->data) { parent = ptr; ptr = ptr->left; } else if(item > ptr->data) { parent = ptr; ptr = ptr->right; } else { found = true; location = ptr; } } return found; } template<typename datatype> void bst<datatype>::delete_node(datatype& item) { bool found; binode* ptr, *location, *parent; found = search(item,location,parent); if(!found) cerr << "Item not in the BST\n"; else { ptr = location; if((ptr->left != NULL) && (ptr->right != NULL)) { binode *successor = ptr->right; parent = ptr; while(successor->left != NULL) { parent = successor; successor = successor -> left; } ptr->data = successor->data;; ptr = successor; } binode * subtree = ptr->left; if(subtree==NULL) subtree = ptr->right; if(parent==NULL) root = subtree; else if(parent->left == ptr) parent->left = subtree; else parent->right = subtree; delete ptr; } } #endif // program_id bst.cpp // written_by don voils // date_written 11/3/2006 // // description Demonstrates BST searching. // // #include<iostream> using namespace std; void clear_screen(); #include"date.h" typedef Date datatype; #include"bst.h" void main() { bool found; binode* location; Date a_date[8]; a_date[0].set_date(5L,5L,1977L); a_date[1].set_date(11L,24L,1934L); a_date[2].set_date(1L,19L,1955L); a_date[3].set_date(5L,5L,1957L); a_date[4].set_date(9L,13L,1960L); a_date[5].set_date(9L,29L,1962L); a_date[6].set_date(5L,5L,1977L); a_date[7].set_date(9L,7L,1940L); bst<datatype> bst1; cout << "The following dates are being entered into the BST:" << endl; short index; for(index=0;index<8;++index) { cout << a_date[index] << endl; bst1.insert(a_date[index]); } char resp; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; while((resp=='y')||(resp=='Y')) { clear_screen(); cout << "The following dates are in the BST:" << endl; short index; for(index=0;index<8;++index) { cout << a_date[index] << endl; } cout << endl << endl << "What Date do you want to search for in the BST? (mm/dd/yyyy) "; Date new_date; cin >> new_date; found = bst1.search(new_date, location); if(found) cout << endl << "The date " << new_date << " was found at location "<< location << endl; else cout << endl << "The date " << new_date << " was not found in the BST." << endl; cout << endl << endl << "Another search? (Y/N) "; cin >> resp; cout << endl << endl; } clear_screen(); } void clear_screen() { for(short index=0;index<250;++index) cout << endl; } // header_id bst.h // written_by don voils // date_written 11/3/2006 // // descripton Implements a BST on general data. // #ifndef BST #define BST class binode { public: datatype data; binode * left; binode * right; binode() { left = right = NULL; } binode(datatype value) { data = value; left = right = NULL; } binode(datatype value,binode* ptr1,binode * ptr2) { data = value; left = ptr1; right = ptr2; } }; template <typename datatype> class bst { private: binode * root; public: bst() { root = NULL; } ~bst() { binode * ptr, * parent; bool left_node; while(!empty()) { ptr = root; while((ptr->left!=NULL)||(ptr->right!=NULL)) { left_node = false; if(ptr->left!=NULL) { parent = ptr; ptr = ptr->left; left_node = true; } else { parent = ptr; ptr = ptr->right; } } if(root==ptr) root = NULL; else if(left_node) parent->left = NULL; else parent->right = NULL; delete ptr; } if(!empty()) cerr << endl << "The destructor did not work correctly." << endl << endl; } bool empty() { return (root == NULL); } void insert(datatype& item); bool search(datatype &item,binode* &location); }; template<typename datatype> void bst<datatype>::insert(datatype& item) { binode* ptr = root, * parent = NULL; bool found = false; for(;;) { if(found || (ptr == NULL)) break; parent = ptr; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else found = true; } if(found) cerr << "\nThe item " << item << " already is in the tree.\n\n"; else { ptr = new binode(item); if(parent == 0) root = ptr; else if(item < (parent->data)) parent->left = ptr; else parent->right = ptr; } } template<typename datatype> bool bst<datatype>::search(datatype &item,binode* &location) { binode* ptr = root; bool found = false; for(;;) { if(found || (ptr == NULL)) break; if(item < ptr->data) ptr = ptr->left; else if(item > ptr->data) ptr = ptr->right; else { found = true; location = ptr; } } return found; } #endif // program_id date.h // written_by don voils // date_written 9/2/2006 // // description This header contains the definition // of the class date that is used in many // different examples. // #ifndef DATE #define DATE class Date { private: long month, day, year; public: Date(){ } Date(long m, long d, long y) { month = m; day = d; year = y; } void get_date(); void set_date(long m, long d, long y); long last_day(long m, long y); long show_day(); long show_month(); long show_year(); bool leap_year(long y); Date operator +(long number_days); Date operator -(long number_days); long operator -(Date other_date); long days_since(long m, long d, long y); long f(long m,long y); long g(long m); bool incorrect_date(long m,long d,long y); bool operator <(Date a_date); bool operator <=(Date a_date); bool operator ==(Date a_date); bool operator !=(Date a_date); bool operator >(Date a_date); bool operator >=(Date a_date); friend ostream &operator << (ostream &stream, Date ab); friend istream &operator >> (istream &stream, Date &ab); }; ostream &operator << (ostream &stream, Date ab) { stream << ab.month << "/"; stream << ab.day << "/"; stream << ab.year <<" "; return stream; } istream &operator >> (istream &stream, Date &ab) { char slash; stream >> ab.month >> slash >> ab.day >> slash >> ab.year; return stream; } long Date::show_day() { return day; } long Date::show_month() { return month; } long Date::show_year() { return year; } void Date::get_date() { char dash; do { cin >> month >> dash >> day >> dash >> year; }while(incorrect_date(month,day,year)); } void Date::set_date(long m,long d,long y) { month = long(m); day = long(d); year = long(y); } Date Date::operator + (long number_days) { Date next_day; next_day.set_date(month,day,year); for(long index=1;index <=number_days;++index) { if (next_day.day < last_day(next_day.month,next_day.year)) { next_day.day += 1L; } else { if(next_day.month<12L) { next_day.month += 1L; next_day.day = 1L; } else { next_day.month = 1L; next_day.day = 1L; next_day.year += 1L; } } } return next_day; } Date Date::operator - (long number_days) { Date next_day; next_day.set_date(month,day,year); for(short index=1;index <= number_days;++index) { if (next_day.day != 1L) { next_day.day -= 1L; } else { if(next_day.month != 1L) { next_day.month -= 1L; next_day.day = last_day(next_day.month,next_day.year); } else { next_day.month = 12L; next_day.day = 31L; next_day.year -= 1L; } } } return next_day; } long Date::last_day(long m, long y) { long last_day; long days_in_month[]={0L, 31L, 28L, 31L, 30L, 31L, 30L, 31L, 31L, 30L, 31L, 30L, 31L}; if (m!=2L) last_day=days_in_month[m]; else if (leap_year(y)) last_day =29L; else last_day=days_in_month[m]; return last_day; } bool Date::leap_year(long y) { bool leap_test; if (((y%4L== 0L) && (y%100L != 0L)) || (y%400L == 0L)) leap_test=true; else leap_test=false; return leap_test; } bool Date::incorrect_date(long m, long d, long y) { bool not_correct; if ((m>=1L) && (m<=12L) && (d>=1L) && (d<=last_day(m,y))) not_correct = false; else not_correct = true; return not_correct; } long Date::days_since(long m,long d,long y) { long number = 1461L*f(m,y)/4L + 153L*g(m)/5L + d; return(number); } long Date::f(long m,long y) { long number = (m<=2L) ? y - 1L :y; return(number); } long Date::g(long m) { long number = (m<=2L) ? m + 13L : m + 1L; return(number); } long Date::operator - (Date b_date) { long days; days = days_since(month,day,year) -days_since(b_date.month,b_date.day,b_date.year); return days; } bool Date::operator >(Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date > second_date)? true : false; return resp; } bool Date::operator >=(Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date >= second_date)? true : false; return resp; } bool Date::operator ==(Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date == second_date)? true : false; return resp; } bool Date::operator !=(Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date != second_date)? true : false; return resp; } bool Date::operator <(Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date < second_date)? true : false; return resp; } bool Date::operator <= (Date a_date) { bool resp; long first_date, second_date; first_date=days_since(month,day,year); second_date=days_since(a_date.month,a_date.day,a_date.year); resp = (first_date <= second_date)? true : false; return resp; } #endif // program_id linked2.cpp // date_written 10/22/2006 // // // program description Demonstrates a search on a linked list. // of dates. // // #include<iostream> using namespace std; // The data searched will be date objects from the follow file. // #include"date.h" // The data used will be objects from the date class. // typedef Date datatype; // The link list class is contained in the following header. // The linear search function has been added as a member // function to the class. // #include"linked.h" void clear_screen(); void main() { short which; char resp; bool found; datatype item, value; List list1; do { clear_screen(); cout << "Select an option:" << endl << endl << "0. Search for an item " << endl << endl << "1. Insert an item at the front" << endl << endl << "2. Insert an item at the end" << endl << endl << "3. Insert an item after another item" << endl << endl << "4. Is the list empty?" << endl << endl << "5. Delete an item at the front" << endl << endl << "6. Delete an item at the end" << endl << endl << "7. Delete an item after another item" << endl << endl << "8. Display all of the elements of the linked list" << endl << endl << "9. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 0: clear_screen(); cout << "Enter the value to find in the list: (mm/dd/yyyy) "; cin >> item; node *location; found = list1.linearsearch(item,location); if(found) cout << endl << endl << "The item " << item << " was found " << " at location " << location << endl; else cout << endl << endl << "The item " << item << " was not found." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 1: clear_screen(); cout << "Enter the value to add to the front of the list: (mm/dd/yyyy) "; cin >> item; list1.insert_front(item); break; case 2: clear_screen(); cout << "Enter the value to add to the end of the list: (mm/dd/yyyy) "; cin >> item; list1.insert_end(item); break; case 3: clear_screen(); cout << "Enter the value in the list to be inserted after: (mm/dd/yyyy) "; cin >> value; cout << endl << endl << "Enter the value to add to the list after " << value << ": "; cin >> item; list1.insert_middle(item,value); break; case 4: clear_screen(); if(list1.empty()) cout << "The list is empty."; else cout << "The list is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); list1.delete_front(); break; case 6: clear_screen(); list1.delete_end(); break; case 7: clear_screen(); cout << "Enter the value in the list to be deleted: (mm/dd/yyyy) "; cin >> value; list1.delete_middle(value); break; case 8: clear_screen(); list1.display(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 9: break; default: break; } }while(which != 9); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id linked.h // written_by don voils // date_written 10/1/2006 // description This file contains the definition of the classes node and List. // #ifndef LINKED #define LINKED class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; class List { private: node* first; public: List() { first = NULL; } ~List() { node * ptr; while(first!=NULL) { ptr = first; first = first->next; delete ptr; } } bool empty() { return (first==NULL); } void insert_front(datatype new_value) { node * newptr = new node(new_value,first); first = newptr; } void insert_end(datatype new_value) { node * newptr = new node(new_value,NULL); if(first!=NULL) { node * preptr = first; while((preptr->next)!=NULL) preptr = preptr->next; preptr->next = newptr; } else first = newptr; } void insert_middle(datatype new_value,datatype value) { if(!empty()) { node * preptr = first; while(((preptr->next)!=NULL) && ((preptr->data)!=value)) preptr = preptr->next; if((preptr->data)==value) { node * newptr = new node(new_value,preptr->next); preptr->next = newptr; } } } void delete_front() { if(!empty()) { node *ptr = first; first = first->next; delete ptr; } } void delete_end() { if(!empty()) { if((first->next)==NULL) { delete first; first = NULL; } else { node *ptr; node *preptr = first; while(((preptr->next)->next)!=NULL) preptr = preptr->next; ptr = preptr->next; preptr -> next = NULL; delete ptr; } } } void delete_middle(datatype value) { if(!empty()) { if((first->next)!=NULL) { node *ptr; node *preptr = first; while((preptr->next)!=NULL && (preptr->data)!=value) preptr = preptr->next; ptr = preptr->next; if(ptr!=NULL && ((preptr->data)==value)) { preptr->next = ptr->next; delete ptr; } } } } void display() { cout << "The elements in the list are:" << endl; node * ptr = first; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } // The follow function provides the search for the linked list. // template<typename datatype> bool linearsearch(datatype &item, node* &location) { bool found = false; location = first; for(;;) { if(found || (location == NULL)) break; if(item == location->data) found = true; else location = location->next; } return found; } }; #endif // program_id vector6.cpp // written_by don voils // date_written 10/1/2006 // // description Demonstrates that a vector of non-system // data can be searched using a linear // search. // // #include<iostream> #include<vector> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool linearsearch(const vector<Datatype> & a_vector, Datatype &item, short &location) { bool found = false; location = 0; for(;;) { if(found || (location == a_vector.size())) break; if(item == a_vector[location]) found = true; else location++; } return found; } void main() { bool found; short location; char resp; Date date1(1L,1L,1970L); Date date2(1L,19L,1955L); Date date3(5L,5L,1957L); Date date4(9L,13L,1960L); Date date5(9L,29L,1962L); Date date6(11L,24L,1934L); Date date7(9L,7L,1940L); Date date_array[ ] = {date1,date2,date3,date4,date5,date6}; vector<Date> vector1(date_array,date_array+6); do { clear_screen(); cout << "The Date vector contains the following elements:" << endl; short index; for(index=0;index < (int)vector1.size(); ++index) cout << vector1[index] << endl; cout << endl << endl; cout << "What Date do you want to search for in the vector? (mm/dd/yyyy) "; Date new_date; cin >> new_date; found = linearsearch(vector1,new_date,location); if(found) cout << endl << "The date " << new_date << " was found at location "<< location + 1<< endl; else cout << endl << "The date " << new_date << " was not found in the vector." << endl; cout << endl << endl << "Another search? (Y/N) "; cin >> resp; cout << endl << endl; }while((resp=='y')||(resp=='Y')); } void clear_screen() { for(short index=1;index<250;++index) cout << endl; } // program_id vector7.cpp // date_written 10/1/2006 // // description Demonstrates that a vector of non-system // data can be searched using a linear // search after being sorted. Then the // search is exited if the value exceed. // // #include<iostream> #include<vector> #include<algorithm> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool linearsearch(const vector<Datatype> & a_vector, Datatype &item, short &location) { bool found = false; location = 0; for(;;) { if(found || (location == a_vector.size()) || (item < a_vector[location])) break; if(item == a_vector[location]) found = true; else location++; } cout << endl << "The number of records counted was: " << location + 1 << endl <<endl; return found; } void main() { bool found; short location; char resp; Date date1(1L,1L,1970L); Date date2(1L,19L,1955L); Date date3(5L,5L,1957L); Date date4(9L,13L,1960L); Date date5(9L,29L,1962L); Date date6(11L,24L,1934L); Date date7(9L,7L,1940L); Date date_array[ ] = {date1, date2, date3, date4, date5, date6}; vector<Date> vector1(date_array,date_array+6); do { clear_screen(); cout << "The date vector contains the following elements:" << endl; short index; for(index=0;index < (int)vector1.size(); ++index) cout << vector1[index] << endl; sort(vector1.begin(),vector1.end()); cout << endl << endl << "The date vector after the sort contains the following elements:" << endl; for(index=0;index < (int) vector1.size(); ++index) cout << vector1[index] << endl; cout << endl << endl << "What date do you want to search for in the vector? (mm/dd/yyyy) "; Date new_date; cin >> new_date; found = linearsearch(vector1, new_date, location); if(found) cout << endl << "The date " << new_date << " was found at location "<< location + 1<< endl; else cout << endl << "The date " << new_date << " was not found in the vector." << endl; cout << endl << endl << "Another search? (Y/N) "; cin >> resp; cout << endl << endl; }while((resp=='y')||(resp=='Y')); } void clear_screen() { for(short index=1;index<250;++index) cout << endl; } // program_id vector8.cpp // written_by don voils // date_written 10/1/2006 // // description Demonstrates that a vector of non-system // data can be searched using a binary // search after being sorted. Then the // search is exited if the value exceed. // // #include<iostream> #include<vector> #include<algorithm> using namespace std; // Header contains the type of data being searched. // #include"date.h" // The generalized data type of the example is set to date // typedef Date Datatype; // Function Declarations // void clear_screen(); template<typename Datatype> bool binarysearch(const vector<Datatype> & a_vector, Datatype &item, short &location) { bool found = false; location = 0; short counted = 0, first = 0, last = (int)a_vector.size() - 1; for(;;) { if(found || (first > last)) break; ++counted; location = (first + last)/2; if(item < a_vector[location]) last = location - 1; else if(item > a_vector[location]) first = location + 1; else found = true; } cout << endl << "The number of records counted was: " << counted << endl <<endl; return found; } void main() { bool found; short location; char resp; Date date1(1L,1L,1970L); Date date2(1L,19L,1955L); Date date3(5L,5L,1957L); Date date4(9L,13L,1960L); Date date5(9L,29L,1962L); Date date6(11L,24L,1934L); Date date7(9L,7L,1940L); Date date_array[ ] = {date1, date2, date3, date4, date5, date6}; vector<Date> vector1(date_array, date_array+6); do { clear_screen(); cout << "The date vector contains the following elements:" << endl; short index; for(index=0;index < (int)vector1.size(); ++index) cout << vector1[index] << endl; sort(vector1.begin(),vector1.end()); cout << endl << endl << "The Date vector after the sort contains the following elements:" << endl; for(index=0;index < (int)vector1.size(); ++index) cout << vector1[index] << endl; cout << endl << endl << "What Date do you want to search for in the vector? (mm/dd/yyyy) "; Date new_date; cin >> new_date; found = binarysearch(vector1,new_date,location); if(found) cout << endl << "The date " << new_date << " was found at location "<< location + 1 << endl; else cout << endl << "The date " << new_date << " was not found in the vector." << endl; cout << endl << endl << "Another search? (Y/N) "; cin >> resp; cout << endl << endl; }while((resp=='y')||(resp=='Y')); } void clear_screen() { for(short index=1;index<250;++index) cout << endl; }

Категории