Intermediate Business Programming with C++

Open table as spreadsheet

Programs

Demonstrates the use of

alist.h

This file contains the definition of the class aList.

anewlist.h

This file contains the definition of the class aNewList. This class differs from the class aList in that it permits insertion and deletion.

date.h

This header contains the definition of the date class which demonstrates input and output by overloading << and >>

date_queue.cpp

This program simulates a long queue.

dblinked.cpp

Demonstrates the use of a doubly linked list.

dblinked.h

This header file works with the program: dblinked.cpp. It contains the definition of the class List which implements a doubly linked list.

factors.cpp

This program displays the prime factorization of numbers entered by the user. It is based upon the header file stack.h which contains a general definition of a stack.

gcd.cpp

This program demonstrates the concept of recursion.

linked.cpp

Demonstrates the use of a linked list.

linked.h

This files contains the definition of the class: List that implements a linked list.

list1.cpp

Demonstrates the use of dynamic memory allocation to create a list. In this example the list contained longs but this could have been any data type.

list2.cpp

Demonstrates the use of dynamic memory allocation to create a list. In this example the list contained longs but this could have been any data type. This program differs from list1.cpp in that it permits the insertion and the deletion of elements.

long_queue.cpp

This file contains the methods for the class Queue that is contained in the file: long_queue.h.

long_queue.h

The file contains the definition of the class: Queue whose methods are defined in the file long_gueue.cpp.

new_queue.h.

This header creates a queue of any data type.

new_stack.cpp

This program simulates a generalized stack

queue1.cpp

This program simulates a queue based on a linked list.

queue1.h

This header contains the definition of a queue based upon a linked list.

queue2.h

This header contains the definition of a queue that adds the feature of a pointer to the back of the queue so that the queue is more efficient when adding nodes to the queue.

queue3.h

This header contains the definition of a circular queue.

stack1.h

Contains the definition of a stack using a linked list.

stack1.cpp

Demonstrates how a stack can be implemented using a linked list.

stack.cpp

This program contains the definition of a class that simulates a generalized stack.

stacks.h

This header file contains a class definition of a generalized stack class based upon an array. The stack type and the size of the stack must be provided by the calling program.

templateQueue.h

This header creates a template queue for any data type.

templateStack.h

 

templateQueueList.cpp

This program simulates a queue based on a linked list and templates.

templateQueueList.h

This file contains the definition of a template queue based upon a list.

templateStackList.cpp

Demonstrates how a template stack can be implemented using a linked list.

templateStackList.h

This header file contains the definition of a template stack that is based upon a linked list.

useTemplateQueue.cpp

This program simulates a long queue using templates.

useTemplateStack.cpp

This file contains the definition of the template stack.

useQueue.cpp

This program simulates a long queue.

