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

двусвязный список. База данных на его основе - C++

Восстановить пароль Регистрация
 
Greeezly
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
16.10.2013, 10:33     двусвязный список. База данных на его основе #1
Давайте немного поговорим про двусвязный список. Я немного подзапутался, мне нужен трезвый совет.

Если структуры, с которыми мы оперируем имеют тип
C++
1
2
3
4
5
6
7
8
struct auto
{
       int data;
       Auto *next;
       Auto *prev;
       Auto():next(NULL),prev(NULL), d(-332215){}
       Auto(Auto* ptr_n, Auto *ptr_p , int *data): next(ptr_n),prev(ptr_p), d(data) {}
};
тогда мне все понятно и ясно, мы кидаем по 1 значению передаваемой переменной в data. И все работает.

Но! объясните как мне работать со структурами такого типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Auto
{
    char Name[25];
    char Brand[25];
    char Color[15];
    char Country[20];
    int Price;
    bool Availability;
    int d;
    Auto *next;
    Auto *prev;
    Auto():next(NULL),prev(NULL), d(-332215){}
    Auto(Auto* ptr_n, Auto *ptr_p , int *data): next(ptr_n),prev(ptr_p), d(data) {}
};
Тут много переменных, а все их передавать в функцию, разумеется, не хочется. Я думал, что можно сделать так: у каждой вновь создаваемой структуры погрузить адреса памяти переменных в массив и отправить функцию, а там уже заполнить и всё. Но у меня технические проблемы это сделать, рук не хватает.. может кто подскажет, или есть какой-то другой способ..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2013, 10:33     двусвязный список. База данных на его основе
Посмотрите здесь:

Двусвязный список C++
двусвязный список C++
Двусвязный список C++
C++ двусвязный список
Двусвязный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
16.10.2013, 12:58     двусвязный список. База данных на его основе #2
Цитата Сообщение от Greeezly Посмотреть сообщение
может кто подскажет, или есть какой-то другой способ..
А в чем сложность то ?
Пакуйте данные в структуру (класс)
C++
1
2
3
4
5
6
7
8
9
10
struct Data
{
  char Name[25];
  char Brand[25];
  char Color[15];
  char Country[20];
  int Price;
  bool Availability;
  int d; 
};
и уже эту структуру делайте полем struct Auto
C++
1
2
3
4
5
6
7
struct Auto
{
    Data data;
    Auto *next;
    Auto *prev;
..........
};
Или struct Auto вообще сделать шаблонной структурой
Greeezly
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
16.10.2013, 13:51  [ТС]     двусвязный список. База данных на его основе #3
мм вон оно как, ща попробую
Greeezly
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
11.11.2013, 06:47  [ТС]     двусвязный список. База данных на его основе #4
А можете привести простенький пример с передачей структуры? У меня г какая-то выходит..
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.11.2013, 08:54     двусвязный список. База данных на его основе #5
Вообще, для решения таких задач и были придуманы шаблонные типы. Если вам кровь-из-носу надо велосипедить, то руками это повторить нетрудно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T>
class LinkedList {
 public:
  void add(const T &value) {
    // код добавления ...
  }
  void erase(const T &value) {
    // код удаления ...
  }
};
 
...
// ну и при создании объекта связного списка специфицируете шаблонный параметр своей структурой:
LinkedList<Auto> autoList;
Auto a;
autoList.add(a);
...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Auto
{
    char Name[25];
    char Brand[25];
    char Color[15];
    char Country[20];
    int Price;
    bool Availability;
    int d;
    Auto *next;
    Auto *prev;
    Auto():next(NULL),prev(NULL), d(-332215){}
    Auto(Auto* ptr_n, Auto *ptr_p , int *data): next(ptr_n),prev(ptr_p), d(data) {}
};
В принципе, можно и так сделать. Связный список структур, которые сами хранят указатель на следующий и предыдущий объект называется "неинтрузивным связным списком" и такой список сам не создает никаких объектов в памяти, чем очень привлекателен.
Yandex
Объявления
11.11.2013, 08:54     двусвязный список. База данных на его основе
Ответ Создать тему
Опции темы

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