Can sombody help me fix up the errors in this code? i tried and i couldnt get it
ID: 3726893 • Letter: C
Question
Can sombody help me fix up the errors in this code? i tried and i couldnt get it to work!. Pls if you know how to do it do it else pls dont do it.
Much thanks:
here is my code:
//LinkedList.cpp
#include "LinkedList.h"
template <class T>
LinkedList<T>::LinkedList()
{
first = NULL;
last = NULL;
}
template <class T>
LinkedList<T>::~LinkedList()
{
Node<T>* temp = first;
while(temp != NULL)
{
temp = temp->next;
delete(first);
first = temp;
}
}
template <class T>
void LinkedList<T>::insertAtBack(T valueToInsert)
{
Node<T>* newNode;
newNode->val = valueToInsert;
newNode->next = NULL;
Node<T>* temp = first;
if (temp != NULL)
{
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
else
{
first = newNode;
}
}
template <class T>
bool LinkedList<T>::removeFromBack()
{
if (first == NULL && last == NULL) {return false;}
if (first == last)
{
cout<<"First is equal to Last."<<endl;
delete(first);
first = last = NULL;
return true;
}
else
{
Node<T>* temp = first;
int nodeCount = 0;
while (temp != NULL)
{
nodeCount = nodeCount + 1;
temp = temp->next;
}
Node<T>* temp2 = first;
for(int i = 1; i < (nodeCount - 1); i++)
{
temp2 = temp2->next;
}
cout << temp2->val<<endl;
delete(temp2->next);
last = temp2;
last->next = NULL;
return true;
}
}
template <class T>
void LinkedList<T>::print()
{
Node<T>* temp = first;
if (temp == NULL)
{
cout<<"";
}
if (temp->next == NULL)
{
cout<<temp->val;
}
else
{
while (temp != NULL)
{
cout<< temp->val;
temp = temp->next;
cout<< ",";
}
}
}
template <class T>
bool LinkedList<T>::isEmpty()
{
if (first == NULL && last == NULL) {return true;}
else {return false;}
}
template <class T>
int LinkedList<T>::size()
{
if (first == NULL && last == NULL) {return 0;}
Node<T>* temp = first;
int nodeCounter = 0;
while (temp != NULL)
{
nodeCounter = nodeCounter + 1;
temp = temp->next;
}
return nodeCounter;
}
template <class T>
void LinkedList<T>::clear()
{
Node<T>* temp = first;
while(temp != NULL)
{
temp = temp->next;
first = temp;
delete(temp);
}
}
template <class T>
void LinkedList<T>::insertAtFront(T valueToInsert)
{
Node<T>* newNode;
newNode->val = valueToInsert;
if(first == NULL)
{
first = newNode;
}
else
{
newNode->next = first;
first = newNode;
}
}
template <class T>
bool LinkedList<T>::removeFromFront()
{
if (first == NULL && last == NULL) {return false;}
else
{
Node<T>* temp;
temp = first;
first = first->next;
delete(temp);
return true;
}
}
template <class T>
T& LinkedList<T>::firstNum()
{
return first->val;
}
//LinkedList.h
using namespace std;
#include <iostream>
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
template <class T>
struct Node
{
T val;
Node<T> *next;
};
template <class T>
class LinkedList
{
public:
LinkedList();
~LinkedList();
void insertAtBack(T valueToInsert);
bool removeFromBack();
void print();
bool isEmpty();
int size();
void clear();
void insertAtFront(T valueToInsert);
bool removeFromFront();
T& firstNum();
private:
Node<T> *first;
Node<T> *last;
};
#endif
//main.cpp
using namespace std;
#include <iostream>
#include "Queue.h"
#include "LinkedList.h"
int main()
{
try
{
int type = 0;
cout<<"What data type do you want to work with? 1 = int, 2 = char, 3 = string"<<endl;
cin>>type;
if(type == 1)
{
Queue <int> q;
q.enqueue(1);
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.enqueue(3);
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.enqueue(5);
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
}
if (type == 2)
{
Queue <char> q;
q.enqueue('a');
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.enqueue('b');
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.enqueue('c');
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
q.dequeue();
cout<<"The size is: "<< q.size() <<". And the top is: " << q.front() <<endl;
}
return 1;
}
catch (int e)
{
if (e == 2)
{
cout<<"Call to dequeue() generated an exception, because the queue is empty."<<endl;
}
else if (e == 3)
{
cout<<"Call to front() generated an exception, because the queue is empty."<<endl;
}
}
}
//Queue.cpp
#include "Queue.h"
template <class T>
Queue<T>::Queue(){}
template <class T>
Queue<T>::~Queue(){}
template <class T>
void Queue<T>::enqueue(T value)
{
insertAtBack(value);
}
template <class T>
T using LinkedList<T>::dequeue()
{
if(isEmpty())
{
throw 2;
}
else
{
T firstElmnt = firstNum();
removeFromFront();
return firstElmnt;
}
}
template <class T>
T& using LinkedList<T>::front()
{
if(isEmpty())
{
throw 3;
}
else
{
return firstNum();
}
}
//Queue.h
using namespace std;
#include <iostream>
#include "LinkedList.h"
#ifndef QUEUE_H
#define QUEUE_H
template <class T>
class Queue: public LinkedList<T>
{
public:
Queue();
~Queue();
void enqueue(T value);
T dequeue();
T& front();
};
#endif
Explanation / Answer
If you need any help, give me a comment....
//LinkedList.h
using namespace std;
#include <iostream>
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
template <class T>
struct Node
{
T val;
Node<T> *next;
};
template <class T>
class LinkedList
{
public:
LinkedList();
~LinkedList();
void insertAtBack(T valueToInsert);
bool removeFromBack();
void print();
bool isEmpty();
int size();
void clear();
T& front();
T dequeue();
void insertAtFront(T valueToInsert);
bool removeFromFront();
T &firstNum();
private:
Node<T> *first;
Node<T> *last;
};
#endif
// LinkedList.cpp
#include "LinkedList.h"
template <class T>
LinkedList<T>::LinkedList()
{
first = NULL;
last = NULL;
}
template <class T>
LinkedList<T>::~LinkedList()
{
Node<T> *temp = first;
while (temp != NULL)
{
temp = temp->next;
delete (first);
first = temp;
}
}
template <class T>
void LinkedList<T>::insertAtBack(T valueToInsert)
{
Node<T> *newNode = new Node<T>;
newNode->val = valueToInsert;
newNode->next = NULL;
Node<T> *temp = first;
if (temp != NULL)
{
while (temp->next != NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
else
{
first = newNode;
}
}
template <class T>
bool LinkedList<T>::removeFromBack()
{
if (first == NULL && last == NULL)
{
return false;
}
if (first == last)
{
cout << "First is equal to Last." << endl;
delete (first);
first = last = NULL;
return true;
}
else
{
Node<T> *temp = first;
int nodeCount = 0;
while (temp != NULL)
{
nodeCount = nodeCount + 1;
temp = temp->next;
}
Node<T> *temp2 = first;
for (int i = 1; i < (nodeCount - 1); i++)
{
temp2 = temp2->next;
}
cout << temp2->val << endl;
delete (temp2->next);
last = temp2;
last->next = NULL;
return true;
}
}
template <class T>
void LinkedList<T>::print()
{
Node<T> *temp = first;
if (temp == NULL)
{
cout << "";
}
if (temp->next == NULL)
{
cout << temp->val;
}
else
{
while (temp != NULL)
{
cout << temp->val;
temp = temp->next;
cout << ",";
}
}
}
template <class T>
bool LinkedList<T>::isEmpty()
{
if (first == NULL && last == NULL)
{
return true;
}
else
{
return false;
}
}
template <class T>
int LinkedList<T>::size()
{
if (first == NULL && last == NULL)
{
return 0;
}
Node<T> *temp = first;
int nodeCounter = 0;
while (temp != NULL)
{
//cout<<nodeCounter<<endl;
nodeCounter = nodeCounter + 1;
temp = temp->next;
}
cout<<nodeCounter<<endl;
return nodeCounter;
}
template <class T>
void LinkedList<T>::clear()
{
Node<T> *temp = first;
while (temp != NULL)
{
temp = temp->next;
first = temp;
delete (temp);
}
}
template <class T>
void LinkedList<T>::insertAtFront(T valueToInsert)
{
Node<T> *newNode;
newNode->val = valueToInsert;
if (first == NULL)
{
first = newNode;
}
else
{
newNode->next = first;
first = newNode;
}
}
template <class T>
bool LinkedList<T>::removeFromFront()
{
if (first == NULL && last == NULL)
{
return false;
}
else
{
Node<T> *temp;
temp = first;
first = first->next;
delete (temp);
return true;
}
}
template <class T>
T &LinkedList<T>::firstNum()
{
return first->val;
}
template <class T>
T LinkedList<T>::dequeue()
{
if (isEmpty())
{
throw 2;
}
else
{
T firstElmnt = firstNum();
removeFromFront();
return firstElmnt;
}
}
// template <class T>
// T &LinkedList<T>::front()
// {
// if (isEmpty())
// {
// throw 3;
// }
// else
// {
// return firstNum();
// }
// }
//Queue.h
using namespace std;
#include <iostream>
#include "LinkedList.h"
#ifndef QUEUE_H
#define QUEUE_H
template <class T>
class Queue : public LinkedList<T>
{
public:
Queue();
~Queue();
void enqueue(T value);
T dequeue();
T &front();
};
#endif
//Queue.cpp
#include "Queue.h"
template <class T>
Queue<T>::Queue()
{
}
template <class T>
Queue<T>::~Queue()
{
}
template <class T>
void Queue<T>::enqueue(T value){
this->insertAtBack(value);
}
template <class T>
T Queue<T>::dequeue(){
if (this->isEmpty())
{
throw 2;
}
else
{
return this->removeFromFront();
}
}
template <class T>
T & Queue<T>::front(){
if (this->isEmpty())
{
throw 3;
}
else
{
return this->firstNum();
}
}
//main.cpp
using namespace std;
#include <iostream>
#include "Queue.cpp"
#include "LinkedList.cpp"
int main()
{
try
{
int type = 0;
cout << "What data type do you want to work with? 1 = int, 2 = char, 3 = string" << endl;
cin >> type;
if (type == 1)
{
Queue<int> q;
q.enqueue(1);
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.enqueue(3);
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.enqueue(5);
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
}
if (type == 2)
{
Queue<char> q;
q.enqueue('a');
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.enqueue('b');
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.enqueue('c');
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
q.dequeue();
cout << "The size is: " << q.size() << ". And the top is: " << q.front() << endl;
}
return 1;
}
catch (int e)
{
if (e == 2)
{
cout << "Call to dequeue() generated an exception, because the queue is empty." << endl;
}
else if (e == 3)
{
cout << "Call to front() generated an exception, because the queue is empty." << endl;
}
}
}