Помогите пожалуйста! На языке С++
Создать базовый класс «список», определив в нем функции добавления в начало списка, удаления N-го элемента списка, вывода элементов списка на экран. Породить от него класс «упорядоченный список», переопределив функцию добавления элемента списка.

Ответы

Ответ дал: Slavque
0

Я так полагаю имеется ввиду базовое понятие списка?

Если так - тогда я сделал классический список с узлами с указателями на следующий элемент.

Простите за за малое кол-во комментариев, у меня не так уж и много времени, поэтому я комментировал самое основное.

Мой вариант решения:

#include <iostream>

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 << "nError.";

  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 << endl;

}

};

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();

}

Вас заинтересует