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

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

Войти
Регистрация
Восстановить пароль
 
Greeezly
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
#1

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

16.10.2013, 10:33. Просмотров 678. Ответов 4
Метки нет (Все метки)

Давайте немного поговорим про двусвязный список. Я немного подзапутался, мне нужен трезвый совет.

Если структуры, с которыми мы оперируем имеют тип
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++ Структуры: На основе данных входного файла составить список студентов
C++ Структуры: на основе данных входного файла составить список студентов группы
C++ Иерархия классов "Структура - Список - Кольцевой Двусвязный список"
Составить двусвязный список на основе класса, объекты которого будут формировать этот список C++
C++ Разработать абстрактный тип данных (АТД) «Двусвязный циклический список»
Двусвязный список C++
Двусвязный список C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
852 / 750 / 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
2915 / 1344 / 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     двусвязный список. База данных на его основе
Ответ Создать тему
Опции темы

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