Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой CMD
Если вы полностью уверены что не можете осилить эту задачу, советую вам просмотреть код и полностью в нем разобраться! Протестировать все в отладчике!
Напишите шаблонный список С++
/*Demonstration List Dombrovsky I.V.*/
#include <iostream>
#include <string>
using namespace std;
#define STOP_CMD system("pause");
#define COLOR_CMD system("color 0A");
template<class T>
class Node
{
public:
Node * next;
T data;
};
template<class T>
class List
{
public:
List();
~List();
void setAddElement(T element);
void showList();
void showAdressList();
void deleteFirst();
void deleteLast();
void delElement(int n);
int getSize();
private:
Node<T> * head;
Node<T> * tail;
int SIZE;
};
template<class T>
List<T>::List() :SIZE(0), head(NULL), tail(NULL)
{
//DEFAULT
}
template<class T>
void List<T>::setAddElement(T element) // add element to list
{
Node<T> * temp = new Node<T>;
temp->data = element;
temp->next = NULL;
if (head == NULL)
{
head = temp;
tail = temp;
}
else
{
tail->next = temp;
tail = temp;
}
SIZE++;
}
template<class T>
void List<T>::showList()
{
Node<T> * temp = head;
while (temp != 0)
{
cout << temp->data << endl;
temp = temp->next;
}
}
template<class T>
List<T>::~List()
{
while (SIZE)
{
deleteFirst();
}
}
template<class T>
void List<T>::deleteFirst()
{
Node<T> * temp = head;
if (SIZE > 0)
{
head = temp->next;
delete temp;
SIZE--;
}
else
{
cerr << "List empty!" << endl;
head = tail = NULL;
cout << "head = " << head << "\t" << "tail = " << tail << endl;
}
}
template<class T>
void List<T>::deleteLast()
{
Node<T> * temp1 = head, *temp2 = head;
int count = SIZE;
if (SIZE > 0)
{
while (count)
{
if (count > 2)
temp2 = temp2->next;
if (temp1->next != NULL)
temp1 = temp1->next;
count--;
}
tail = temp2;
tail->next = NULL;
delete temp1;
SIZE--;
}
else
{
cerr << "List empty!" << endl;
head = tail = NULL;
cout << "head = " << head << "\t" << "tail = " << tail << endl;
}
}
template<class T>
void List<T>::delElement(int n) // FUNC DELETE n ELEMENT
{
int count = n;
if(n > 0 && n <= SIZE)
{
Node<T> * current = head, *prevous = head, *following = head;
while (count > 0)
{
following = following->next;
if(count - 1 > 0)
current = current->next;
if(count - 1 > 1)
prevous = prevous->next;
count--;
}
if (n > 1)
{
prevous->next = following;
delete current;
SIZE--;
}
if (n == 1)
{
deleteFirst();
}
if (n == SIZE)
{
deleteLast();
}
}
else
{
cerr << "error ==>> n!" << endl;
}
}
template<class T>
int List<T>::getSize()
{
return SIZE;
}
template<class T>
void List<T>::showAdressList()
{
Node<T> * temp = head;
int count = SIZE;
while (count)
{
count--;
cout << temp << " = " << temp->data << endl;
temp = temp->next;
if (count == false)
cout << tail->next << endl;
}
}
int main() {
COLOR_CMD
List<string> l;
l.setAddElement("Igor");
l.setAddElement("Vladimir");
l.setAddElement("Elena");
l.setAddElement("Aleksey");
l.setAddElement("Natalia");
l.showAdressList();
l.delElement(2);
l.showAdressList();
l.delElement(1);
l.showAdressList();
l.delElement(3);
l.showAdressList();
l.delElement(2);
l.showAdressList();
l.delElement(1);
l.showAdressList();
l.setAddElement("Igor");
l.setAddElement("Vladimir");
l.setAddElement("Elena");
l.setAddElement("Aleksey");
l.setAddElement("Natalia");
l.showAdressList();
cout << "SIZE = " << l.getSize() << endl;
STOP_CMD
return 0;
}