Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58

Организовать данные в виде линейного списка

13.04.2012, 18:03. Показов 2901. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день.
В общем проблема такая..надо организовать данные в виде линейного списка.. есть структура..вот тут и самое интересное..я даже не представляю как это сделать)Подскажите мне пожалуйста как структурированные данные представить в виде линейного списка)Если можно с примерами..но самым простым языком))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2012, 18:03
Ответы с готовыми решениями:

Текст помощи в виде линейного списка
Текст помощи для некоторой программы организован в виде линейного списка. Каждая компонента текста помощи содержит термин ( слово) и...

Представление последовательности строк в виде линейного списка
Задача. Используйте представление последовательности строк в виде линейного списка и опишите процедуру ДОБАВИТЬ (L , i , j), добавляющую...

Записать последовательность чисел в виде линейного списка
Дали задание: Вводится последовательность чисел и записывается в памяти в виде линейного списка. Определить число элементов в списке, не...

11
2741 / 1367 / 254
Регистрация: 16.03.2008
Сообщений: 6,182
Записей в блоге: 2
13.04.2012, 18:33
Читаем вику
Линейный список — это структура данных, состоящая из элементов одного типа, связанных между собой.
Т.е. мы должны создать структуру. В которой кроме каких-лио данных храниться ссылка на следующий элемент списка.
Пример на простом русском языке
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
структура с именем НС
{
        сторка Имя;
        строка Фамилия;
        НС *следующийЭлемент;
}
 
// определяем начало нашей стуктуры
  НС *первыйЭлемент
  выделяем память для ПервыйЭлемент
  задаем значения
  первыйЭлемент.следующийЭлемент приравниваем пустоте (NULL)
 
 выделяем память для первыйЭлемент.следующийЭлемент 
 и так далее.
таким образом зная о первом элементе мы можем обойти весь список. При этом линейный он потому, что следующий элемент добавляется в одном конкретном направлении без всякой иной логики
1
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58
13.04.2012, 18:50  [ТС]
Спасибо,что откликнулись...
Структура у меня вот такая..
C++ Скопировано
1
2
3
4
5
6
7
struct date
{
    int kol_kom;
    int floor;
    int plo;
    char adress[100];
};
но она состоит не из однотипных файлов?!)
Извините конечно если вопрос глупый)))
0
2741 / 1367 / 254
Регистрация: 16.03.2008
Сообщений: 6,182
Записей в блоге: 2
13.04.2012, 18:56
Ну вот то, что у вас сейчас есть это в моем описании соответствует только вот этому куску
C++ Скопировано
1
2
3
структура с именем НС {
  сторка Имя;
  строка Фамилия; }
т.е. не хватает одного элемента....
Почитайте "Связанные списки на c++"
0
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58
13.04.2012, 19:43  [ТС]
Спасибо..я почитаю..как раз искал сейчас книги..нашел на этом форуме название книги "Как программировать на c++" но что то там про эти списки не чего не нашел..
С этим списками вообще запутался пол программы написал без потом прочитал еще раз задачу оказывается надо в виде линейного списка)))
Вопрос то был..можно ли в линейном списке и char и int?!))

Добавлено через 18 минут
Все..ответ на вопрос я уже нашел)
Но чувствую будут еще)

Добавлено через 25 минут
C++ Скопировано
1
2
3
4
5
6
7
8
9
struct date
{
    int kol_kom;
    int floor;
    int plo;
    char adress[100];
      struct date *next;
          struct date *pred;
};
структура как я понял будет выглядеть вот так..*next-это указатель на след.элемент..если он NULL то конец так?
*pred???
но как ее создавать?!
и опять же как я понял вот так
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
int main()
{
    int kol_kom,floor,plo;
    char adress[10];
    date *nb;
    cout<<"Vvdedite kol.kom"<<endl;
        cin>>kol_kom;
    cout<<"Vvdedite floor"<<endl;
        cin>>floor;
    cout<<"Vvdedite plo"<<endl;
        cin>>plo;
    cout<<"Vvdedite adress"<<endl;
        cin.ignore();
    cin.getline(adress,100);
    if (nb==0)
    {
        nb= new date;
    nb->kol_kom=kol_kom;
    nb->floor=floor;
    nb->plo=plo;
    nb->adress=adress;
    nb->next=0;
    nb->pred=0;
    }
}
вот как то так?!)
почему то мне кажеться что не правильно..и компилятор ругается на строку nb->adress=adress

и видел похожий код и там было вот это int _tmain(int argc, _TCHAR* argv[])...что это?!)
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 21:36
Вот код иллюстрирующий связное хранениние записей
при помощи однонаправленного динамического списка.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
typedef struct MyList
{
    char pszFirstName[256];
    char pszLastName[256];
    MyList* pNext;
} MYLIST;
 
// Последовательное хранение списка в имен ввиде массива lpMyList
static MYLIST lpMyList[] = { { "Ivan",   "Ivanov",   NULL },
                             { "Petr",   "Petrov",   NULL },
                             { "Kolya",  "Vetrov",   NULL },
                             { "Nikita", "Svetlov",  NULL },
                             { "Sasha",  "Stepanov", NULL },
                             { "Vasia",  "Nikitin",  NULL },
                             { "Tolya",  "Puzirev",  NULL } };
 
MYLIST* pMyList = NULL; 
MYLIST* pTail   = pMyList;
 
#define __countof(ptr) sizeof(ptr) / sizeof(ptr[0]) \
 
int main(void)
{
    for (int i = 0; i != __countof(lpMyList); i++)
    {
        MYLIST* pListItem = new MYLIST;
        strcpy(pListItem->pszFirstName, lpMyList[i].pszFirstName);
        strcpy(pListItem->pszLastName,  lpMyList[i].pszLastName);
        pListItem->pNext = NULL;
        if (pMyList == NULL)     { pMyList = pListItem; pTail = pMyList; }
        else { pTail->pNext = pListItem; pTail = pListItem; }
    }
 
    for (; pMyList != NULL; pMyList = pMyList->pNext)
        printf("%s %s\n",pMyList->pszFirstName, pMyList->pszLastName);
 
    return 0;
}
0
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58
14.04.2012, 00:08  [ТС]
Спасибо кто откликнулся..но комментариев к последнему коду не помешало бы))


Цитата Сообщение от zitxbit Посмотреть сообщение
MYLIST* pMyList = NULL; MYLIST* pTail = pMyList;
возникли некоторые вопросы)зачем нужны?

и что проверяет условие?

Цитата Сообщение от zitxbit Посмотреть сообщение
if (pMyList == NULL) { pMyList = pListItem; pTail = pMyList; } else { pTail->pNext = pListItem; pTail = pListItem; }
0
 Аватар для zitxbit
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.04.2012, 04:58
1.) Объявляем два указателя. Первый pMyList указывает на начало списка, начальное
значение которого нулевой адрес NULL (- список "пуст"), второй pTail указывает на конец
списка куда будут добавляться новые узлы (по-умолчанию присваеваем ему значение указателя pMyList).

2.) Проверяется условие, если список "пуст" pMyList == NULL, то указателю pMyList присваевается значение
адреса pListItem текущего созданного узла списка, по-сути это и есть "первый" узел в списке. Далее адрес последнего узла списка pListItem сохраняем в указателе pTail (если в списке присутствует только один
узел, то он и есть одновременно и "первым" и "последним". В итоге pTail = pMyList = pListItem).
Если в списке присутсвуют ранее добавленные узлы pMyList != NULL, то берем значение указателя на
последний узел списка pTail и осуществляем доступ к полю pNext, которому присваеваем значение адреса текущего созданного узела списка pTail->pNext = pListItem. Далее обновляем значение указателя pTail присвоив ему адрес текущего ("последнего") узла списка. Этот адрес является значением указателя pListItem.
2
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58
14.04.2012, 08:29  [ТС]
Спасибо..за просветление))
0
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
08.03.2013, 13:56
Интересная реализация. Позвольте спросить, где Вы объявляете pListItem? Возможно надо подключить определенную библиотеку?
0
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,996
Записей в блоге: 1
08.03.2013, 14:40
Цитата Сообщение от Troll1 Посмотреть сообщение
Позвольте спросить, где Вы объявляете pListItem?
26 строка
Цитата Сообщение от zitxbit Посмотреть сообщение
C++ Скопировано
1
MYLIST* pListItem = new MYLIST;
1
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
08.03.2013, 18:15
СПС. Тогда может Вы скажите, что у меня неправильно. Делал по аналогии, компилирует без ошибок, но при запуске выкидывает. У меня предположение, что проблема с памятью...
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <string.h>
 
typedef struct stud
    {
        char name[70];
        char phone[30];
        stud* pNext;
    }STUD;
    static STUD lpstud[7]=
    {
        {"Ruslan_Ulyanov", "4346211", NULL},
        {"Nikita_Dmitriev", "4656218", NULL},
        {"Elizaveta_Bruhan", "4376342", NULL},
        {"Daniil_Gonzales", "4376640", NULL},
        {"Anna_Sergeeva", "5825581", NULL},
        {"Alexey_Bozhko", "6285518", NULL},
        {"Elena_Petrova", "4362988", NULL}
    };
 
    STUD* pstud = NULL; 
    STUD* pTail   = pstud;
 
 
int main(void)
{
    for (int i = 0; i<8; i++)
    {
       STUD* pstudItem = new STUD;
        strcpy(pstud->name, lpstud[i].name);
        strcpy(pstud->phone, lpstud[i].phone);
        pstudItem->pNext = NULL;
        if (pstud == NULL)  
        { pstud = pstudItem; pTail = pstud; }
        else { pTail->pNext = pstudItem; pTail = pstudItem; }
    }
 
    for (; pstud != NULL; pstud = pstud->pNext)
        printf("%s %s\n",pstud->name, pstud->phone);
 
    return 0;
}
 Комментарий модератора 
Не забывайте выделять код тегами подсветки!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2013, 18:15
Помогаю со студенческими работами здесь

Программа некорректно считывает файл. Таблица в виде линейного списка
Всем привет! Помогите понять где в программе ошибка. Задание состоит в следующем: дана таблица &quot;Анкета&quot; с полями: - номер -...

Сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2
Как сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2

Представить таблицу в виде линейного списка L, элементами которго являются строки таблицы
представить табл. в виде линейного списка L, элементами которго являются строки таблицы. Написать функцию, которая находит средний оклад у...

В нелинейном списке найти заданный элемент. Результат выдать в виде линейного списка
Здравствуйте. У меня есть задача: В нелинейном списке найти заданный элемент (м.б., не атом). Результат выдать в виде линейного списка...

Ошибка при создании линейного списка с типом данных в виде пользовательского класса
Добрый день. Помогите понять в чем ошибка при создании списка? int main() { setlocale(LC_ALL, &quot;Russian&quot;); ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер