Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двунапрвленный линейный список, Двунапрвленный линейный список 
:(
    Опции темы
r18Romik
Дата 4.5.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2008
Где: Пермь

Репутация: нет
Всего: нет



Как организовать двунаправленный линейный список?
PM MAIL ICQ   Вверх
baldina
Дата 4.5.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



std::list не подходит? вроде неплохо организован
PM MAIL   Вверх
Annihilator
Дата 4.5.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Тут скорее нужно программу написать, которая осуществляет данную структуру. Используй структуру в ней будет указатель на последующий элемент и на предыдущий (тоже структуры). Обход осуществлется рекурсией. Пиши, что конкретно не понятно?


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
r18Romik
  Дата 6.5.2008, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2008
Где: Пермь

Репутация: нет
Всего: нет



Точнее не понятно следующее!!!
У меня есть прграмма которая организована через одномерный массив (Вектор)
Мне нужно ту же самую программу вместо данного массива организовать её через двунаправленный линейный список... smile 

#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();
}

PM MAIL ICQ   Вверх
Lycifer
Дата 6.5.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Ну и в чём проблема? smile 

PM MAIL ICQ   Вверх
bsa
Дата 6.5.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



r18Romik, во-первых, надо делать не #include <iostream.h>, а #include <iostream>, не #include <string.h>, а #include <cstring>
Вот тебе для начала кусок интерфейса:
Код
template<class T>
class List
{
   struct Node {
      Node() : prev(0), next(0), data(){}
      Node *prev;
      Node *next;
      T data;
   };
public:
   List() : begin_(0), end_(0){}
private:
   Node *begin_;
   Node *end_;
};

PM   Вверх
r18Romik
Дата 7.5.2008, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 13.2.2008
Где: Пермь

Репутация: нет
Всего: нет



Будь добр,напиши комментарииsmile Заранее спасибо

Добавлено через 5 минут и 17 секунд
И если честно я мало понял куда нужно вставить именно в мою порграмму? 
Заменить массив,пробавал не оплучилось! Покажи пожалуйста на моей программу будь добр!
PM MAIL ICQ   Вверх
bsa
Дата 7.5.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



r18Romik, конечно работать не будет. Тебе же нужно создать еще кучу методов. В частности, добавления и удаления элементов списка. Еще нужен деструктор...
Если ты сам писал свою программу, то должен был и в этой легко разобраться. Тем более, что я тебе дал не законченую программу, а только указал направление, в котором надо двигаться.
PM   Вверх
Любитель
Дата 7.5.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Annihilator @  4.5.2008,  16:18 Найти цитируемый пост)
Обход осуществлется рекурсией.

Связанный список рекурсией? smile 


--------------------
PM MAIL ICQ Skype   Вверх
bsa
Дата 7.5.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Любитель @ 7.5.2008,  16:22)
Цитата(Annihilator @  4.5.2008,  16:18 Найти цитируемый пост)
Обход осуществлется рекурсией.

Связанный список рекурсией? smile

Видимо он с деревом путает.
PM   Вверх
Annihilator
Дата 8.5.2008, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(bsa @  8.5.2008,  02:34 Найти цитируемый пост)
Видимо он с деревом путает. 

Да нет, не путаю. А почему нельзя рекурсией??


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Любитель
Дата 8.5.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Если можно избежать рекурсии - то лучше избежать (да простят меня функциональщики...). Так как это ведёт к значительно большему расходу памяти (потенциально - переполнение стека), да и скорость нехило снижается.


--------------------
PM MAIL ICQ Skype   Вверх
baldina
Дата 8.5.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата

А почему нельзя рекурсией?? 

Можно, но совершенно бессмысленно. Список - не рекурсивная структура. Обход естественно и просто определяется циклом.
PM MAIL   Вверх
JackYF
Дата 8.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Annihilator @  8.5.2008,  02:36 Найти цитируемый пост)
А почему нельзя рекурсией??

Гланды можно через одно место вырвать, но зачем? smile зачем рекурсия там, где она не нужна. У рекурсии есть хороший недостаток - накладные расходы на вызовы по памяти, чего не скажешь про итеративные алгоритмы.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
answer
Дата 8.5.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 8.5.2008

Репутация: нет
Всего: нет



подскажите:

Разработать шаблоны структуры данных в памяти. Тип хранимого элемента – параметр шаблона. Шаблон может содержать указатель на объект, либо сам объект. Реализовать операции включения/удаления по заданному логическому номеру, поиск минимального/максимального, включение с сохранением порядка, сортировки выбором или вставками, загрузки хранимых элементов в структуру данных из последовательного потока. Проверить работу шаблона на разработанном классе, используя его как параметр шаблона. Структуры данных: двусвязный список, элемент списка хранит указатель на объект

как начать: объявление класса, шаблона и списка, не могу разобраться, знаю как это все в отдельности лбъявляется а как это связать???
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1206 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.