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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что означает запись в скобках и что возвращает return http://www.cyberforum.ru/cpp-beginners/thread622084.html
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код circleArea(float theRadius) //(1) { float theArea; theArea = 3.14159 * theRadius * theRadius;...
C++ Программа не компилируется, как разрешить ? Есть файл А в нем #ifndef _A_ #define _A_ #include "B.h" class A { public: http://www.cyberforum.ru/cpp-beginners/thread622075.html
Чтение и запись в консоли C++
Здравствуйте, могли бы вы подсказать как данное сделать? Мне нужно записать в консоль данные (Учитывая что это dll которая будет включатся в другую программу) и прочитать данные с консоли. Это...
Определить, сколько раз встречается в строку самое короткое слово (перевести из PASCAL в С++) C++
Дана строка содержащая текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово. Вот моя прога на Паскале: program prog; uses crt; var min,len, i, j,k : integer;...
C++ Выпуклый многоугольник http://www.cyberforum.ru/cpp-beginners/thread622033.html
Есть массив точек, нужно определить выпуклый ли это многоугольник. Я так понимаю что нужно посчитать каждый угол. Может быть можно другим более простым способом это сделать ?
C++ Просуммировать и выдать сумму всех чисел диапазона Суть первой задачи такова, чтобы пользователем вводились два числа - нижнее и верхнее значение диапазона чисел, а потом все числа входящие в диапазон (нижнее и верхнее включительно) надо... подробнее

Показать сообщение отдельно
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2012, 13:00
Цитата Сообщение от Uz Посмотреть сообщение
Только у меня возник ещё один вопрос: а если у меня есть два объекта класса список, например Spisok odin и Spisok dva, как мне обращаться к их элементам и устраивать по ним проход?
У вас список немного другого вида, чем я описал, есть ещё указатель на конец списка (Element *Tail), но в принципе, это ничего не меняет. Если есть два списка, Spisok odin и Spisok dva, то доступ к переменным объекта класса, как обчно:
C++
1
2
Element *ptr1 = odin.Head; // ptr1 указывает на начало первого списка.
Element *ptr2 = dva.Head;  // ptr2 указывает на начало второго списка.
Только перед этим, вам необходими переместить переменные-члены класса Spisok в public раздел, иначе у вас к ним доступа из main() не будет, или нужно создать метод, который будет выдавть указатель на начало списка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Spisok
{
    public:
    Element *Head; 
    Element *Tail;
    int razmer;
 
    Spisok():Head(NULL),razmer(0) {}; //Инициализация значений с помощью конструктора
    ~Spisok();
    void Add(int x); 
    void Show();   
};
А дальше, как я описывал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
  Spisok odin;
  Spisok dva;
  Element *ptr1 = odin.Head; // ptr1 указывает на начало первого списка.
  Element *ptr2 = dva.Head;  // ptr2 указывает на начало второго списка.
 
while ( ptr1 != NULL) // обход первого списка.
{
    ptr1 -> x = 5; // присвоение значения переменной элемента списка. 
    ptr1 = ptr1 -> Next; // в ptr1 адресс следующего элемента списка.
}
 while ( ptr2 != NULL) // обход второго списка.
{
    ptr2 -> x = 10; 
    ptr2 = ptr2 -> Next; 
} 
    system("pause");
    return 0 ;
}
Добавлено через 17 минут
Если же проблема в том, чтобы оставить переменные-члены класса Spisok в приватном разделе, то тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Spisok
{
    Element *Head; 
    Element *Tail;
    int razmer;
    
    public:
    Spisok():Head(NULL),razmer(0) {}; //Инициализация значений с помощью конструктора
    ~Spisok();
    void Add(int x); 
    void Show();
    Element* getHead(); // метод для получения указателя на начало списка.  
};
 
Element* Spisok::getHead()
{
    return Head; // возвращает указатель на начало списка.
}
.....................................
и так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
  Spisok odin;
  Spisok dva;
  Element *ptr1 = odin.getHead(); // ptr1 указывает на начало первого списка.
  Element *ptr2 = dva.getHead();  // ptr2 указывает на начало второго списка.
 
while ( ptr1 != NULL) // обход первого списка.
{
    ptr1 -> x = 5; // присвоение значения переменной элемента списка. 
    ptr1 = ptr1 -> Next; // в ptr1 адресс следующего элемента списка.
}
 while ( ptr2 != NULL) // обход второго списка.
{
    ptr2 -> x = 10; 
    ptr2 = ptr2 -> Next; 
} 
    system("pause");
    return 0 ;
}
По идее, такие же методы (как getHead()), нужно добавить и для извлечения razmer и Tail.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru