#include <iostream>
#include <stdexcept>
using namespace std;
template <typename T>
class node
{
private:
node( const T& x, node* p = NULL )
{
data = x;
next = p;
}
T data;
node* next;
template<typename S> friend class cQueue;
};
template <typename T>
class cQueue
{
public:
cQueue() // default constructor
{
last = NULL;
count = 0;
}
cQueue( const cQueue& q ) // copy constructor
{
copyQueue(q);
}
virtual ~cQueue() // queue destructor
{
deleteQueue();
}
cQueue& operator= ( const cQueue& q ) // overloaded assignment operator
{
if ( this != &q )
{
deleteQueue();
copyQueue( q );
}
return *this;
}
size_t size() const // return the size of the queue
{
return count;
}
void insert( const T& v ) // insert an value at the end of the queue
{
node<T>* last = tmp;
insert( tmp->data );
tmp = tmp->next;
}
T remove() // remove the front item from the queue
{
delete node<T>* front;
}
const T& front() const // return a reference to the front item
{
}
void print( ostream& os = cout ) const // print the contents of the list
{
}
private:
void deleteQueue() // delete nodes in "this" queue
{
if ( last != NULL )
{
node<T>* tmp = last->next;
while ( tmp != last )
{
node<T>* doomed = tmp;
tmp = tmp->next;
delete doomed;
}
last = NULL;
count = 0;
delete tmp;
}
}
void copyQueue( const cQueue& q ) // copy q queue into "this" queue ("this" queue must be empty)
{
last = NULL;
count = 0;
if ( q.last != NULL )
{
node<T>* tmp = q.last->next;
for ( size_t i = 0; i < q.count; i++ )
{
insert( tmp->data );
tmp = tmp->next;
}
}
count = q.count;
}
node<T>* last; // a pointer to the last node in the list
size_t count; // queue length
};
template <typename T> // overloaded ostream operator<<
ostream& operator<< ( ostream& os, const cQueue<T>& q )
{
q.print( os );
return os;
}
template <typename T>
void passByValue( cQueue<T> q )
{
q.insert( 40 );
cout << "queue inside passByValue: " << q << endl;
}
int main()
{
{
cQueue<int> q;
q.insert(10);
q.insert(20);
q.insert(30);
cout << "initial queue: " << q << endl;
passByValue( q );
cout << "queue after call to passByValue: " << q << endl;
cout << "front item: " << q.front() << endl;
q.remove();
cout << "front item removed: " << q << endl;
}
}
Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.
When asked, what has been your best career decision?
Deciding to stick with EE.
Being involved with EE helped me to grow personally and professionally.
Connect with Certified Experts to gain insight and support on specific technology challenges including:
We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE