Форум программистов, компьютерный форум CyberForum.ru

Поиск элемента в двусвязном списке - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
DonVito
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 3
19.05.2013, 09:27     Поиск элемента в двусвязном списке #1
Элемент двусвязного списка точка(x,y). Нужно написать функцию для нахождения максимально удаленной точки от центра координат.

iterator - количество элементов в списке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void List::FarAway(){
     Item *temp2=new Item;
     Item *temp=first, *p=first;
     int i=0;
     if (!first) return russia("Список пуст.\n");
     if(iterator==1){
         temp2->x=first->x; 
         temp2->y=first->y;
     } else{
     float max=sqrt((first->x)*(first->x)+(first->y)*(first->y));
     for(; temp != NULL; temp = temp->next){
         if(sqrt((temp->x)*(temp->x)+(temp->y)*(temp->y)) > max){
             temp2->x=temp->x;
             temp2->y=temp->y;
         }
     }
     while((p->x!=temp2->x) && (p->y!=temp2->y)){
         p=p->next;
         i++; 
     } 
     }
     russia("Максимально удаленная точка от центра координат: ");
     cout<<"Point"<<i+1<<" ("<<temp2->x<<";"<<temp2->y<<")\n";
Вот что у меня получилось. Но мне кажется это не совсем корректно. К тому же программа вылетает, если я добавлю точку в начало списка, расстояние до которой больше предыдущего максимального а затем вызову эту функцию.

Добавлено через 15 минут
Уже нашел ошибку, нужно было поставить >= в условии. Но вопрос по поводу корректности еще стоит
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 09:27     Поиск элемента в двусвязном списке
Посмотрите здесь:

C++ Поиск элемента в списке.
C++ вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
C++ Ошибка в двусвязном списке
C++ как работает вставка в двусвязном списке?
C++ Использование итератора в двусвязном списке
C++ Нахождение элемента в двусвязном списке
C++ что я делаю не так? в двусвязном списке?
Поиск элемента в двусвязном списке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Okonenko Stanis
6 / 6 / 1
Регистрация: 06.02.2013
Сообщений: 71
19.05.2013, 13:11     Поиск элемента в двусвязном списке #2
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
// .........
void    List::FarAway()
{
    // создать "Звено", для хранения "макс. Звена".
    Item*   max_item = new      Item;   // ПОМЕНЯЛ temp2 -> max_item    !!!!!
//? // .........
//? Item    *temp = first,  *p = first;
//? // .........
//? int     i=0;
    // если "Список" - ПУСТ ...
    if ( !first )
    {
        russia( "Список пуст.\n" );
        return;
    }
    // индекс "макс. Звена".
    int     maks_ind = 0;
    // если в "Списке" - одно "Звено" ...
    if ( iterator == 1 )
    {
        // сохранить "макс. Звено".
        max_item->x = first->x;
        max_item->y = first->y;
    }
    // если в "Списке" - БОЛЕЕ одного "Звена" ...
    else
    {
        // расстояние от "0-го Звена" "Списка" до начала координат.
        float   max = sqrt( (first->x)*(first->x) + (first->y)*(first->y) );
        // индекс "очередного Звена" "Списка".
        int     i = 1;
        // по всем "Звеньям" "Списка", начиная с "1-го Звена" (исключая "0-е Звено").
        for ( Item* temp=first->next; temp!=NULL; temp=temp->next )
        {
            // если расстояние от "очередного Звена" до начала координат БОЛЬШЕ
            // уже найденного максимума ...
            if ( sqrt( (temp->x)*(temp->x) + (temp->y)*(temp->y) ) > max )
            {
                // пересохранить "макс. Звено".
                max_item->x = temp->x;
                max_item->y = temp->y;
                // индекс "макс. Звена".
                maks_ind = i;   //(int)
            }
            // увеличить индекс "очередого Звена" "Списка".
            i++;
        }
//?     //( ВСЕГО ЭТОГО НЕ НАДО! )
//?     // поиск индекса "макс. Звена".
//?     while ( p->x != max_item->x  && p->y != max_item->y )
//?     {
//?         p=p->next;
//?         i++;
//?     }
    }
 
    russia( "Максимально удаленная точка от центра координат: " );
    cout << "Point" << maks_ind+1 << " (" << max_item->x << ";" << max_item->y << ")\n";
}
- В библиотеках шаблонов STL, и не только в них, Iterator используется совсем в
другом смысле, но не для учета числа Звеньев в Списках или других контейнерах. В
реальной программе может возникнуть путаница! Лучше использовать, например, Items_Num
- число Звеньев, или что-то в этом роде.
Yandex
Объявления
19.05.2013, 13:11     Поиск элемента в двусвязном списке
Ответ Создать тему
Опции темы

Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru