Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
1

Сортировка эл-ов списка, обращение к элементам

23.10.2014, 22:22. Показов 987. Ответов 4
Метки нет (Все метки)

Здравствуйте, мне нужно отсортировать список по алфавиту. Я могу сделать это, если буду сортировать указатели, а как мне сортировать сами элементы списка, а не указатели?
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
struct students
{
    char name[20];
    char adress[40];
    char lang[15];
    char tel_number[12];
};
 
struct List
{
    students pstudents;   // вот такие у меня структуры
    List* next;
 
};
 
// а вот сама функция сортировки:
void SortList (List *h)
 {
     List *p1;
     p1 = h->next;
     students *temp;    
     int prizn;
     do
    {   
        prizn=0;
        p1 = h->next;
 
     while(p1->next)
    {
        
        if(strcmp(p1->pstudents.name, p1->next->pstudents.name) > 0)  // сортировка по именам
            {
                temp = p1->pstudents;           // вот тут подчеркивает p1
                p1->pstudents = p1->next->pstudents;  
                p1->next->pstudents = temp;  // и вот тут подчеркивает знак '='
                prizn = 1;
            }
        else
            p1 = p1->next;
    }
 }while(prizn);
 
void DeleteList(List *h)
{
    List *temp;
    while (h)
    {   
        temp = h;
        h = h->next;
        delete temp ->pstudents; //звільнення пам’яті для даних    // тут подчеркивает temp
        delete temp ;   // звільнення пам’яти для ел. списка
    }
}
}
проблема в том, что у меня как ошибка подчеркивает элемент p1 в сортировке, а я не знаю как мне это исправить.. подскажите пожалуйста
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2014, 22:22
Ответы с готовыми решениями:

Обращение с элементам списка dropdown
Всем привет! Помогите решить простейшую задачу! На форме есть вопрос в виде dropdown списка, как...

Обращение к элементам линейного списка через элементы массива указателей
Вот полная версия программы. Компилятор не выдаёт ошибок, но при выполнении, судя по всему, на...

Обращение к элементам строки "списка списков"
Здравствуйте! Для объекта (поправьте меня и объясните как правильно это называется)...

Обращение к элементам
Мне надо создать в форме переменное кол-во элементов (textBox) что я сделал без проблем. В цикле...

4
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2014, 22:30 2
Чтобы не подчёркивало:
C++
1
2
3
4
5
6
students temp; 
...
temp = p1->pstudents;           // вот тут подчеркивает p1
p1->pstudents = p1->next->pstudents;  
p1->next ->pstudents = temp;  // и вот тут
...
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
23.10.2014, 22:38  [ТС] 3
alsav22, спасибо.. а как быть в функции удаления памяти?
C++
1
2
    delete temp->pstudents;     // тут подчеркивает temp, даже если убрать звездочку с него..
        delete temp ;
Добавлено через 2 минуты
alsav22, а.. и могли бы вот еще что сказать.. в функции создания списка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void  CreatList(List *h)
{   
    ifstream ft("Text.txt");
    //h = new List;     //створення головного елемента
    //h ->pstudents = 0;        //даних в ньому не буде
    h->next=0;
    List *temp = h;
    while (!ft.eof())
    {   
        temp ->next = new List; //створення наступного елемента
        temp = temp->next;    //перенесення показчика на створений елемент
        //temp->pstudents = new students;
        ft >> temp->pstudents.name;
        ft >> temp->pstudents.adress;
        ft >> temp->pstudents.lang;
        ft >> temp->pstudents.tel_number;
 
    }
    temp ->next = NULL;         //кінець списка
    ft.close();
 
}
нужно ли писать
temp->pstudents = new students; потому что там тоже ему temp не нравится..
0
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2014, 23:37 4
Лучший ответ Сообщение было отмечено Michel как решение

Решение

Цитата Сообщение от Michel Посмотреть сообщение
нужно ли писать
temp->pstudents = new students; потому что там тоже ему temp не нравится..
Не нужно. pstudents у вас не указатель, поэтому не нужно ему пытаться присвоить указатель, который возвращает new. При создании нового List, psudents в нём и так создаётся. Только разберитесь там с выделением памяти.

Добавлено через 2 минуты
Цитата Сообщение от Michel Посмотреть сообщение
а как быть в функции удаления памяти?
Через delete освобождается то, что выделяется через new, т.е. pstudents, при таком удалении, должен быть указателем, он у вас НЕ указатель.
1
0 / 0 / 1
Регистрация: 14.09.2014
Сообщений: 97
24.10.2014, 01:11  [ТС] 5
alsav22, спасибо большое)
0
24.10.2014, 01:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2014, 01:11

Обращение к элементам
Всем доброго времени суток! У меня такая проблема возникла: не могу из одной формы изменить...

Обращение к элементам массива
Помогите разобраться, пожалуйста. Вот например у меня есть массив: a = rand (1,5,5) У него...

Обращение к элементам стиля
LItem: tlistboxitem; ... LItem := tlistboxitem.Create(ListBox2); LItem.Parent:=...

Обращение к элементам массива
Добрый день! Хочу решить систему уравнений и для этого создаю несколько массивов переменных но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru