K
K
kr1337ol2015-12-21 19:46:52
C++ / C#
kr1337ol, 2015-12-21 19:46:52

How to sort and display the even elements of a list?

there is code in the Showb function, you need to display the even elements of the list sorted in ascending order

#include <iostream>

using namespace std;

struct Node       //Структура являющаяся звеном списка
{
  double x;     //Значение x будет передаваться в список
  Node *Next, *Prev; //Указатели на адреса следующего и предыдущего элементов списка
  
};

class List   //Создаем тип данных Список
{
  Node *Head, *Tail; //Указатели на адреса начала списка и его конца

public:
  List() :Head(NULL), Tail(NULL) {}; //Инициализируем адреса как пустые
  ~List(); //Деструктор
  void Show(); //Функция отображения списка на экране
  void Add(double x); //Функция добавления элементов в список
  void Sort();
  void Showa();
  void Showb(int N);
};

List::~List() //Деструктор
{
  while (Head) //Пока по адресу на начало списка что-то есть
  {
    Tail = Head->Next; //Резервная копия адреса следующего звена списка
    delete Head; //Очистка памяти от первого звена
    Head = Tail; //Смена адреса начала на адрес следующего элемента
  }
}

void List::Add(double 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 = Head;
  //Временно указываем на адрес первого элемента
  cout << "Ваш список: ";
  while (temp != NULL) //Пока не встретим пустое значение
  {
    cout << temp->x << " "; //Выводим каждое считанное значение на экран
    temp = temp->Next; //Смена адреса на адрес следующего элемента
  }

  cout << "\n";
}

void List::Showa()
{
  
  Node *temp = Head;
  //Временный указатель на адрес последнего элемента
  cout << "a)  ";
  while (temp != NULL) //Пока не встретится пустое значение
  {
    if (temp->x>=0)
      cout << "|" << temp->x << "|" << " "; //Выводить значение на экран
    temp = temp->Next; //Указываем, что нужен адрес предыдущего элемента
  }
  cout << "\n";

  
}

void List::Showb(int N)
{
  
  Node *tempb = Head;


    //Временный указатель на адрес последнего элемента

    cout << "b) ";
    while (tempb->Next != NULL) //Пока не встретится пустое значение
    {

      {

        tempb = tempb->Next;
        cout << "|" << tempb->x << "|" << " ";
        if (tempb->Next != NULL)
          tempb = tempb->Next;
        else break;


      }


    }

  
    cout << "\n";
}


void List::Sort()
{

  Node * list = Tail; // связанный список
  Node * node, *node2;
  for (node = list; node; node = node->Prev)
    for (node2 = list; node2; node2 = node2->Prev)
      if (node->x > node2->x) { // если число из node меньше числа из node2 то переставляем их
        double i = node->x;
        node->x = node2->x;
        node2->x = i;

      }
  cout << "\n";

}


int main()
{
  setlocale(LC_ALL, "RUS");
  List lst,lst1; //Объявляем переменную, тип которой есть список
  int N;
  cout << "Введите количество элементов:\n";
  cin >> N;
  for (int i = 0; i<N; i++)//ввод списка
  {
    double x;
    cout << "Введите " << i + 1 << " елемент: ";
    cin >> x;
    lst.Add(x);
    lst1.Add(x);
  }




  system("cls");
  lst.Show();     //Отображаем список на экране
  lst.Sort();     //сортировка
  lst.Showa();    //показ положительных
  lst1.Showb(N);  //Показ четных
  cout << "\n";


  system("PAUSE");
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Alexander Ananiev, 2015-12-21
@kr1337ol

I don't see a problem. Start a counter and, with even values ​​​​of it, output elements in a loop.

A
abcd0x00, 2015-12-24
@abcd0x00

You can make a binary tree of pointers to even elements and then output it.
But I would just make a vector of pointers to even elements, sort it and output it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question