Answer the question
In order to leave comments, you need to log in
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
I don't see a problem. Start a counter and, with even values of it, output elements in a loop.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question