1. Given the following class and sample program:
//
// list.h - a singly linked list
//
#include
#include
class List
{
public:
List() { head = NULL; }
List( char *str );
~List() { release(); }
int getLength( void );
void append( List& nlst );
void add( char *str ); // adds to front of list
void delete( void )
{
ListEntry *temp = head;
current = head = head->next;
delete temp;
}
int search( char *str );
ListEntry *getFirst( void )
{
current = head;
return head;
}
ListEntry *getNext( void )
{
ListEntry *temp = current;
current = current->next;
return temp;
}
void printList( void );
void release( void );
private:
typedef
struct list_entry
{
list_entry *next;
char *data;
} ListEntry;
ListEntry *head // head of list
, *current // current node in list
;
};
//
// list.cpp
//
List::List( char *str )
{
// code this
}
int List::getLength( void )
{
// code this
}
void List::append( List& nlst )
{
// code this
}
void List::add( char *str )
{
ListEntry *temp = new ListEntry; // new element
temp->next = head;
temp->data = new char[strlen(str)+1];
strcpy( temp->data, str );
current = head = temp;
}
void List::printList( void )
{
ListEntry *temp = head;
cout << "********* Beginning of List ***********" << endl;
while ( temp != NULL )
{
cout << temp->data << endl;
temp = temp->next;
}
cout << "********* End of List ****************" << endl;
}
int List::search( char *str )
{
// code this
}
void List::release( void )
{
while ( head != NULL )
del();
}
int main()
{
List *p;
{
List w;
w.add( "First" );
w.add( "Second" );
w.add( "Third" );
w.add( "Fourth" );
w.printList();
cout << "\nThere are "
<< w.getLength()
<< " items in the list."
<< endl;
cout << "Searching for Second in list. " << endl;
w.search( "Second" ) ? cout << "\tFound Match " << endl
: cout << "\tMatch Not Found" << endl;
w.delete();
w.printList();
p =
p->printList();
cout << "\nThere are "
<< w.getLength()
<< " items in the list."
<< endl;
cout << "Searching for Fourth in list. " << endl;
w.search( "Fourth" ) ? cout << "\tFound Match " << endl
: cout << "\tMatch Not Found" << endl;
}
p->printList();
//
// another List
//
List list2("Item #1");
list2.add( "Item #2" );
list2.add( "Item #3" );
list2.add( "Item #4" );
list2.add( "Item #5" );
list2.printList();
cout << "\nThere are "
<< list2.getLength()
<< " items in the list."
<< endl;
//
// create another list
//
List list3;
list3.add( "jim" );
list3.add( "mary" );
list3.add( "david" );
list3.add( "laura" );
list3.pr_list();
//
// append one list to another
//
list3.append( list2 );
list3.printList();
}
1. What happens upon exit from the inner block?
2. Code the following member functions:
A. // List constructor whose initializer is a character array
// that is the value held at the first element of the list
List::List( char *str );
B. // length returns the length of the list, number of nodes
int List::getLength( void );
C. // return true if a match is found, false if not
int List::search( char *str );
3. Write a member function **append** that will add a
list to the rear of the existing list, then clear the
list passed by zeroing the head.
void List::append( List& nlst );
Given the following class implementation:
//
// clock.cpp - implement a clock class and example program
//
#include
class Clock
{
public:
Clock( unsigned int i )
{
tot_secs = i;
secs = tot_secs % 60;
mins = (tot_secs / 60 ) % 60;
hours = (tot_secs / 3600 ) % 24;
days = tot_secs / 86400;
}
void tick(); // add one second
friend Clock& operator++(Clock& ck);
friend ostream& operator<<( ostream& out, Clock& x);
private:
unsigned int
tot_secs
, secs
, mins
, hours
, days
;
void print( void ); // formatted printout
};
void Clock::tick( void )
{
// code this
}
void Clock::print( void )
{
cout << days << "d : " << hours << " h : "
<< mins << "m : " << secs << " s" << endl;
}
Clock& operator++(Clock& ck)
{
// code this
}
ostream& operator<<( ostream& out, Clock& x)
{
}
int main()
{
Clock t1(59), t2(172799);
cout << "Initial times are " << endl;
cout << t1;
cout << t2;
++t1;
++t2; // t1++ or t2++ are the same
cout << "After one second - times are " << endl;
cout << t1;
cout << t2;
}
4. A. Implement the following method:
void tick(); // add one second
B. Implement the following method:
friend Clock& operator++(Clock& ck);
C. Define the prototype for the above method and
implement the method as an inline member function
and not as a friend function.
D. Implement the following method:
friend ostream& operator<<( ostream& out, Clock& x);