Помогите пожалуйста! На языке С++Создать базисный класс перечень, определив в нем
Помогите пожалуйста! На языке С++
Сделать базисный класс список, определив в нем функции прибавленья в начало перечня, удаления N-го элемента списка, вывода частей перечня на экран. Породить от него класс упорядоченный перечень, переопределив функцию прибавленья элемента перечня.
Я так полагаю имеется ввиду базисное понятие перечня?
Если так - тогда я сделал традиционный список с узлами с указателями на следующий элемент.
Простите за за маленькое кол-во комментариев, у меня не так уж и много медли, поэтому я комментировал самое главное.
Мой вариант решения:
include lt;iostreamgt;
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-gt;nextElement;
delete temp;
virtual void addElement(int value)
if (count == 0)
node* parent = new node;
parent-gt;value = value;
parent-gt;nextElement = NULL;
first = parent;
count++;
else
node* newNode = new node;
newNode-gt;value = value;
newNode-gt;nextElement = first;
first = newNode;
count++;
int del(int N)
if (N lt; 1 N gt; count)
cout lt;lt; "\nError.";
return NULL;
else
//этот указатель будет ссылаться на узел, который нам нужно удалить
node* target;
int returnValue;
if (N == 1)
target = first;
returnValue = target-gt;value;
first = first-gt;nextElement;
delete target;
else
target = first;
//указатель предшествующего узла, чтобы при удалении связать список поновой
node* prev = first;
for (int i = 1; i lt; N; ++i)
prev = target;
target = target-gt;nextElement;
prev-gt;nextElement = target-gt;nextElement;
returnValue = target-gt;value;
delete target;
return returnValue;
void print()
node *temp = first;
while (temp != NULL)
cout lt;lt; temp-gt;value lt;lt; " ";
temp = temp-gt;nextElement;
cout lt;lt; endl;
;
class OrderList : public list
private:
//указатель на последний элемент в перечне
node* last;
public:
OrderList() : list()
last = NULL;
//вычищаем после себя память
OrderList()
node* temp;
while (first != NULL)
temp = first;
first = first-gt;nextElement;
delete temp;
virtual void addElement(int value)
if (count == 0)
node* parent = new node;
parent-gt;value = value;
parent-gt;nextElement = NULL;
first = parent;
last = parent;
count++;
else
node* newNode = new node;
newNode-gt;value = value;
last-gt;nextElement = newNode;
newNode-gt;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();
-
Вопросы ответы
Статьи
Информатика
Статьи
Разные вопросы.
Разные вопросы.
Математика.
Русский язык.
Русский язык.
Разные вопросы.
Қазақ тiлi.
Английский язык.
Математика.
История.