Заполнение двунаправленного списка на с++
Всем привет! Я новичок в программировании,изучаю с++ как первый свой язык. Дали лабу в вузе,мне нужно создать двунаправленный список и заполнить его рандомными числами от -50 до 50 Я создал список,сделал добавление,удаление Но именно заполнение всего списка я не могу реализовать. Пытался при помощи гугла решить проблему,не смог Вот код программы:
#include <ctime>
#include <string>
using namespace std;
int ReadMenuItem() {
string buttonStr;
int button;
while (true) {
try {
cin >> buttonStr;
button = stoi(buttonStr);
return button;
}
catch (const std::exception) {
cout << "Invalid value , please type digit" << endl;
}
}
}
class MyList { //Список MyList
int x, count_;
MyList* Head, * Tail, * Next, * Prev;
public:
MyList() :count_(0), Head(NULL), Tail(NULL) {}; //Инициализация с помощью конструктора по умолчанию
void Add(int);
void Show();
void Del(int); //Функция принимает целочисленный параметр, обозначающий номер удаляемого элемента
~MyList();
};
/*ДОБАВЛЕНИЕ ЭЛЕМЕНТА В СПИСОК*/
void MyList::Add(int x) {
MyList* temp = new MyList;
temp->x = x;
temp->Next = NULL;
count_++;
if (!Head) {
temp->Prev = NULL;
Head = temp;
Tail = Head;
}
else {
temp->Prev = Tail; //Указываем, что предыдущим элементом списка относительно добавленного, будет последний элемент существующего списка
Tail->Next = temp; //Следующий за последним существующим это непосредственно сейчас добавляемый элемент списка
Tail = temp; //После того как указали что есть настоящий и что предыдущий, объявляем, что последний существующий это только что добавленный элемент
}
}
/*ПОКАЗЫВАЕТ СПИСОК НА ЭКРАНЕ*/
void MyList::Show() {
MyList* t = Head;
while (t) {
cout << t->x << " ";
t = t->Next;
}
cout << "\n\n";
}
/*ФУНКЦИЯ УДАЛЕНИЯ КОНКРЕТНОГО ЭЛЕМЕНТА ДВУСВЯЗНОГО СПИСКА*/
void MyList::Del(int x) {
//Если удаляем первый элемент, то могут быть такие варианты
//В списке есть только первый, в списке есть несколько элементов
//Поэтому разбиваем логику выполнения
if ((x == 1) and (Head->Next)) { //Если удаляем первый, но есть и другие, то
MyList* temp = Head; //Указываем, что нам нужно начало списка
Head = Head->Next; //Сдвигаем начало на следующий за началом элемент
Head->Prev = NULL; //Делаем так, чтоб предыдущий началу элемент был пустым
delete temp; //Удаляем удаляемое начало
count_--; //Обязательно уменьшаем счетчик
return; //И выходим из функции
}
else if ((x == 1) and (Head == Tail)) { //Если удаляем первый, но в списке только 1 элемент
Head->Next = NULL; //обнуляем все что нужно
Head = NULL;
delete Head; //Удаляем указатель на начало
count_ = 0; //Обязательно обозначаем, что в списке ноль элементов
return; //и выходим из функции
}
//Также может быть, что удаляемый элемент является последним элементом списка
if (x == count_) {
MyList* temp = Tail; //Указываем, что нам нужен хвост
Tail = Tail->Prev; //Отодвигаем хвост немного назад
Tail->Next = NULL; //Обозначаем, что впереди за хвостом пусто
delete temp; //Очищаем память от бывшего хвоста
count_--; //Обязательно уменьшаем счетчик элементов
return; //И выходим из функции
}
//Если же удаляемый элемент лежит где-то в середине списка, то тогда его можно удалить
MyList* temp = Head, * temp2; //temp-Удаляемый элемент, temp2 нужен, чтобы не потерять данные
//cout<<count_<<"\n";
for (int i = 0; i < x - 1; i++) temp = temp->Next; //Идем к адресу удаляемого элемента
temp2 = temp; //Временно запоминаем адрес удаляемого элемента
temp2->Prev->Next = temp->Next; //Записываем данные, что следующий за перед сейчас удаляемым элементом - это следующий от удаляемого
temp2->Next->Prev = temp->Prev; //а предыдущий для следующего - это предыдущий для удаляемого
delete temp; //теперь смело можно освободить память, удалив адрес на начало удаляемого элемента
count_--; //Обязательно уменьшаем число элементов в списке.
}
/*ДЕСТРУКТОР ДЛЯ КОРРЕКТНОГО ВЫСВОБОЖДЕНИЯ ПАМЯТИ*/
MyList::~MyList() {
// cout<<"\nDELETES\n";
while (Head) {
// cout<<"Del is: "<<Head->x<<" ";
Tail = Head->Next;
delete Head;
Head = Tail;
}
}
void Adding()
{
}
int main() {
srand(time(NULL));
void Adding();
MyList List1;
int ValueToAdd;
int ValueToDelete;
int count = 0;
while (count < 1) {
cout << "You can:\n1-Add element\n2-Delete Element\n3-Show elements\nWhich action do you choose?" << endl;
int button = ReadMenuItem();
if (button == 1) {
cout << "Enter value to add" << endl;
List1.Add(ValueToAdd = ReadMenuItem());
}
else if (button == 2) {
cout << "Enter value to delete" << endl;
List1.Del(ValueToDelete = ReadMenuItem());
}
else if (button == 3) {
List1.Show();
}
else {
cout << "Please ,choose your action" << endl;
}
}
return 0;```