The task is to make a doubly linked list in which class methods add / remove a list item, sort the list, display list items from the beginning / end, search for an item in the list. In the code below, the implementation of this, without a search, I can not get to how to implement it.
#include "stdafx.h" #include <iostream> using namespace std; #include <algorithm> #include <vector> #include <list> #include <locale.h> #include <iterator> #include <stack> struct Node //Структура являющаяся звеном списка { int x; //Значение x будет передаваться в список Node *Next, *Prev; //Указатели на адреса следующего и предыдущего элементов списка }; class List { Node *Head, *Tail, *cur; Node *Next, *Prev;//Указатели на адреса начала списка и его конца public: List() :Head(NULL), Tail(NULL) {}; //Инициализируем адреса как пустые ~List(); void Show(); void Delete_end(); void empty() { if (Head == NULL) cout << "Список пуст" << endl; else cout << "Список не пуст" << endl; } void Delete_first(); void Add(); }; class iterator : public List { friend Node; public: iterator() {}; iterator& operator++() { Node*temp; // Node=Node->Next; return *this; } }; List::~List() { while (Head) //Пока по адресу на начало списка что-то есть { Tail = Head->Next; //Резервная копия адреса следующего звена списка delete Head; //Очистка памяти от первого звена Head = Tail; //Смена адреса начала на адрес следующего элемента } } void List::Delete_first() { } void List::Delete_end() { Node *temp; Node *current = Tail; current = Head; temp = Head->Next; delete current; Head = temp; temp->Prev = NULL; } void List::Add() { int x = 0; cout << "Введите элемент списка: "; cin >> x; Node *temp = new Node; //Выделение памяти под новый элемент структуры temp->Next = NULL; //Указываем, что изначально по следующему адресу пусто temp->x = x;//Записываем значение в структуру if (Head != NULL) //Если список не пуст { temp->Prev = Tail; //Указываем адрес на предыдущий элемент в соотв. поле Tail->Next = temp; //Указываем адрес следующего за хвостом элемента Tail = temp; //Меняем адрес хвоста } else //Если список пустой { temp->Prev = NULL; //Предыдущий элемент указывает в пустоту Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили } } void List::Show() { //ВЫВОДИМ СПИСОК С КОНЦА Node *temp = Tail; //Временный указатель на адрес последнего элемента while (temp != NULL) //Пока не встретится пустое значение { cout << temp->x << " "; //Выводить значение на экран temp = temp->Prev; //Указываем, что нужен адрес предыдущего элемента } cout << "\n"; //ВЫВОДИМ СПИСОК С НАЧАЛА temp = Head; //Временно указываем на адрес первого элемента while (temp != NULL) //Пока не встретим пустое значение { cout << temp->x << " "; //Выводим каждое считанное значение на экран temp = temp->Next; //Смена адреса на адрес следующего элемента } cout << "\n"; } int main() { system("CLS"); setlocale(LC_ALL, "Russian"); List lst; lst.empty(); lst.Add(); lst.empty(); lst.Add(); lst.Add(); lst.empty(); lst.Add(); lst.Delete_first(); lst.Delete_end(); lst.Show(); lst.Delete_end(); lst.Add(); lst.Delete_first(); lst.Show(); system("PAUSE"); }
Show- vp_arth