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

Ответы 1

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

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

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

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

    #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 << "Error.";

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

    }

  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years