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

Двунаправленный список, доступ к элементу - C++

Восстановить пароль Регистрация
 
kirich iz Che
 Аватар для kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
07.07.2010, 11:34     Двунаправленный список, доступ к элементу #1
Есть задание. Разработать абстрактынй тип данных, и чтобы продгдамма могла обеспечивать основные функции работы с ней
одной из этих фунгкий является доступ к отдельному элементу
не могу понять что это значит. и как это реализовать на с++ с помощью двунаправленногго списка этот самый доступ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2010, 11:34     Двунаправленный список, доступ к элементу
Посмотрите здесь:

C++ двунаправленный список
C++ Двунаправленный список
Двунаправленный список C++
Двунаправленный список C++
C++ двунаправленный список.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
07.07.2010, 11:44     Двунаправленный список, доступ к элементу #2
Перегрузи в своем классе operator[] (int _index)
kirich iz Che
 Аватар для kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
07.07.2010, 12:02  [ТС]     Двунаправленный список, доступ к элементу #3
подробнее распиши как это сделать)
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
07.07.2010, 12:30     Двунаправленный список, доступ к элементу #4
А что здесь особенно расписывать то?
В теле функции-члена:
1. проверяешь запрошенный индекс элемента. Если он меньше нуля или больше или равен количеству элементов списка, то делаешь что-то нехорошее (например, бросаешь исключение) - это явная ошибка вызова.
2. Если все пока ок, то:
2.1. заводишь переменную-счетчик текущего индекса, устанавливаешь ее в 0. Текущий элемент у тебя - "голова" твоего списка.
2.2. сравниваешь счетчик с запрошенным индексом. Если равны - возвращаешь ссылку на текущий элемент. Иначе, переходишь к следующему элементу и инкрементируешь счетчик.
2.3. переходишь к п.2.2.
Вот и все........

Разве что, идеологически более правильно сделать две функции:
Element& operator[] (int _index); - для записи элемента, и
const Element& operator[] (int _index) const; - для чтения.
А компилятор сам разберется, когда какую вызывать. Тела их абсолютно идентичны. Даже можно константную версию реализовать через неконстантную.
kirich iz Che
 Аватар для kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
07.07.2010, 12:42  [ТС]     Двунаправленный список, доступ к элементу #5
если я правильно понял, то я ввожу в переменную номер элемента например n=3.
если у мя всего 2 элемента то ошибка,
если все оки, то while(n!=3)
p=p->next
n++

а когда будет равно 3,
cout>>p->info>>endl
так ?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
07.07.2010, 13:08     Двунаправленный список, доступ к элементу #6
Почти правильно.
А когда будет равно 3,
return *p;

и в совсем другом месте кода
cout << list[3].info << endl;

Вот где-то примерно так.... Конечно, не видя твоего реального кода, что-то более определенное сказать трудно.
Короче, экспериментируй! Оно все получится!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2010, 22:59     Двунаправленный список, доступ к элементу
Еще ссылки по теме:

Двунаправленный список C++
C++ двунаправленный список

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

Или воспользуйтесь поиском по форуму:
kirich iz Che
 Аватар для kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
07.07.2010, 22:59  [ТС]     Двунаправленный список, доступ к элементу #7
блин, подскажи еще плиз
как мне реализовать ввод данных в список. я на си написал, а надо на с++
вот на си что получилось
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
    while(1)
{ 
if(i!=0)
{p1->next=(struct NODE *)malloc(sizeof(struct NODE));
p2=p1;
p1=p1->next;
}
else
{p1=(struct NODE *)malloc(sizeof(struct NODE));
first=p1;
p1->prior=NULL;
}
cout<<"Введите число:"<<endl;
cin>>&p->info
printf("\n\n\t Ввод следующего числа?");
printf ("\n\t 1) Da; 2) Net \n\t");
scanf("%d", &punct);
if(i!=0)
{p1->prior=p2;}
i++;
if(punct==2)
{p1->next=NULL;
break;}
}
}
у меня проблема с выделением памяти, как ее сделать, напиши плиз

Добавлено через 2 часа 6 минут
нужна просто функция, которая бы позволила ввод данных в список определенной длины..

Добавлено через 1 час 23 минуты
еще и вывод не работает(

Добавлено через 6 часов 13 минут
ребяяяяяяяят
Yandex
Объявления
07.07.2010, 22:59     Двунаправленный список, доступ к элементу
Ответ Создать тему
Опции темы

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