Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C++ Programming. Please make sure program compiles and ALL parts are completed f

ID: 3845066 • Letter: C

Question

C++ Programming. Please make sure program compiles and ALL parts are completed for a thumbs up. Parts to be completed listed below, and I will upload all source code underneath.

config.h:

/**
* Linked List class (Lab 5) configuration file.
* Activate test #N by defining the corresponding LAB5_TESTN to have the value 1.
*/

#define LAB5_TEST1   0   // 1 means test with int instead of char
#define LAB5_TEST2   0   // Activate moveToBeginning (prog exercise 2)
#define LAB5_TEST3   0   // Activate insertBefore (prog exercise 3)

ListLinked.h:

//--------------------------------------------------------------------
//
// Laboratory 5 ListLinked.h
//
// Class declaration for the linked implementation of the List ADT
//
//--------------------------------------------------------------------

#ifndef LISTLINKED_H
#define LISTLINKED_H

#pragma warning( disable : 4290 )

#include <stdexcept>
#include <iostream>

using namespace std;

template <typename DataType>
class List {
public:
List(int ignored = 0);
List(const List& other);
List& operator=(const List& other);
~List();

void insert(const DataType& newDataItem) throw (logic_error);
void remove() throw (logic_error);
void replace(const DataType& newDataItem) throw (logic_error);
void clear();

bool isEmpty() const;
bool isFull() const;

void gotoBeginning() throw (logic_error);
void gotoEnd() throw (logic_error);
bool gotoNext() throw (logic_error);
bool gotoPrior() throw (logic_error);

DataType getCursor() const throw (logic_error);

// Programming exercise 2
void moveToBeginning () throw (logic_error);

// Programming exercise 3
void insertBefore(const DataType& newDataItem) throw (logic_error);
  
void showStructure() const;

private:
class ListNode {
public:
   ListNode(const DataType& nodeData, ListNode* nextPtr);

   DataType dataItem;
   ListNode* next;
};

ListNode* head;
ListNode* cursor;

};

#endif

ListLinked.cpp:


#include "ListLinked.h"

// ListNode member functions

template <typename DataType>
List<DataType>::ListNode::ListNode(const DataType& nodeData, ListNode* nextPtr)
{
   this->dataItem = nodeData;
   this->next = nextPtr;
}

// List member functions

template <typename DataType>
List<DataType>::List(int ignored = 0)
{
}

template <typename DataType>
List<DataType>::List(const List& other)
{
}

template <typename DataType>
List<DataType>& List<DataType>::operator=(const List& other)
{
}

template <typename DataType>
List<DataType>::~List()
{
}

template <typename DataType>
void List<DataType>::insert(const DataType& newDataItem) throw (logic_error)
{
}

template <typename DataType>
void List<DataType>::remove() throw (logic_error)
{
}

template <typename DataType>
void List<DataType>::replace(const DataType& newDataItem) throw (logic_error)
{
}

template <typename DataType>
void List<DataType>::clear()
{
}

template <typename DataType>
bool List<DataType>::isEmpty() const
{
   return false;
}

template <typename DataType>
bool List<DataType>::isFull() const
{
   return false;
}

template <typename DataType>
void List<DataType>::gotoBeginning() throw (logic_error)
{
}

template <typename DataType>
void List<DataType>::gotoEnd() throw (logic_error)
{
}

template <typename DataType>
bool List<DataType>::gotoNext() throw (logic_error)
{
   return false;
}

template <typename DataType>
bool List<DataType>::gotoPrior() throw (logic_error)
{
   return false;
}

template <typename DataType>
DataType List<DataType>::getCursor() const throw (logic_error)
{
   DataType t;
   return t;
}

template <typename DataType>
void List<DataType>::moveToBeginning () throw (logic_error)
{
}

template <typename DataType>
void List<DataType>::insertBefore(const DataType& newDataItem) throw (logic_error)
{
}

#include "show5.cpp"

show5.cpp:

//--------------------------------------------------------------------
// show5.cpp: includes implementation of showStructure
//--------------------------------------------------------------------

#include "ListLinked.h"

template <typename DataType>
void List<DataType>::showStructure() const

// Outputs the items in a list. If the list is empty, outputs
// "Empty list". This operation is intended for testing and
// debugging purposes only.

{
if ( isEmpty() )
{
cout << "Empty list" << endl;
}
else
{
   for (ListNode* temp = head; temp != 0; temp = temp->next) {
   if (temp == cursor) {
       cout << "[";
   }

   // Assumes that dataItem can be printed via << because
   // is is either primitive or operator<< is overloaded.
   cout << temp->dataItem;  

   if (temp == cursor) {
       cout << "]";
   }
   cout << " ";
   }
   cout << endl;
}
}

test5.cpp:

//--------------------------------------------------------------------
//
// Laboratory 5 test5.cpp
//
// Test program for the operations in the List ADT
//
//--------------------------------------------------------------------

#include <iostream>
#include "config.h"
#include "ListLinked.cpp"

using namespace std;

void print_help();

int main()
{
#if LAB5_TEST1
List<int> testList; // Test list
int testData; // List data item
#else
List<char> testList; // Test list
char testData; // List data item
#endif
char cmd; // Input command

print_help();

do
{
testList.showStructure(); // Output list

cout << endl << "Command: "; // Read command
cin >> cmd;
if ( cmd == '+' || cmd == '=' || cmd == '#' )
cin >> testData;

switch ( cmd )
{
case 'H' : case 'h':
print_help();
break;

case '+' : // insert
cout << "Insert " << testData << endl;
testList.insert(testData);
break;

case '-' : // remove
cout << "Remove the data item marked by the cursor"
<< endl;
testList.remove();
break;

case '=' : // replace
cout << "Replace the data item marked by the cursor "
<< "with " << testData << endl;
testList.replace(testData);
break;

case '@' : // getCursor
cout << "Element marked by the cursor is "
<< testList.getCursor() << endl;
break;

case '<' : // gotoBeginning
testList.gotoBeginning();
cout << "Go to the beginning of the list" << endl;
break;

case '>' : // gotoEnd
testList.gotoEnd();
cout << "Go to the end of the list" << endl;
break;

case 'N' : case 'n' : // gotoNext
if ( testList.gotoNext() )
cout << "Go to the next data item" << endl;
else
cout << "Failed -- either at the end of the list "
<< "or the list is empty" << endl;
break;

case 'P' : case 'p' : // gotoPrior
if ( testList.gotoPrior() )
cout << "Go to the prior data item" << endl;
else
cout << "Failed -- either at the beginning of the "
<< "list or the list is empty" << endl;
break;

case 'C' : case 'c' : // clear
cout << "Clear the list" << endl;
testList.clear();
break;

case 'E' : case 'e' : // empty
if ( testList.isEmpty() )
cout << "List is empty" << endl;
else
cout << "List is NOT empty" << endl;
break;

case 'F' : case 'f' : // full
if ( testList.isFull() )
cout << "List is full" << endl;
else
cout << "List is NOT full" << endl;
break;

#if LAB5_TEST2
case 'M' : case 'm' : // In-lab Exercise 2
cout << "Move the data item marked by the cursor to the "
<< "beginning of the list" << endl;
testList.moveToBeginning();
break;
#endif

#if LAB5_TEST3
case '#' : // In-lab Exercise 3
cout << "Insert " << testData << " before the "
<< "cursor" << endl;
testList.insertBefore(testData);
break;
#endif

case 'Q' : case 'q' : // Quit test program
break;

default : // Invalid command
cout << "Inactive or invalid command" << endl;
}
}
while ( cin && cmd != 'Q' && cmd != 'q' );

if( ! cin )
{
// This is useful if students are testing the list with ints, instead of
   // chars, and accidentally enter a non-digit char.
   cout << "cin read errror" << endl;
}

return 0;
}

void print_help()
{
cout << endl << "Commands:" << endl;
cout << " H : Help (displays this message)" << endl;
cout << " +x : Insert x after the cursor" << endl;
cout << " - : Remove the data item marked by the cursor" << endl;
cout << " =x : Replace the data item marked by the cursor with x"
<< endl;
cout << " @ : Display the data item marked by the cursor" << endl;
cout << " < : Go to the beginning of the list" << endl;
cout << " > : Go to the end of the list" << endl;
cout << " N : Go to the next data item" << endl;
cout << " P : Go to the prior data item" << endl;
cout << " C : Clear the list" << endl;
cout << " E : Empty list?" << endl;
cout << " F : Full list?" << endl;
cout << " M : Move data item marked by cursor to beginning "
<< "(" <<
#if LAB5_TEST2
   " Active "
#else
   "Inactive "
#endif
   << ": In-lab Ex. 2)" << endl;
cout << " #x : Insert x before the cursor "
<< " (" <<
#if LAB5_TEST3
   " Active "
#else
   "Inactive "
#endif
   << " : In-lab Ex. 3)" << endl;
cout << " Q : Quit the test program" << endl;
cout << endl;
}

implement the ListLinked ADT (the declaration is given in ListLinked.h)(60 points) implement the following operations constructor assignment operator, destructor insert, remove, replace, clear isFull, isEmpty gotoBeginning, gotoEnd, gotoNext, gotoPrior getCursor Homework exercises implement the functio m that removes the data item marked by the cursor and reinserts it at the beginning of the list (20 points implement the function insertBefore(..) that will insert the new data item before the cursor or if the list is empty as the first element of the list (20 points)

Explanation / Answer

test5.cpp


#include <iostream>
#include "config.h"
#include "ListLinked.cpp"

using namespace std;

void print_help();

int main()
{
#if LAB5_TEST1
   List<int> testList;    // Test list
   int testData;          // List data item
#else
   List<char> testList;   // Test list
   char testData;         // List data item
#endif
   char cmd;              // Input command

   print_help();

   do
   {
       testList.showStructure();                     // Output list

       cout << endl << "Command: ";                  // Read command
       cin >> cmd;
       if (cmd == '+' || cmd == '=' || cmd == '#')
           cin >> testData;

       switch (cmd)
       {
       case 'H': case 'h':
           print_help();
           break;

       case '+':                                  // insert
           cout << "Insert " << testData << endl;
           testList.insert(testData);
           break;

       case '-':                                  // remove
           cout << "Remove the data item marked by the cursor"
               << endl;
           testList.remove();
           break;

       case '=':                                  // replace
           cout << "Replace the data item marked by the cursor "
               << "with " << testData << endl;
           testList.replace(testData);
           break;

       case '@':                                  // getCursor
           cout << "Element marked by the cursor is "
               << testList.getCursor() << endl;
           break;

       case '<':                                  // gotoBeginning
           testList.gotoBeginning();
           cout << "Go to the beginning of the list" << endl;
           break;

       case '>':                                  // gotoEnd
           testList.gotoEnd();
           cout << "Go to the end of the list" << endl;
           break;

       case 'N': case 'n':                       // gotoNext
           if (testList.gotoNext())
               cout << "Go to the next data item" << endl;
           else
               cout << "Failed -- either at the end of the list "
               << "or the list is empty" << endl;
           break;

       case 'P': case 'p':                       // gotoPrior
           if (testList.gotoPrior())
               cout << "Go to the prior data item" << endl;
           else
               cout << "Failed -- either at the beginning of the "
               << "list or the list is empty" << endl;
           break;

       case 'C': case 'c':                       // clear
           cout << "Clear the list" << endl;
           testList.clear();
           break;

       case 'E': case 'e':                       // empty
           if (testList.isEmpty())
               cout << "List is empty" << endl;
           else
               cout << "List is NOT empty" << endl;
           break;

       case 'F': case 'f':                       // full
           if (testList.isFull())
               cout << "List is full" << endl;
           else
               cout << "List is NOT full" << endl;
           break;

#if LAB5_TEST2
       case 'M': case 'm':                   // In-lab Exercise 2
           cout << "Move the data item marked by the cursor to the "
               << "beginning of the list" << endl;
           testList.moveToBeginning();
           break;
#endif

#if LAB5_TEST3
       case '#':                              // In-lab Exercise 3
           cout << "Insert " << testData << " before the "
               << "cursor" << endl;
           testList.insertBefore(testData);
           break;
#endif

       case 'Q': case 'q':                   // Quit test program
           break;

       default:                               // Invalid command
           cout << "Inactive or invalid command" << endl;
       }
   } while (cin && cmd != 'Q' && cmd != 'q');

   if (!cin)
   {
       // This is useful if students are testing the list with ints, instead of
       // chars, and accidentally enter a non-digit char.
       cout << "cin read errror" << endl;
   }

   return 0;
}

void print_help()
{
   cout << endl << "Commands:" << endl;
   cout << " H   : Help (displays this message)" << endl;
   cout << " +x : Insert x after the cursor" << endl;
   cout << " -   : Remove the data item marked by the cursor" << endl;
   cout << " =x : Replace the data item marked by the cursor with x"
       << endl;
   cout << " @   : Display the data item marked by the cursor" << endl;
   cout << " <   : Go to the beginning of the list" << endl;
   cout << " >   : Go to the end of the list" << endl;
   cout << " N   : Go to the next data item" << endl;
   cout << " P   : Go to the prior data item" << endl;
   cout << " C   : Clear the list" << endl;
   cout << " E   : Empty list?" << endl;
   cout << " F   : Full list?" << endl;
   cout << " M   : Move data item marked by cursor to beginning "
       << "(" <<
#if LAB5_TEST2
       " Active   "
#else
       "Inactive "
#endif
       << ": In-lab Ex. 2)" << endl;
   cout << " #x : Insert x before the cursor                  "
       << " (" <<
#if LAB5_TEST3
       " Active "
#else
       "Inactive "
#endif
       << " : In-lab Ex. 3)" << endl;
   cout << " Q   : Quit the test program" << endl;
   cout << endl;
}

ListLinked.cpp


#include "ListLinked.h"

// ListNode member functions

template <typename DataType>
List<DataType>::ListNode::ListNode(const DataType& nodeData, ListNode* nextPtr)
{
   this->dataItem = nodeData;
   this->next = nextPtr;
}

// List member functions

template <typename DataType>
List<DataType>::List(int ignored = 0)
{
   head = 0;
   cursor = 0;
}


template <typename DataType>
List<DataType>::List(const List& other)
{
   ListNode* copy = other.head;

   while (copy != NULL) {
       this->dataItem = copy->dataItem;
       this->next = copy->next;
       gotoNext();
       copy = copy->next;
   }
   *this = other;
}

template <typename DataType>
List<DataType>& List<DataType>::operator=(const List& other)
{
   ListNode* copy = other.head;
   while (copy != NULL) {
       insert(copy->dataItem);
       gotoNext();
       copy = copy->next;
   }
   return *this;
}

template <typename DataType>
List<DataType>::~List()
{
   clear();
}

template <typename DataType>
void List<DataType>::insert(const DataType& newDataItem) throw (logic_error)
{
   if (isEmpty())
   {
       head = new ListNode(newDataItem, 0);
       cursor = head;
      
   }
   else
   {
       cursor->next = new ListNode(newDataItem, cursor->next);
       cursor = cursor->next;
   }


}

template <typename DataType>
void List<DataType>::remove() throw (logic_error)
{
   ListNode* Node;
   if (isEmpty()) {
       cout << "Cannot remove from empty list." << endl;
   }
   else if (cursor == head) {
       Node = head;
       head = head->next;
       gotoNext();
       delete Node;
   }
   else {
       ListNode* previous;
       Node = cursor;
       previous = head;
       while (previous->next != cursor) {
           previous = previous->next;
       }
       if (cursor->next != NULL)
           cursor = cursor->next;
       else
           cursor = head;
       previous->next = Node->next;
       delete Node;
       Node = NULL;
   }
  

}

template <typename DataType>
void List<DataType>::replace(const DataType& newDataItem) throw (logic_error)
{
   if (isEmpty()) throw logic_error("list is empty.");
   if (head != NULL)
       cursor->dataItem = newDataItem;
}

template <typename DataType>
void List<DataType>::clear()
{
   if (isEmpty()) {
       cout << "List is already empty!" << endl;
   }
   else {
       cursor = head;
       ListNode *Node;
       while (cursor != NULL) {
           Node = head;
           head = head->next;
           cursor = cursor->next;
           delete Node;
       }
       head = NULL;
       cursor = NULL;
   }


}

template <typename DataType>
bool List<DataType>::isEmpty() const
{
   return head == 0;
}

template <typename DataType>
bool List<DataType>::isFull() const
{
   return false;
}

template <typename DataType>
void List<DataType>::gotoBeginning() throw (logic_error)
{
   cursor = head;
}

template <typename DataType>
void List<DataType>::gotoEnd() throw (logic_error)
{
   while (cursor->next != NULL)
   {
       cursor = cursor->next;
   }
}

template <typename DataType>
bool List<DataType>::gotoNext() throw (logic_error)
{
   if (cursor -> next!= NULL)
   {
       cursor = cursor->next;
       return true;
   }

   else
       return false;
}

template <typename DataType>
bool List<DataType>::gotoPrior() throw (logic_error)
{
   if (cursor != head && head != NULL) {
       ListNode *findPrior = head;
       while (findPrior->next != cursor)
           findPrior = findPrior->next;
       cursor = findPrior;
       return true;
   }
   else
       return false;
}

template <typename DataType>
DataType List<DataType>::getCursor() const throw (logic_error)
{
   if (!isEmpty()) {
       return cursor->dataItem;
   }
   else {
       throw logic_error("List is empty.");
   }
}

template <typename DataType>
void List<DataType>::moveToBeginning() throw (logic_error)
{
   if (cursor != head && head != NULL) {
       ListNode* findPrior = head;
       while (findPrior->next != cursor) {
           findPrior = findPrior->next;
       }
       findPrior->next = cursor->next;
       cursor->next = head;
       head = cursor;
   }
}

template <typename DataType>
void List<DataType>::insertBefore(const DataType& newDataItem) throw (logic_error)
{
   if (isEmpty()) {
       head = new ListNode(newDataItem, 0);
       cursor = head;
   }
   else {
       if (cursor == head) {
           ListNode *node = new ListNode(newDataItem, head);
           head = node;
           cursor = node;
       }
       else {
           gotoPrior();
           insert(newDataItem);
       }
   }
}


#include "show5.cpp"

ListLinked.h

#ifndef LISTLINKED_H
#define LISTLINKED_H

#pragma warning( disable : 4290 )

#include <stdexcept>
#include <iostream>

using namespace std;

template <typename DataType>
class List {
public:
   List(int ignored = 0);
   List(const List& other);
   List& operator=(const List& other);
   ~List();

   void insert(const DataType& newDataItem) throw (logic_error);
   void remove() throw (logic_error);
   void replace(const DataType& newDataItem) throw (logic_error);
   void clear();

   bool isEmpty() const;
   bool isFull() const;

   void gotoBeginning() throw (logic_error);
   void gotoEnd() throw (logic_error);
   bool gotoNext() throw (logic_error);
   bool gotoPrior() throw (logic_error);

   DataType getCursor() const throw (logic_error);

   // Programming exercise 2
   void moveToBeginning() throw (logic_error);

   // Programming exercise 3
   void insertBefore(const DataType& newDataItem) throw (logic_error);

   void showStructure() const;

private:
   class ListNode {
   public:
       ListNode(const DataType& nodeData, ListNode* nextPtr);

       DataType dataItem;
       ListNode* next;
   };

   ListNode* head;
   ListNode* cursor;

};

#endif

config.cpp

/**
* Linked List class (Lab 5) configuration file.
* Activate test #N by defining the corresponding LAB5_TESTN to have the value 1.
*/

#define LAB5_TEST1   0 // 1 means test with int instead of char
#define LAB5_TEST2   1   // Activate moveToBeginning (prog exercise 2)
#define LAB5_TEST3   1   // Activate insertBefore (prog exercise 3)

show5.cpp

//--------------------------------------------------------------------
// show5.cpp: includes implementation of showStructure
//--------------------------------------------------------------------

#include "ListLinked.h"

template <typename DataType>
void List<DataType>::showStructure() const

// Outputs the items in a list. If the list is empty, outputs
// "Empty list". This operation is intended for testing and
// debugging purposes only.

{
    if ( isEmpty() )
    {
       cout << "Empty list" << endl;
    }
    else
    {
   for (ListNode* temp = head; temp != 0; temp = temp->next) {
        if (temp == cursor) {
       cout << "[";
        }

        // Assumes that dataItem can be printed via << because
        // is is either primitive or operator<< is overloaded.
        cout << temp->dataItem;  

        if (temp == cursor) {
       cout << "]";
        }
        cout << " ";
   }
   cout << endl;
    }
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote