![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
r18Romik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 13.2.2008 Где: Пермь Репутация: нет Всего: нет |
Как организовать двунаправленный линейный список?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
std::list не подходит? вроде неплохо организован
|
|||
|
||||
Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
Тут скорее нужно программу написать, которая осуществляет данную структуру. Используй структуру в ней будет указатель на последующий элемент и на предыдущий (тоже структуры). Обход осуществлется рекурсией. Пиши, что конкретно не понятно?
-------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
r18Romik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 13.2.2008 Где: Пермь Репутация: нет Всего: нет |
Точнее не понятно следующее!!!
У меня есть прграмма которая организована через одномерный массив (Вектор) Мне нужно ту же самую программу вместо данного массива организовать её через двунаправленный линейный список... ![]() #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> struct MyType { char fio[50]; int mesto; int operator==(MyType& b); }; int MyType::operator==(MyType& b) { return (strcmp(fio,b.fio)==0)&&(mesto==b.mesto); } ; template<int max,class T> //max - максимальное количество элементов //T -тип элементов class Vektor //Пользовательский класс - вектор { T array[max]; //Массив int fcount; //Количество элементов массива public: int Count(){return fcount;}; //Возвращает количество элементов T operator[](int); //Перегруженый оператор [] int Add(T e); //Добавление элемента int Del(int index); //Удаление элемента int Find(T e); //Поиск элемента Vektor(); //Конструктор } template <int max,class T> Vektor<max,T>::Vektor() //Конструктор { fcount=0; } template <int max,class T> T Vektor<max,T>::operator[](int index) //Возвращает элемент Index { if((index<0)||(index>=fcount)) cout << "Нет элемента #"<<index<<endl; return array[index]; }; template <int max,class T> int Vektor<max,T>::Add(T e) //Добавляет элемент к списку { if(fcount<max) { array[fcount]=e; fcount++; return fcount; } else return -1; } template <int max,class T> int Vektor<max,T>::Find(T e) //Поиск элемента в списке { int i; for(i=0;i<fcount;i++) if(array[i]==e) return i; return -1; } void main() { clrscr(); Vektor<255,char> vchar; Vektor<100,float> vfloat; Vektor<50,MyType> vMy; MyType m; for(char i=65;i<=75;i++) vchar.Add(i); for(i=0;i<5;i++) vfloat.Add(i*0.64); strcpy(m.fio,"Иванов"); m.mesto=2; vMy.Add(m); strcpy(m.fio,"Петров"); m.mesto=1; vMy.Add(m); strcpy(m.fio,"Сидоров");m.mesto=3; vMy.Add(m); cout << "Элементы массива символов: "; for(i=0;i<vchar.Count();i++) cout << vchar[i]; cout << "\r\nЭлемент \"D\" имеет индекс #"<<vchar.Find((char)'D')<<endl<<endl; cout << "Элементы массива цифр с плавающей точкой: "; for(i=0;i<vfloat.Count();i++) cout << vfloat[i]<<"; "; cout << "\r\nЭлемент \"1.28\" имеет индекс #"<<vfloat.Find(1.28)<<endl<<endl; cout << "Элементы массива пользовательских данных: "<<endl; for(i=0;i<vMy.Count();i++) { cout <<(int)i+1<<") "<<vMy[i].fio<<" - "<<vMy[i].mesto<<" место"<<endl; } strcpy(m.fio,"Петров"); m.mesto=1; cout << "Элемент \"Петров\" имеет индекс #"<<vMy.Find(m)<<endl; getch(); } |
|||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Ну и в чём проблема?
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
r18Romik, во-первых, надо делать не #include <iostream.h>, а #include <iostream>, не #include <string.h>, а #include <cstring>
Вот тебе для начала кусок интерфейса:
|
|||
|
||||
r18Romik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 13.2.2008 Где: Пермь Репутация: нет Всего: нет |
Будь добр,напиши комментарии
![]() Добавлено через 5 минут и 17 секунд И если честно я мало понял куда нужно вставить именно в мою порграмму? Заменить массив,пробавал не оплучилось! Покажи пожалуйста на моей программу будь добр! |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
r18Romik, конечно работать не будет. Тебе же нужно создать еще кучу методов. В частности, добавления и удаления элементов списка. Еще нужен деструктор...
Если ты сам писал свою программу, то должен был и в этой легко разобраться. Тем более, что я тебе дал не законченую программу, а только указал направление, в котором надо двигаться. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Видимо он с деревом путает. |
|||
|
||||
Annihilator |
|
|||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
Да нет, не путаю. А почему нельзя рекурсией?? -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Если можно избежать рекурсии - то лучше избежать (да простят меня функциональщики...). Так как это ведёт к значительно большему расходу памяти (потенциально - переполнение стека), да и скорость нехило снижается.
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Можно, но совершенно бессмысленно. Список - не рекурсивная структура. Обход естественно и просто определяется циклом. |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Гланды можно через одно место вырвать, но зачем? ![]() |
|||
|
||||
answer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 8.5.2008 Репутация: нет Всего: нет |
подскажите:
Разработать шаблоны структуры данных в памяти. Тип хранимого элемента – параметр шаблона. Шаблон может содержать указатель на объект, либо сам объект. Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока. Проверить работу шаблона на разработанном классе, используя его как параметр шаблона. Структуры данных: двусвязный список, элемент списка хранит указатель на объект как начать: объявление класса, шаблона и списка, не могу разобраться, знаю как это все в отдельности лбъявляется а как это связать??? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |