0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 1
|
|
1
|
Сортировка списка методом пузырька по полю string
18.12.2018, 13:32. Показов 823. Ответов 0
Здраствуйте, нужна помощь!
Как надо отсортировать список по полю ФИО
код прилагаю:
} C++ | 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
| #include <conio.h>
#include <iostream>
#include <string>
#include <vector>
#include < string.h>
using namespace std;
struct Student // Сотрудник
{
string fio; // ФИО
string group; // группа
string numberZachet; // Зачетная книжка
int ocenki[4]; // ocenki
};
struct ListItem // Элемент списока
{
Student student; // Инф поле
ListItem *pNext; // Указатель на следующий элемент
};
struct List // Список
{
ListItem *pFirst; // Указатель на первый элемент списка
};
// Функция добавления элемента в начало списка
void addFirst(List & list, // Указатель на начало списка
ListItem* p) // Указатель на добавляемый элемент (Добавляется текущий элемент,копия элемента не создается)
{
p->pNext = list.pFirst;
list.pFirst = p;
}
// Извлечение элемента из начала списка
ListItem * delFirst(List &list) // Функция возвращает указатель на извлеченный элементэлемент
{
if (list.pFirst == 0) return 0;
ListItem *p = list.pFirst;
list.pFirst = p->pNext;
return p;
}
// Добавление элемента перед заданным
bool add(List &list, ListItem * pZad, ListItem *p)
{
// Функция возвращает true при нормальном завершении и false в случае ошибки
if (pZad == list.pFirst) // Элемент будет первым
{
p->pNext = list.pFirst;
list.pFirst = p;
return true;
}
ListItem *pPred = list.pFirst; // Указатель на предыдущий элемент перед pZad
while (pPred->pNext != pZad && pPred->pNext)
pPred = pPred->pNext;
if (pPred->pNext == 0) return false; // Элемента pZad нет в списке
p->pNext = pZad;
pPred->pNext = p;
return true;
}
// Удаление любого элемента p из списка
ListItem * del(List & list, ListItem *p) // Функция возвращает указатель на удаленныйэлемент
{
if (list.pFirst == 0) return 0; // Список пуст
if (list.pFirst == p) // Удаляем первый элемент
{
list.pFirst = p->pNext;
return p;
}
else
{
ListItem *pPred = list.pFirst; // Указатель на предыдущий элемент перед p
while (pPred->pNext != p && pPred->pNext)
pPred = pPred->pNext;
if (pPred->pNext == 0) return 0; // Элемента p нет в списке
pPred->pNext = p->pNext;
return p;
}
}
int main(int argc, char* argv[])
{
std::string str;
const char * c = str.c_str();
int k = 0;
List list1;
list1.pFirst = 0; // Список пуст
ListItem *p;
// Ввод списка
char Ch; // Переменная для ввода условия продолжения ввода
do
{
p = new ListItem; // Выделяем память под элемент
cout << "\nFIO: ";
getline(cin, p->student.fio);
cout << "Group: ";
getline(cin, p->student.group);
printf("Zachetka: ");
getline(cin, p->student.numberZachet);
cout << "Ocenki:";
for (int i = 0; i < 4; i++)
{
cin >> p->student.ocenki[i];
cout << "Ocenki:";
cin.ignore();
}
addFirst(list1, p); // Добавляем элемент в начало списка
printf("For continue press Y or y else any key! ");
Ch = _getche(); // Чтение кода клавиши с печатью символа
k++;
} while (Ch == 'Y' || Ch == 'y');
// Вывод спика
for (ListItem *pi = list1.pFirst; pi; pi = pi->pNext) // Просмотр списка
cout << endl << pi->student.fio << ' ' << pi->student.group << ' ' << pi->student.numberZachet << ' ' <<
pi->student.ocenki;
// Сортировка списка (метод пузырька)
for (ListItem *pi = list1.pFirst; pi; pi = pi->pNext)
{
for (ListItem *pj = list1.pFirst; pj; pj = pj->pNext)
{
strcpy_s(pi->student.fio, pi->pNext->student.fio);
int g;
strcpy(pj, s.c_str());
g = strcmp(pj->student.fio, pj->pNext);
if ( ( == 0))
// Ищем минимальный элемент в списке
/*double min = pi->student.fio;
ListItem *pmin = pi;
for (ListItem *pj = pi->pNext; pj; pj = pj->pNext)int
*/
}
}
// Печать списка после сортировки
cout << "\nAfter sorting:";
for (ListItem *pi = list1.pFirst; pi; pi = pi->pNext)
{// Просмотр списка
cout << endl << pi->student.fio << ' ' << pi->student.group << ' ' << pi->student.numberZachet << ' ';
cout << "ocenki:";
for (int i = 0; i < 4; i++)
{
cout << pi->student.ocenki[i];
}
}
system("pause"); // Останавливаем программу, ждем нажатия любой клавиши |
|
0
|