behemoth, сделала всё как и сказали, но программа выводит только списки чисел
C++ (Qt) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| #include <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <fstream>
#include<time.h>
using namespace std;
struct Node //структура являющаяся звеном списка
{
int x; //значение x будет передаваться в список
Node *Next,*Prev; //указатели на адреса следующего и предыдущего элементов списка
};
class List //создаем тип данных Список
{
Node *Head,*Tail; //указатели на адреса начала списка и его конца
public:
List():Head(NULL),Tail(NULL){}; //инициализируем адреса как пустые
~List(); //деструктор
void Show(); //функция отображения списка на экране
void Add(int x); //функция добавления элементов в список
float multiplication();
};
float List::multiplication(){
return ((float)(Head->Next->x*Tail->x))/2;
}
List::~List() //деструктор
{
while (Head) //пока по адресу на начало списка что-то есть
{
Tail=Head->Next; //резервная копия адреса следующего звена списка
delete Head; //очистка памяти от первого звена
Head=Tail; //смена адреса начала на адрес следующего элемента
}
}
void List::Add(int 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 ()
{
List lst; //объявляем переменную, тип которой есть список
for (int i = 0, n = rand()%11 + 10; i < n; ++i)
{
lst.Add(rand()%101-50);
}
lst.Show(); //ттображаем список на экране
_getch();
} |
|
Добавлено через 1 минуту
behemoth, сделала все как и сказали но программа выводит только 2 списка
C++ (Qt) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| #include <stdlib.h>
#include <iostream>
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <fstream>
#include<time.h>
using namespace std;
struct Node //структура являющаяся звеном списка
{
int x; //значение x будет передаваться в список
Node *Next,*Prev; //указатели на адреса следующего и предыдущего элементов списка
};
class List //создаем тип данных Список
{
Node *Head,*Tail; //указатели на адреса начала списка и его конца
public:
List():Head(NULL),Tail(NULL){}; //инициализируем адреса как пустые
~List(); //деструктор
void Show(); //функция отображения списка на экране
void Add(int x); //функция добавления элементов в список
float multiplication();
};
float List::multiplication(){
return ((float)(Head->Next->x*Tail->x))/2;
}
List::~List() //деструктор
{
while (Head) //пока по адресу на начало списка что-то есть
{
Tail=Head->Next; //резервная копия адреса следующего звена списка
delete Head; //очистка памяти от первого звена
Head=Tail; //смена адреса начала на адрес следующего элемента
}
}
void List::Add(int 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 ()
{
List lst; //объявляем переменную, тип которой есть список
for (int i = 0, n = rand()%11 + 10; i < n; ++i)
{
lst.Add(rand()%101-50);
}
lst.Show(); //ттображаем список на экране
_getch();
} |
|