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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
#1

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

07.07.2010, 11:34. Просмотров 554. Ответов 6
Метки нет (Все метки)

Есть задание. Разработать абстрактынй тип данных, и чтобы продгдамма могла обеспечивать основные функции работы с ней
одной из этих фунгкий является доступ к отдельному элементу
не могу понять что это значит. и как это реализовать на с++ с помощью двунаправленногго списка этот самый доступ
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2010, 11:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двунаправленный список, доступ к элементу (C++):

Двунаправленный список! - C++
Не Класс! Помогите создать список (Двунаправленный хоронящий int a ) сама проблема в том что я не пойму как организовать ссылку на...

двунаправленный список - C++
Двунаправленный список.Найти сумму первого и последнего элементарных.Заранее спасибо

СД Двунаправленный список - C++
Ребят помогите пожалуйста понять что значит сделать двунаправленный список используя обьектно-ориентированное программирование. Хотяб...

Двунаправленный список - C++
Как в этом списке поменять ввод элементов с ручного на рандомный, помогите пожалуйста? #include <iostream.h> struct tochd { ...

двунаправленный список - C++
Используя двунаправленный список, написать программу сложения двух длинных целых чисел. Что такое двунаправленный список понимаю, но как...

Двунаправленный список - C++
Вопросы: Почему ругается при таком описании, говорит ; пропустил spis_fam * Create_first(char *); //формирование первого элемента ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
07.07.2010, 11:44 #2
Перегрузи в своем классе operator[] (int _index)
0
kirich iz Che
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 25
07.07.2010, 12:02  [ТС] #3
подробнее распиши как это сделать)
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
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; - для чтения.
А компилятор сам разберется, когда какую вызывать. Тела их абсолютно идентичны. Даже можно константную версию реализовать через неконстантную.
0
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
так ?
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
07.07.2010, 13:08 #6
Почти правильно.
А когда будет равно 3,
return *p;

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

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

Двунаправленный список - C++
Вот в примере елем в список добавл в конец, а как сдел чтобы они добавл в начало ? void List_2::Insert_end_list_2(int data) { Plist...

двунаправленный список. - C++
Доброго времени суток. Прощу помочь с заданием которое звучит так : Построить кольцевой двунаправлений список. Значения элементов...

Двунаправленный список - C++
Чемпион мира по футболу. Страна, год последней победы, число побед. Сортировка по названию. Вычисление среднего числа титулов всех...

Двунаправленный список - C++
Помогите пожалуйста удалить заданный элемент из двунаправленного списка... Напишите как это делается


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru