search

Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой 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; 
}	

array