Я так полагаю имеется ввиду базовое понятие списка?
Если так - тогда я сделал классический список с узлами с указателями на следующий элемент.
Простите за за малое кол-во комментариев, у меня не так уж и много времени, поэтому я комментировал самое основное.
Мой вариант решения:
#include
using namespace std;
//узел со значением и ссылкой на следующий элемент
struct node
{
int value;
node* nextElement;
};
class list
{
protected:
//указатель на первый элемент в списке
node* first;
//кол-во элементов в списке
int count;
public:
list()
{
count = 0;
first = NULL;
}
//чистим после себя память
~list()
{
node* temp;
while (first != NULL)
{
temp = first;
first = first->nextElement;
delete temp;
}
}
virtual void addElement(int value)
{
if (count == 0)
{
node* parent = new node;
parent->value = value;
parent->nextElement = NULL;
first = parent;
count++;
}
else
{
node* newNode = new node;
newNode->value = value;
newNode->nextElement = first;
first = newNode;
count++;
}
}
int del(int N)
{
if (N < 1 || N > count)
{
cout
return NULL;
}
else
{
//этот указатель будет ссылаться на узел, который нам нужно удалить
node* target;
int returnValue;
if (N == 1)
{
target = first;
returnValue = target->value;
first = first->nextElement;
delete target;
}
else
{
target = first;
//указатель предыдущего узла, чтобы при удалении связать список заново
node* prev = first;
for (int i = 1; i < N; ++i)
{
prev = target;
target = target->nextElement;
}
prev->nextElement = target->nextElement;
returnValue = target->value;
delete target;
}
return returnValue;
}
}
void print()
{
node *temp = first;
while (temp != NULL)
{
cout << temp->value
temp = temp->nextElement;
}
cout
}
};
class OrderList : public list
{
private:
//указатель на последний элемент в списке
node* last;
public:
OrderList() : list()
{
last = NULL;
}
//чистим после себя память
~OrderList()
{
node* temp;
while (first != NULL)
{
temp = first;
first = first->nextElement;
delete temp;
}
}
virtual void addElement(int value)
{
if (count == 0)
{
node* parent = new node;
parent->value = value;
parent->nextElement = NULL;
first = parent;
last = parent;
count++;
}
else
{
node* newNode = new node;
newNode->value = value;
last->nextElement = newNode;
newNode->nextElement = NULL;
last = newNode;
count++;
}
}
};
int main()
{
//тестируем класс упорядоченного списка
OrderList a;
a.addElement(12);
a.addElement(228);
a.addElement(1337);
a.print();
a.del(2);
a.print();
//тестируем класс списка
list b;
b.addElement(12);
b.addElement(228);
b.addElement(1337);
b.print();
b.del(1);
b.print();
cin.get();
cin.get();
}