// program_id aList.h // written_by Don Voils // date_written 9/12/2006 // Description This file contains the definition of // the class aList. // #ifndef ALIST #define ALIST class aList { private: datatype *ptr; long top; long max; public: aList(long maximum) { max = maximum; ptr = new datatype[max]; top = -1; } ~aList() { delete [] ptr; } void add_to(datatype value) { if(!is_full()) { ++top; *(ptr+top) = value; } else { max += 10; datatype* new_ptr = new datatype[max]; for(long index=0;index<=top;++index) *(new_ptr+index)= *(ptr+index); ++top; *(new_ptr+top) = value; delete [] ptr; ptr = new_ptr; } } datatype show_element(long position) { datatype value; if((position-1) > top) throw position; else value = *(ptr + (position-1)); return value; } void show_all() { cout << "The elements in the list are the following:" << endl; for(short index=0;index<=top;++index) cout << *(ptr+index) << endl; } bool is_empty() { return(top==-1); } bool is_full() { return(top==(max-1)); } }; #endif // program_id aNewList.h // written_by Don Voils // date_written 9/12/2006 // // Description This file contains the definition of the // class aNewList. This class differs from // the class aList in that it permits // insertion and deletion. // #ifndef ANEWLIST #define ANEWLIST class aNewList { private: datatype *ptr; long top; long max; public: aNewList(long maximum) { max = maximum; ptr = new datatype[max]; top = -1; } ~aNewList() { delete [] ptr; } void add_to(datatype value) { if(!is_full()) { ++top; *(ptr+top) = value; } else { max += 10; datatype* new_ptr = new datatype[max]; for(long index=0;index<=top;++index) *(new_ptr+index)= *(ptr+index); ++top; *(new_ptr+top) = value; delete [] ptr; ptr = new_ptr; } } datatype show_element(long position) { datatype value; if((position-1) > top) throw position; else value = *(ptr + (position-1)); return value; } void show_all() { cout << "The elements in the list are the following:" << endl; for(short index=0;index<=top;++index) cout << *(ptr+index) << endl; } void insert_it(long numb,datatype value) { --numb; if(top < max) { for(short index=short(top); index > numb;--index) *(ptr + (index+1)) = *(ptr + index); ++top; *(ptr + (numb+1)) = value; } else cout << endl << endl << "Error list is full" << endl << endl; } void delete_it(long numb) { --numb; for(short index=short(numb);index<short(top);++index) *(ptr + index) = *(ptr + (index+1)); --top; } bool is_empty() { return(top==-1); } bool is_full() { return(top==(max-1)); } }; #endif // program_id date.h // author don voils // date written 9/5/2006 // // description This header contains the definition // of the date class which demonstrates // input and output by overloading << and >> // #ifndef DATE #define DATE class Date { private: int theMonth, theDay, theYear; public: int getMonth() { return theMonth; } int getDay() { return theDay; } int getYear() { return theYear; } friend ostream &operator << (ostream &stream, Date ab); friend istream &operator >> (istream &stream, Date &ab); }; ostream &operator << (ostream &stream, Date ab) { stream << ab.theMonth << "/"; stream << ab.theDay << "/"; stream << ab.theYear << endl; return stream; } istream &operator >> (istream &stream, Date &ab) { char slash; stream >> ab.theMonth >> slash >> ab.theDay >> slash >> ab.theYear; return stream; } #endif // program_id date_queue.cpp // author don voils // date written 9/17/2000 // // description This program simulates a long queue. // #include<iostream> using namespace std; void clear_screen(); // // The date class is included to demonstrate the generality of // the class: Queue contained in the header: new_queue.h that is // included below. // #include"date.h" // // The variable capacity is only 10 so that the queue is easy to test. // const long capacity = 10; // // The variable QueueType is now a general data type in the // header new_queue.h. The typedef is done out here so that // that its data type could be changed relatively easy‥ // typedef Date QueueType; #include"new_queue.h" // // Below is the test program to determine whether the queue class // works or not. // void main() { short which; char resp; Date item; Queue a_queue; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the queue" << endl << endl << "2. Is the queue empty?" << endl << endl << "3. Is the queue full?" << endl << endl << "4. What is the front element in the queue?" << endl << endl << "5. Remove the front element of the queue" << endl << endl << "6. Display all of the elements of the queue" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); if(!a_queue.isFullQ()) { cout << "Enter a date to add to the queue (mm/dd/yyyy): "; cin >> item; a_queue.addQ(item); cout << endl << "The queue is not full so an element was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } else { cout << "The queue is full and so no element was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } break; case 2: clear_screen(); if(a_queue.isEmptyQ()) cout << "The queue is empty."; else cout << "The queue is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); if(a_queue.isFullQ()) cout << "The queue is full."; else cout << "The queue is not full."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(!a_queue.isEmptyQ()) cout << "The Front element in the queue is: " << a_queue.frontQ(); else cout << "The queue is empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); if(!a_queue.isEmptyQ()) { a_queue.removeQ(); cout << "The front element has been removed. "; } else cout << "There were no elements to remove"; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: clear_screen(); a_queue.displayQ(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id dblinked.cpp // written_by don voils // date_written 10/24/2006 // // description Demonstrates the use of a // doubly linked list. // // #include<iostream> #include<iomanip> using namespace std; typedef long datatype; #include"dblinked.h" void clear_screen(); void main() { short which; char resp; datatype item, value; List list1; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Insert at the front" << endl << endl << "2. Insert at the end" << endl << endl << "3. Insert in the middle" << endl << endl << "4. Is the list empty?" << endl << endl << "5. Delete at the front" << endl << endl << "6. Delete at the end" << endl << endl << "7. Delete in the middle" << endl << endl << "8. Display all of the elements of the list" << endl << endl << "9. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter the value to add to the front of the list: "; cin >> item; list1.insert_front(item); break; case 2: clear_screen(); cout << "Enter the value to add to the end of the list: "; cin >> item; list1.insert_end(item); break; case 3: clear_screen(); cout << "Enter the value in the list to be inserted after: "; 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: "; 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 dblinked.h // written_by Don Voils // date_written 10/24/2006 // // description This header file works with the program: // dblinked.cpp. It contains the definition // of the class List which implements a doubly // linked list. // #ifndef DBLINKED #define DBLINKED class node { public: datatype data; node * next; node * previous; node(datatype value,node* ptr1, node * ptr2) { data = value; next = ptr1; previous = ptr2; } }; 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,NULL); if(!empty()) first->previous = newptr; first = newptr; } void insert_end(datatype new_value) { node * newptr = new node(new_value,NULL,NULL); if(!empty()) { node * preptr = first; while((preptr->next)!=NULL) preptr = preptr->next; preptr->next = newptr; newptr->previous = preptr; } 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); if(preptr->next!=NULL) (preptr->next)->previous = newptr; preptr->next = newptr; } } } void delete_front() { if(!empty()) { node *ptr = first; if((ptr->next)!=NULL) (ptr->next)->previous=NULL; first = ptr->next; delete ptr; } } void delete_end() { if(!empty()) { if((first->next)==NULL) { delete first; first = NULL; } else { node *preptr = first; while((preptr->next)!=NULL) preptr = preptr->next; (preptr->previous)->next = NULL; delete preptr; } } } void delete_middle(datatype value) { if(!empty()) { if((first->next)==NULL) { if((first->data)==value) { delete first; first = NULL; } } else { node *preptr = first; while((preptr->next)!=NULL && (preptr->data)!=value) preptr = preptr->next; if((preptr->data)==value) { if(preptr == first) first = preptr->next; if((preptr->previous)!=NULL) (preptr->previous)->next = preptr->next; if(preptr->next!=NULL) (preptr->next)->previous = preptr->previous; delete preptr; } } } } void display() { if(!empty()) { cout << "The elements in the list are:" << endl; cout << setw(12) <<"Previous" << setw(12) << "Node" << setw(12) <<"Next" << endl; node * ptr = first; while(ptr != NULL) { if(ptr->previous != NULL) cout << setw(12) << ptr->previous->data; else cout << setw(12) << "NULL"; cout << setw(12) << ptr->data; if(ptr->next != NULL) cout << setw(12) << ptr->next->data << endl; else cout << setw(12) << "NULL" << endl; ptr = ptr->next; } } else cout << "The list is empty." << endl << endl; } }; #endif // program_id factors.cpp // written_by don voils // date_written 3/2/2006 // // description This program displays the prime factorization // of numbers entered by the user. It is based // upon the header file stack.h which contains // a general definition of a stack. // #include<iostream> using namespace std; const long capacity = 128; typedef long StackElementType; #include"stacks.h" long factor(long a); void clear_screen(); void main() { Stack s; long numb; char resp; do { clear_screen(); cout << "What is the number you want to factor? "; cin >> numb; clear_screen(); long n = numb; try { do { s.Push(factor(n)); long divisor = s.Top(); n = n / divisor; }while(n>1); cout << "The following is the prime factorization of " << numb <<endl << " "; while(!s.isEmpty()) { cout << s.Top(); s.Pop(); if(!s.isEmpty()) cout << " * "; } } catch(int) { clear_screen(); cerr << "Number is either prime or too large for functon."; while(!s.isEmpty()) { s.Pop(); } } cout << endl << endl << "Another factorization? (Y/N) "; cin >> resp; clear_screen(); }while(resp=='y' || resp=='Y'); } long factor(long n) { long primes[15] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47}; long dividend; short index; for(index = 0;index < 15; ++index) { dividend = n / primes[index]; if(dividend * primes[index] == n) break; } if(index >= 15) { throw 1; } return primes[index]; } void clear_screen() { for(short index = 1;index <= 250;++index) cout << endl; } // program_id GCD.CPP // author don voils // date written 9/24/2006 // // description: This program demonstrates the concept // of recursion. // #include<iostream> using namespace std; int gcd(int numb1, int numb2); void main(void) { int int1, int2; cout << "What is the first number? "; cin >> int1; cout << endl << endl << "What is the second number? "; cin >> int2; cout << endl << endl << "The GCD of " << int1 << " and " << int2 << " is " << gcd(int1,int2); } int gcd(int numb1, int numb2) { return (numb1<0) ? gcd(-numb1,numb2):((numb2==0)? numb1:gcd(numb2,numb1%numb2)); } // program_id linked.cpp // written_by don voils // date_written 10/22/2006 // // description Demonstrates the use of a linked list. // // #include<iostream> using namespace std; typedef long datatype; #include"linked.h" void clear_screen(); void main() { short which; char resp; datatype item, value; List list1; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Insert at the front" << endl << endl << "2. Insert at the end" << endl << endl << "3. Insert in the middle" << endl << endl << "4. Is the list empty?" << endl << endl << "5. Delete at the front" << endl << endl << "6. Delete at the end" << endl << endl << "7. Delete in the middle" << endl << endl << "8. Display all of the elements of the list" << endl << endl << "9. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter the value to add to the front of the list: "; cin >> item; list1.insert_front(item); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 2: clear_screen(); if(list1.empty()) cout << "The list is empty so you must first add to the beginning." << endl; else { cout << "Enter the value to add to the end of the list: "; cin >> item; list1.insert_end(item); } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(list1.empty()) cout << "The list is empty so you must first add to the beginning." << endl; else { cout << "Enter the value in the list to be inserted after: "; cin >> value; cout << endl << endl << "Enter the value to add to the list after " << value << ": "; cin >> item; list1.insert_middle(item,value); } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; 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(); if(list1.empty()) cout << "The list is empty. So there are no elements to delete." << endl << endl; else { list1.delete_front(); cout << endl << "The element at the front has been deleted." << endl; } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: clear_screen(); if(list1.empty()) cout << "The list is empty. So there are no elements to delete." << endl << endl; else { list1.delete_end(); cout << endl << "The element at the end has been deleted." << endl; } cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 7: clear_screen(); if(list1.empty()) cout << "The list is empty. So there are no elements to delete." << endl << endl; else { cout << "Enter the value to be deleted after: "; cin >> value; list1.delete_middle(value); cout << endl << "The element after " << value << " has been deleted." << endl; } cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 8: clear_screen(); if(list1.empty()) cout << "The list is empty. So there are no elements to show." << endl << endl; else 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/7/2006 // // description This file contains the definition // of the class List that implements // a linked 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; } } }; #endif // program_id list1.cpp // written_by don voils // date_written 10/17/2006 // // descripton: Demonstrates the use of dynamic // memory allocation to create a list. // In this example the list contained // longs but this could have been any // data type. // #include<iostream> using namespace std; typedef long datatype; void clear_screen(); #include"aList.h" void main() { short which; char resp; long item; aList list1(5); do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the list" << endl << endl << "2. Is the list empty?" << endl << endl << "3. Is the list full?" << endl << endl << "4. Show a particular element?" << endl << endl << "5. Display all of the elements of the list" << endl << endl << "6. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter a long to add to the list: "; cin >> item; list1.add_to(item); cout << endl << "The element was added." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 2: clear_screen(); if(list1.is_empty()) cout << "The list is empty."; else cout << "The list is not empty."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(list1.is_full()) cout << "The list is full."; else cout << "The list is not full."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(list1.is_empty()) cout << "The list is empty."; else { cout << "Enter the number of the position to show: "; cin >> item; clear_screen(); try { if(item <= 0) throw item; else { try { long element = list1.show_element(item); cout << "The element in position " << item << " is " << element << endl << endl; } catch(long position) { cout << position << " is beyond the end of the list. " << endl; } } } catch(long item) { cout << "The element position " << item << " is not within the list. " << endl; } } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(list1.is_empty()) cout << "The list is empty."; else list1.show_all(); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: break; default: break; } }while(which != 6); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id list2.cpp // written_by don voils // date_written 10/17/2006 // // descripton: Demonstrates the use of dynamic // memory allocation to create a list. // In this example the list contained // longs but this could have been any // data type. This program differs from // list1.cpp in that it permits the // insertion and the deletion of elements. // #include<iostream> using namespace std; typedef long datatype; void clear_screen(); #include"aNewList.h" void main() { short which; char resp; datatype item; long position; aNewList list1(5); do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the list" << endl << endl << "2. Insert an element in the list" << endl << endl << "3. Delete an element in the list" << endl << endl << "4. Is the list empty?" << endl << endl << "5. Is the list full?" << endl << endl << "6. Show a particular element?" << endl << endl << "7. Display all of the elements of the list" << endl << endl << "8. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter a long to add to the list: "; cin >> item; list1.add_to(item); cout << endl << "The element was added." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 2: clear_screen(); if(list1.is_empty()) { cout << "The list is empty. You need to add items" << " before using this option. " << endl; } else { if(list1.is_full()) cout << "The list is full." << endl; else { cout << "What item do you want to insert in " << "the list? "; cin >> item; cout << endl << endl << "After what position do you want to " << " insert the item? "; cin >> position; if(position < 1) cout << endl << "The postion must be greater than 0." << endl; else { try { long elementFound = list1.show_element(position); list1.insert_it(position,item); cout << endl << "The element was inserted." << endl; } catch(long position) { cout << position << " is not a position in the list." << endl; } } } } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(list1.is_empty()) cout << "The list is empty. There must be elements" << endl << "in the list before you can delete any." << endl; else { cout << "Enter the position of the element to " << "delete "; cin >> position; if(position < 1) cout << "The position must be greater than 0. " << endl; else { try { long elementFound = list1.show_element(position); list1.delete_it(position); cout << endl << "The element was deleted." << endl; } catch(long position) { cout << position << " is not a position in the list." << endl; } } } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(list1.is_empty()) cout << "The list is empty." << endl; else cout << "The list is not empty." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(list1.is_full()) cout << "The list is full." << endl; else cout << "The list is not full." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: clear_screen(); if(list1.is_empty()) cout << "The list is empty." << endl << "You need to have elements in the list " << "before this option." << endl; else { long positionToShow; cout << "Enter the number of the position to show: "; cin >> positionToShow; if(positionToShow < 1) { cout << "You must use a position greater than 0." << endl; } else { clear_screen(); try { long elementFound = list1.show_element(positionToShow); cout << "The element in position " << positionToShow << " is " << elementFound << endl << endl; } catch(long position) { cout << position << " is beyond the end of the list." << endl; } } } cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 7: clear_screen(); if(list1.is_empty()) cout << "The list is empty." << endl; else { list1.show_all(); } cout << 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; } // program_id long_queue.cpp // written_by Don Voils // date_written 9/17/2006 // // Description This file contains the methods for the class Queue // that is contained in the file: long_queue.h. // #include<iostream> using namespace std; #include "long_queue.h" Queue::Queue() { myFront = myBack = 0; } bool Queue::isEmptyQ() { return (myFront == myBack); } bool Queue::isFullQ() { return (myFront == ((myBack + 1) % capacity)); } void Queue::addQ(const long& value) { if (!isFullQ()) { theArray[myBack] = value; myBack = (myBack + 1) % capacity; } } long Queue::frontQ() { return theArray[myFront]; } void Queue::removeQ() { if(!isEmptyQ()) myFront = (myFront + 1) % capacity; else cout << "The queue was empty so no elements were removed." << endl; } void Queue::displayQ() { if(!isEmptyQ()) { cout << "The following are the elements in the queue:" << endl; long index; for(index = myFront; index != myBack; index = ((index +1) % capacity)) cout << theArray[index] << endl; } else cout << "The queue has no elements." << endl; } // program_id long_queue.h // written_by don voils // date_written 9/17/2006 // // description The class defined in this header simulates // a long gueue. // #ifndef QUEUE #define QUEUE const long capacity = 10; class Queue { /***** Data Members *****/ private: long theArray[capacity]; long myFront; long myBack; /***** Function Members *****/ public: Queue(); bool isEmptyQ(); bool isFullQ(); void addQ(const long& value); long frontQ (); void removeQ(); void displayQ(); }; // end of class declaration #endif // program_id long_stack.cpp // author don voils // date written 9/3/2006 // // program description This program simulates a long stack. // #include<iostream> using namespace std; void clear_screen(); // // The variable capacity is only 10 so that the stack is easy to test. // const long capacity = 10; class stack { private: long myTop; long theStack[capacity]; // // The member function declarations are the prototypes // because the definitions should be separate and in // another file. // public: stack(); bool isEmpty(); bool isFull(); void Push(const long &item); long Top(); void Pop(); void Display(); }; // // Member function definitions. // // Notice that the simple member functions are declared as inline. // inline stack::stack() { myTop=-1; } bool stack::isEmpty() { bool isEmpty = true; if(myTop > -1) isEmpty = false; return isEmpty; } bool stack::isFull() { bool isFull = true; if(myTop < capacity - 1) isFull = false; return isFull; } inline long stack::Top() { return theStack[myTop]; } // // Notice that before an element is added, it is determined // whether the stack is full. If it is, an error messages // is sent. // // Notice that since item is not changed it is modified by const // also notice the reference operator. Why was that used? // void stack::Push(const long &item) { if(isFull()) cerr << "The stack is full."; else { ++myTop; theStack[myTop] = item; } } // // Notice that before an element is removed, it is determined // whether the stack is empty. If it is, an error messages // is sent. // void stack::Pop() { if(isEmpty()) cerr << "The stack is empty."; else --myTop; } void stack::Display() { if(isEmpty()) cout << "The stack is empty. " << endl; else { cout<< "From the top down the stack elements are:" << endl << endl; for(long index=myTop; index >=0; --index) cout << theStack[short(index)] << endl; } } // // Below is the test program to determine whether the stack class // works or not. // void main() { short which; char resp; long item; stack theStack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. Is the stack full?" << endl << endl << "4. What is the top element in the stack?" << endl << endl << "5. Pop the top element of the stack" << endl << endl << "6. Display all of the elements of the stack" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); if(theStack.isFull()) cout << "The stack is full." << endl; else { cout << "Enter a long to add to the stack: "; cin >> item; theStack.Push(item); } break; case 2: clear_screen(); if(theStack.isEmpty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(theStack.isFull()) cout << "The stack is full."; else cout << "The stack is not full."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(theStack.isEmpty()) cout << "The stack is empty."; else cout << "The top element in the stack is: " << theStack.Top(); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(theStack.isEmpty()) cout << "The stack is empty."; else { theStack.Pop(); cout << "The top element has been removed. "; } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: clear_screen(); theStack.Display(); cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id new_queue.h // author: Don Voils // date_written: 9/17/2006 // // descripton: This header creates a queue of any data type. // #ifndef NEW_QUEUE #define NEW_QUEUE class Queue { /***** Data Members *****/ private: QueueType my_Array[capacity]; long myFront, myBack; /***** Function Members *****/ public: Queue(); bool isEmptyQ() const; bool isFullQ() const; void addQ(const QueueType& value); QueueType frontQ () const; void removeQ(); void displayQ() const; }; // end of class declaration Queue::Queue() { myFront = myBack = 0; } bool Queue::isEmptyQ() const { return (myFront == myBack); } bool Queue::isFullQ() const { return (myFront == ((myBack + 1) % capacity)); } void Queue::addQ(const QueueType& value) { if (!isFullQ()) { my_Array[myBack] = value; myBack = (myBack + 1) % capacity; } } QueueType Queue::frontQ() const { return my_Array[myFront]; } void Queue::removeQ() { if(!isEmptyQ()) myFront = (myFront + 1) % capacity; else cout << "The queue was empty so no elements were removed." << endl; } void Queue::displayQ() const { if(!isEmptyQ()) { cout << "The following are the elements in the queue:" << endl; long index; for(index = myFront; index != myBack; index = ((index +1) % capacity)) cout << my_Array[index] << endl; } else cout << "The queue has no elements." << endl; } #endif // program_id new_stack.cpp // author don voils // date written 9/3/2006 // // description This program simulates a generalized stack. // #include<iostream> using namespace std; #include"date.h" void clear_screen(); // // The variable theCapacity is only 10 so that the stack is easy to test. // const long theCapacity = 10; typedef Date stackElementType; class Stack { private: long myTop; stackElementType theArray[theCapacity]; // // The member function declarations are the prototypes // because the definitions should be separate and in // another file. // public: Stack(); bool isEmpty(); bool isFull(); void Push(const stackElementType &item); stackElementType Top(); void Pop(); void display(); }; // // Member function definitions. // // Notice that the simple member functions are declared as inline. // inline Stack::Stack() { myTop=-1; } bool Stack::isEmpty() { bool isEmpty = true; if(myTop > -1) isEmpty = false; return isEmpty; } bool Stack::isFull() { bool isFull = true; if(myTop < theCapacity - 1) isFull = false; return isFull; } inline stackElementType Stack::Top() { return theArray[myTop]; } // // Notice that before an element is added it is determined // whether the stack is full. If it is, an error messages // is sent. // // // Notice that since item is not changed it is modified by const // also notice the reference operator. void Stack::Push(const stackElementType &item) { if(isFull()) cerr << "The stack is full."; else { ++myTop; theArray[myTop] = item; } } // // Notice that before an element is removed it is determined // whether the stack is emplty. If it is, an error messages // is sent. // void Stack::Pop() { if(isEmpty()) { cerr << "The stack is empty."; } else --myTop; } void Stack::display() { cout<< "From the top down the stack elements are:" << endl << endl; for(long index=myTop; index >=0; --index) cout << theArray[short(index)] << endl; } // // Below is the test program to determine whether the stack class // works or not. // void main() { short which; char resp; stackElementType item; Stack aStack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. Is the stack full?" << endl << endl << "4. What is the top element in the stack?" << endl << endl << "5. Pop the top element of the stack" << endl << endl << "6. Display all of the elements of the stack" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the stack: "; cin >> item; aStack.Push(item); break; case 2: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(aStack.isFull()) cout << "The stack is full."; else cout << "The stack is not full."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else cout << "The top element in the stack is: " << aStack.Top() << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else { aStack.Pop(); cout << "The top element has been removed. " << endl; } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else aStack.display(); cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id queue1.cpp // author don voils // date written 10/24/2006 // // description: This program simulates a queue // based on a linked list. // #include<iostream> using namespace std; void clear_screen(); typedef long datatype; #include"queue1.h" void main() { short which; char resp; datatype item; Queue a_queue; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the queue" << endl << endl << "2. Is the queue empty?" << endl << endl << "3. What is the front element in the queue?" << endl << endl << "4. Remove the front element of the queue" << endl << endl << "5. Display all of the elements of the queue" << endl << endl << "6. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the queue: "; cin >> item; a_queue.Push(item); break; case 2: clear_screen(); if(a_queue.empty()) cout << "The queue is empty."; else cout << "The queue is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); if(!a_queue.empty()) cout << "The Front element in the queue is: " << a_queue.Top(); else cout << "The queue is empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(!a_queue.empty()) { a_queue.Pop(); cout << "The front element has been removed. "; } else cout << "There were no elements to remove"; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); a_queue.display(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: break; default: break; } }while(which != 6); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id queue1.h // written_by Don Voils // date_written 9/1/2006 // // description This header contains the definition // of a queue based upon a linked list. // #ifndef QUEUE #define QUEUE class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; class Queue { private: node* myTop; public: Queue() { myTop = NULL; } ~Queue() { node * ptr; while(myTop!=NULL) { ptr = myTop; myTop = myTop->next; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node * newptr = new node(new_value,NULL); if(myTop!=NULL) { node * preptr = myTop; while((preptr->next)!=NULL) preptr = preptr->next; preptr->next = newptr; } else myTop = newptr; } void Pop() { if(!empty()) { node *ptr = myTop; myTop = myTop->next; delete ptr; } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; node * ptr = myTop; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } }; #endif // program_id queue2.h // written_by don Voils // date_written 9/1/2006 // // description This header contains the definition // of a queue that adds the feature of // a pointer to the back of the queue // so that the queue is more efficient // when adding nodes to the queue. #ifndef QUEUE #define QUEUE class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; class Queue { private: node* myTop, * myBack; public: Queue() { myTop = myBack = NULL; } ~Queue() { node * ptr; while(myTop!=NULL) { ptr = myTop; myTop = myTop->next; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node * newptr = new node(new_value,NULL); if(!empty()) { node * preptr = myBack; preptr->next = myBack = newptr; } else myTop = myBack = newptr; } void Pop() { if(!empty()) { node *ptr = myTop; myTop = myTop->next; delete ptr; } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; node * ptr = myTop; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } }; #endif // program_id queue3.h // written_by Don Voils // date_written 9/1/2006 // // description This header contains the definition // of a circular queue. // #ifndef QUEUE #define QUEUE class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; class Queue { private: node* myTop; public: Queue() { myTop = NULL; } ~Queue() { node * ptr; while(myTop!=NULL) { ptr = myTop; if(myTop != myTop->next) myTop = myTop->next; else myTop = NULL; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node * newptr = new node(new_value,0); if(!empty()) { node * preptr = myTop; while((preptr->next)!= myTop) preptr = preptr->next; preptr->next = newptr; newptr->next = myTop; } else { myTop = newptr; newptr->next = newptr; } } void Pop() { if(!empty()) { if(myTop==(myTop->next)) { node *ptr = myTop; myTop = NULL; delete ptr; } else { node * preptr = myTop->next; while((preptr->next)!= myTop) preptr = preptr->next; preptr->next = myTop->next; node *ptr = myTop; myTop = myTop->next; delete ptr; } } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; if(!empty()) { node * ptr = myTop; do { cout << ptr->data << endl; ptr = ptr->next; }while(ptr != myTop); } } }; #endif // program_id stack1.cpp // written_by don voils // date_written 10/24/2006 // // description Demonstrates how a stack can be implemented // using a linked list. // #include<iostream> using namespace std; typedef long datatype; #include"stack1.h" void clear_screen(); void main() { short which; char resp; datatype item; Stack a_stack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. What is the top element in the stack?" << endl << endl << "4. Pop the top element of the stack" << endl << endl << "5. Display all of the elements of the stack" << endl << endl << "6. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the stack: "; cin >> item; a_stack.Push(item); break; case 2: clear_screen(); if(a_stack.empty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); cout << "The top element in the stack is: " << a_stack.Top(); cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); a_stack.Pop(); cout << "The top element has been removed. " << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); a_stack.display(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: break; default: break; } }while(which != 6); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id stack1.h // written_by don voils // date_written 10/24/2006 // // description: Contains the definition of a stack using a linked list. // #ifndef STACK #define STACK class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; class Stack { private: node* myTop; public: Stack() { myTop = NULL; } ~Stack() { node * ptr; while(myTop!=NULL) { ptr = myTop; myTop = myTop->next; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node * newptr = new node(new_value,myTop); myTop = newptr; } void Pop() { if(!empty()) { node *ptr = myTop; myTop = myTop->next; delete ptr; } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; node * ptr = myTop; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } }; #endif // program_id stack.cpp // author don voils // date written 9/3/2006 // // description This program simulates a generalized stack. // #include<iostream> using namespace std; void clear_screen(); // // The variable theCapacity is only 10 so that the stack is easy to test. // const long theCapacity = 10; typedef long stackElementType; class stack { private: long myTop; stackElementType theArray[theCapacity]; // // The member function declarations are the prototypes // because the definitions should be separate and in // another file. // public: stack(); bool isEmpty(); bool isFull(); void Push(const stackElementType &item); stackElementType Top(); void Pop(); void display(); }; // // Member function definitions. // // Notice that the simple member functions are declared as inline. // inline stack::stack() { myTop=-1; } bool stack::isEmpty() { bool isEmpty = true; if(myTop > -1) isEmpty = false; return isEmpty; } bool stack::isFull() { bool isFull = true; if(myTop < theCapacity-1) isFull = false; return isFull; } inline stackElementType stack::Top() { return theArray[myTop]; } // // Notice that before an element is added, it is determined // whether the stack is full. If it is, an error messages // is sent. // // // Notice that since item is not changed, it is modified by const // also notice the reference operator. void stack::Push(const stackElementType &item) { if(isFull()) { cout << "The stack is full." << endl << endl << "Continue? "; char resp; cin >> resp; } else { ++myTop; theArray[myTop] = item; } } // // Notice that before an element is removed, it is determined // whether the stack is emplty. If it is, an error messages // is sent. // void stack::Pop() { if(isEmpty()) { cerr << "The stack is empty."; } else --myTop; } void stack::display() { cout<< "From the top down the stack elements are:" << endl << endl; for(long index=myTop; index >=0; --index) cout << theArray[short(index)] << endl; } // // Below is the test program to determine whether the stack class // works or not. // void main() { short which; char resp; stackElementType item; stack aStack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. Is the stack full?" << endl << endl << "4. What is the top element in the stack?" << endl << endl << "5. Pop the top element of the stack" << endl << endl << "6. Display all of the elements of the stack" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the stack: "; cin >> item; aStack.Push(item); break; case 2: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(aStack.isFull()) cout << "The stack is full."; else cout << "The stack is not full."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(aStack.isEmpty()) cout << "The stack has no elements." << endl; else cout << "The top element in the stack is: " << aStack.Top(); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(aStack.isEmpty()) cout << "The stack has no elements." << endl; else { aStack.Pop(); cout << "The top element has been removed. " << endl; } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: clear_screen(); if(aStack.isEmpty()) cout << "The stack has no elements. "<< endl; else aStack.display(); cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id stacks.h // written_by don voils // date_written 3/2/2006 // // description This header file contains a class definition // of a generalized stack class based upon an array. // The stack type and the size of the stack must be // provided by the calling program. // #ifndef STACK #define STACK class Stack { private: long myTop; StackElementType theStack[capacity]; // // The member function declarations are the prototypes // because the definitions should be separate and in // another file. // public: Stack(); bool isEmpty(); bool isFull(); void Push(const StackElementType &item); StackElementType Top(); void Pop(); void Display(); }; // // Member function definitions. // // Normally these would be in another file. // // Notice that the simple member functions are declared as inline. // inline Stack::Stack() { myTop=-1; } bool Stack::isEmpty() { bool isEmpty = true; if(myTop > -1) isEmpty = false; return isEmpty; } bool Stack::isFull() { bool isFull = true; if(myTop < capacity - 1) isFull = false; return isFull; } inline StackElementType Stack::Top() { return theStack[myTop]; } // // Notice that before an element is added it is determined // whether the stack is full. If it is, an error messages // is sent. // // // Notice that since item is not changed it is modified by const // also notice the reference operator. void Stack::Push(const StackElementType &item) { if(isFull()) cerr << "The stack is full."; else { ++myTop; theStack[myTop] = item; } } // // Notice that before an element is removed it is determined // whether the stack is emplty. If it is, an error messages // is sent. // void Stack::Pop() { if(isEmpty()) { cerr << "The stack is empty."; } else --myTop; } void Stack::Display() { cout<< "From the top down the stack elements are:" << endl << endl; for(short index= (short)myTop; index >=0; --index) cout << theStack[index] << endl; } #endif // program_id templateQueue.h // author: Don Voils // date_written: 9/17/2006 // // descripton: This header creates a template queue for any data type. // #ifndef TEMPLATEQUEUE #define TEMPLATEQUEUE template<typename QueueType> class Queue { /***** Data Members *****/ private: QueueType my_Array[capacity]; long myFront, myBack; /***** Function Members *****/ public: Queue(); bool isEmptyQ() const; bool isFullQ() const; void addQ(const QueueType& value); QueueType frontQ () const; void removeQ(); void displayQ() const; }; // end of class declaration template<typename QueueType> Queue<typename QueueType>::Queue() { myFront = myBack = 0; } template<typename QueueType> bool Queue<typename QueueType>::isEmptyQ() const { return (myFront == myBack); } template<typename QueueType> bool Queue<typename QueueType>::isFullQ() const { return (myFront == ((myBack + 1) % capacity)); } template<typename QueueType> void Queue<typename QueueType>::addQ(const QueueType& value) { if (!isFullQ()) { my_Array[myBack] = value; myBack = (myBack + 1) % capacity; } } template<typename QueueType> QueueType Queue<typename QueueType>::frontQ() const { return my_Array[myFront]; } template<typename QueueType> void Queue<typename QueueType>::removeQ() { if(!isEmptyQ()) myFront = (myFront + 1) % capacity; else cout << "The queue was empty so no elements were removed." << endl; } template<typename QueueType> void Queue<typename QueueType>::displayQ() const { if(!isEmptyQ()) { cout << "The following are the elements in the queue:" << endl; long index; for(index = myFront; index != myBack; index = ((index +1) % capacity)) cout << my_Array[index] << endl; } else cout << "The queue has no elements." << endl; } #endif // program_id templateQueueList.cpp // author don voils // date written 9/24/2006 // // description This program simulates a queue // based on a linked list and templates. // #include<iostream> using namespace std; void clear_screen(); #include"templateQueueList.h" void main() { short which; char resp; long item; Queue<long> a_queue; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the queue" << endl << endl << "2. Is the queue empty?" << endl << endl << "3. What is the front element in the queue?" << endl << endl << "4. Remove the front element of the queue" << endl << endl << "5. Display all of the elements of the queue" << endl << endl << "6. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the queue: "; cin >> item; a_queue.Push(item); break; case 2: clear_screen(); if(a_queue.empty()) cout << "The queue is empty." << endl; else cout << "The queue is not empty." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(!a_queue.empty()) cout << "The Front element in the queue is: " << a_queue.Top() << endl; else cout << "The queue is empty." << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(!a_queue.empty()) { a_queue.Pop(); cout << "The front element has been removed. " << endl; } else cout << "There were no elements to remove" << endl; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(a_queue.empty()) cout << "The queue is empty." << endl; else a_queue.display(); cout << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: break; default: break; } }while(which != 6); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id templateQueueList.h // written_by Don Voils // date_written 6/9/2006 // // Description This file contains the definition // of a template queue based upon // a list. // #ifndef QUEUE #define QUEUE template<typename datatype> class node { public: datatype data; node * next; node(datatype value,node* ptr) { data = value; next = ptr; } }; template<typename datatype> class Queue { private: node<datatype>* myTop; public: Queue() { myTop = NULL; } ~Queue() { node<datatype> * ptr; while(myTop!=NULL) { ptr = myTop; myTop = myTop->next; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node<datatype> * newptr = new node<datatype>(new_value,NULL); if(myTop!=NULL) { node<datatype> * preptr = myTop; while((preptr->next)!=NULL) preptr = preptr->next; preptr->next = newptr; } else myTop = newptr; } void Pop() { if(!empty()) { node<datatype> *ptr = myTop; myTop = myTop->next; delete ptr; } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; node<datatype> * ptr = myTop; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } }; #endif // program_id templateStack.h // written_by Don Voils // date_written 9/1/2006 // // Description This file contains the definition of the // template stack. // #ifndef STACK #define STACK // // The variable theCapacity is only 10 so that the stack is easy to test. // const long theCapacity = 10; template<typename stackElementType> class stack { private: long myTop; stackElementType theArray[theCapacity]; // // The member function declarations are the prototypes // because the definitions should be separate and in // another file. // public: stack(); bool isEmpty(); bool isFull(); void Push(const stackElementType &item); stackElementType Top(); void Pop(); void Output(); void display(); }; template<typename stackElementType> stack<typename stackElementType>::stack() { myTop=-1; } template<typename stackElementType> bool stack<typename stackElementType>::isEmpty() { bool isEmpty = true; if(myTop > -1) isEmpty = false; return isEmpty; } template<typename stackElementType> bool stack<typename stackElementType>::isFull() { bool isFull = true; if(myTop < theCapacity - 1) isFull = false; return isFull; } template<typename stackElementType> stackElementType stack<typename stackElementType>::Top() { return theArray[myTop]; } template<typename stackElementType> void stack<typename stackElementType>::Output() { long index; for(index=0;index<=myTop;++index) cout << theArray[index] << endl; } // // Notice that before an element is added it is determined // whether the stack is full. If it is, an error messages // is sent. // // // Notice that since item is not changed it is modified by const // also notice the reference operator. template<typename stackElementType> void stack<typename stackElementType>::Push(const stackElementType &item) { if(isFull()) cerr << "The stack is full."; else { ++myTop; theArray[myTop] = item; } } // // Notice that before an element is removed it is determined // whether the stack is emplty. If it is, an error messages // is sent. // template<typename stackElementType> void stack<typename stackElementType>::Pop() { if(isEmpty()) { cerr << "The stack is empty."; } else --myTop; } template<typename stackElementType> void stack<typename stackElementType>::display() { cout<< "From the top down the stack elements are:" << endl << endl; for(long index=myTop; index >=0; --index) cout << theArray[short(index)] << endl; } #endif // program_id templateStackList.cpp // written_by Don Voils // date_written 10/24/2006 // // description Demonstrates how a template stack can be implemented // using a linked list. // // // // // #include<iostream> using namespace std; #include"templateStackList.h" void clear_screen(); void main() { short which; char resp; long item; Stack<long> a_stack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. What is the top element in the stack?" << endl << endl << "4. Pop the top element of the stack" << endl << endl << "5. Display all of the elements of the stack" << endl << endl << "6. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the stack: "; cin >> item; a_stack.Push(item); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 2: clear_screen(); if(a_stack.empty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 3: clear_screen(); if(a_stack.empty()) cout << "The stack is empty."; else cout << "The top element in the stack is: " << a_stack.Top(); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 4: clear_screen(); if(a_stack.empty()) cout << "The stack is empty."; else { a_stack.Pop(); cout << "The top element has been removed. "; } cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 5: clear_screen(); if(a_stack.empty()) cout << "The stack is empty."; else a_stack.display(); cout << endl << endl << "Continue? (Y/N) "; cin >> resp; break; case 6: break; default: break; } }while(which != 6); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id templateStackList.h // written_by Don Voils // date_written 10/24/2006 // // Description This header file contains the definition of a // template stack that is based upon a linked list. // #ifndef TEMPLATESTACKLIST #define TEMPLATESTACKLIST template<typename datatype> class node { public: datatype data; node<typename datatype> * next; node<typename datatype>(datatype value,node* ptr) { data = value; next = ptr; } }; template<typename datatype> class Stack { private: node<typename datatype>* myTop; public: Stack() { myTop = NULL; } ~Stack() { node<typename datatype> * ptr; while(myTop!=NULL) { ptr = myTop; myTop = myTop->next; delete ptr; } } bool empty() { return (myTop==NULL); } void Push(datatype new_value) { node<typename datatype> * newptr = new node<typename datatype>(new_value,myTop); myTop = newptr; } void Pop() { if(!empty()) { node<typename datatype> *ptr = myTop; myTop = myTop->next; delete ptr; } } datatype Top() { return myTop->data; } void display() { cout << "The elements in the list are:" << endl; node<typename datatype> * ptr = myTop; while(ptr != NULL) { cout << ptr->data << endl; ptr = ptr->next; } } }; #endif // program_id useQueue.cpp // author don voils // date written 9/17/2006 // // description This program simulates a long queue. // #include<iostream> using namespace std; void clear_screen(); #include "long_queue.h" // // Below is the test program to determine whether the queue class // works or not. // void main() { short which; char resp; long item; Queue a_queue; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the queue" << endl << endl << "2. Is the queue empty?" << endl << endl << "3. Is the queue full?" << endl << endl << "4. What is the front element in the queue?" << endl << endl << "5. Remove the front element of the queue" << endl << endl << "6. Display all of the elements of the queue" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter a long to add to the queue: "; cin >> item; if(!a_queue.isFullQ()) { a_queue.addQ(item); cout << endl << "The queue is not full so an " << "element was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } else { cout << "The queue is full and so no element " << "was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } break; case 2: clear_screen(); if(a_queue.isEmptyQ()) cout << "The queue is empty."; else cout << "The queue is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); if(a_queue.isFullQ()) cout << "The queue is full."; else cout << "The queue is not full."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(!a_queue.isEmptyQ()) cout << "The Front element in the queue is: " << a_queue.frontQ(); else cout << "The queue is empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); if(!a_queue.isEmptyQ()) { a_queue.removeQ(); cout << "The front element has been removed. "; } else cout << "There were no elements to remove"; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: clear_screen(); a_queue.displayQ(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id useTemplateQueue.cpp // author don voils // date written 9/17/2006 // // description This program simulates a long queue // using templates. // #include<iostream> using namespace std; void clear_screen(); // // The date class is included to demonstrate the generality of // the class: Queue contained in the header: newQueue.h that is // included below. // #include"date.h" // // The variable capacity is only 10 so that the queue is easy to test. // const long capacity = 10; #include"templateQueue.h" // // Below is the test program to determine whether the queue class // works or not. // void main() { short which; char resp; Date item; Queue<Date> aQueue; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the queue" << endl << endl << "2. Is the queue empty?" << endl << endl << "3. Is the queue full?" << endl << endl << "4. What is the front element in the queue?" << endl << endl << "5. Remove the front element of the queue" << endl << endl << "6. Display all of the elements of the queue" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); if(!aQueue.isFullQ()) { cout << "Enter a date to add to the " << "queue (mm/dd/yyyy): "; cin >> item; aQueue.addQ(item); cout << endl << "The queue is not full so an " << "element was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } else { cout << "The queue is full and so no element " << "was added." << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; } break; case 2: clear_screen(); if(aQueue.isEmptyQ()) cout << "The queue is empty."; else cout << "The queue is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); if(aQueue.isFullQ()) cout << "The queue is full."; else cout << "The queue is not full."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(!aQueue.isEmptyQ()) cout << "The Front element in the queue is: " << aQueue.frontQ(); else cout << "The queue is empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); if(!aQueue.isEmptyQ()) { aQueue.removeQ(); cout << "The front element has been removed. "; } else cout << "There were no elements to remove"; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: clear_screen(); aQueue.displayQ(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } inline void clear_screen() { for(short index=1;index<=250;++index) cout << endl; } // program_id useTemplateStack.cpp // author don voils // date written 6/30/2006 // // description This program simulates a template stack. // #include<iostream> using namespace std; // Include the header of whatever data type is // to be used in the template stack. // #include"date.h" void clear_screen(); // Include the header of the template stack class. // #include"templateStack.h" // // Below is the test program to determine whether the stack class // works or not. // void main() { short which; char resp; Date item; stack<Date> aStack; do { clear_screen(); cout << "Select an option:" << endl << endl << "1. Add to the stack" << endl << endl << "2. Is the stack empty?" << endl << endl << "3. Is the stack full?" << endl << endl << "4. What is the top element in the stack?" << endl << endl << "5. Pop the top element of the stack" << endl << endl << "6. Display all of the elements of the stack" << endl << endl << "7. Exit the program." << endl << endl << endl <<endl << "Which option? "; cin >> which; switch(which) { case 1: clear_screen(); cout << "Enter an element to add to the stack: (mm/dd/yyyy) "; cin >> item; aStack.Push(item); break; case 2: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty."; else cout << "The stack is not empty."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 3: clear_screen(); if(aStack.isFull()) cout << "The stack is full."; else cout << "The stack is not full."; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 4: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else cout << "The top element in the stack is: " << aStack.Top() << endl; cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 5: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else { aStack.Pop(); cout << "The top element has been removed. " << endl; } cout << endl << endl << "Continue? (Y/N)"; cin >> resp; break; case 6: clear_screen(); if(aStack.isEmpty()) cout << "The stack is empty" << endl; else aStack.display(); cout << endl << "Continue? (Y/N)"; cin >> resp; break; case 7: break; default: break; } }while(which != 7); clear_screen(); } void clear_screen() { for(short index=1;index<=250;++index) cout << endl; }

Категории