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

Метод списка swap, который меняет информацию двух узлов местами - C++

Восстановить пароль Регистрация
 
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
28.12.2011, 10:33     Метод списка swap, который меняет информацию двух узлов местами #1
Добавьте в класс списков метод Swap(int i, int j), меняющую
информацию звеньев списка с номерами i и j

прошу,помогите,пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2011, 10:33     Метод списка swap, который меняет информацию двух узлов местами
Посмотрите здесь:

C++ Написать программу которая меняет местами элементы массива
Написать программу, которая меняет местами элементы массива C++
C++ Программа которая меняет местами значение вещественных переменных а и в
Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. C++
C++ Написать программу, которая меняет местами значения двух переменных с использованием дополнительной переменной.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.12.2011, 10:34     Метод списка swap, который меняет информацию двух узлов местами #2
besbyblik, а где сам класс?
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
28.12.2011, 10:38  [ТС]     Метод списка swap, который меняет информацию двух узлов местами #3
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
Листинг 1.3. Класс списков List
// Продолжение файла List.h
class List{ // Класс списков
   Node *first; // Указатель на первое звено
   Node *last; // Указатель на последнее звено
public:
List( ) // Конструктор по умолчанию 
{ first = 0; last = 0; } // создает пустой список 
~List( ); // Деструктор
bool Empty( ) const // Проверка, не пуст ли список
{ return (first = = 0); }
T& Front( ){ return first->d; } // Ссылка на первый элемент
void Push_Front(T Val); // Вставить новое звено в начало списка
void Push_Back(T Val); // Вставить новое звено в конец списка 
T Pop_Front( ); // Удаление первого звена
size_t Size( ); // Количество звеньев списка
class Iterator{ // Класс итераторов списка
Node* curr; // Указатель на текущее звено списка
public:
Iterator(Node *pn = 0) // Конструктор создает итератор
{ curr = pn; } // по указателю pn на звено списка
Iterator(Iterator& p) // Конструктор копирования
{ curr = p.curr; }
Node& operator*( ) // Доступ к текущему звену
{ return *curr; }
Node* operator->( ) // Указатель на текущее звено списка
{ return curr;  }
Iterator& operator++( ) // Префиксный инкремент
{ // Используется в виде  ++p
curr = curr->next; // Возвращает итератор на 
return *this; // следующее звено списка
}
Iterator operator++(int) // Постфиксный инкремент
{  // Используется в виде  p++
Iterator tmp = *this; // tmp – копия текущего итератора
curr = curr->next; // Изменение текущего итератора
return tmp; // Возвращение предыдущего значения итератора
}
bool operator= =(Iterator p) // Сравнение итераторов на равенство
{ return curr = = p.curr; }
bool operator!=(Iterator p) // Сравнение итераторов на неравенство
{ return curr != p.curr; }
}; // Конец объявления класса Iterator
Iterator Begin( ) // Получение итератора 
{ return Iterator(first); } // на первое звено списка
Iterator End( ) // Получение итератора на звено списка, 
{ return Iterator(0); } // следующее за последним звеном
Iterator InsertAfter(Iterator p, T val); // Вставка звена после итератора
void EraseAfter(Iterator p); // Удаление звена после итератора p
};
void PrintList(List& L, char delimiter = ' '); // Вывод списка
#endif
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
28.12.2011, 21:12     Метод списка swap, который меняет информацию двух узлов местами #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
#include <algorithm>
//....
 
void Swap(int i, int j)
{
    // находим i-ый элемент
    Node* p1 = first;
    while(i > 0)
    {
        p1 = p1->next;
        --i;
    }
 
    // находим j-ый элемент
    Node* p2 = first;
    while(j > 0)
    {
        p2 = p2->next;
        --j;
    }
 
    // меняем данные двух звеньев местами
    std::swap(p1->d, p2->d);
}
идея думаю понятна.
besbyblik
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 77
28.12.2011, 21:15  [ТС]     Метод списка swap, который меняет информацию двух узлов местами #5
rangerx, а можно прям на пальцах, вообще к концу дня ничего не догоняю
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
28.12.2011, 22:47     Метод списка swap, который меняет информацию двух узлов местами #6
Цитата Сообщение от besbyblik Посмотреть сообщение
rangerx, а можно прям на пальцах, вообще к концу дня ничего не догоняю
Это и есть "на пальцах"
Yandex
Объявления
28.12.2011, 22:47     Метод списка swap, который меняет информацию двух узлов местами
Ответ Создать тему
Опции темы

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