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

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

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

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

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

Представление последовательности строк в виде линейного списка
Задача. Используйте представление последовательности строк в виде линейного списка и опишите...

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

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

11
2709 / 1309 / 253
Регистрация: 16.03.2008
Сообщений: 6,074
Записей в блоге: 2
13.04.2012, 18:33 2
Читаем вику
Линейный список — это структура данных, состоящая из элементов одного типа, связанных между собой.
Т.е. мы должны создать структуру. В которой кроме каких-лио данных храниться ссылка на следующий элемент списка.
Пример на простом русском языке
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  [ТС] 3
Спасибо,что откликнулись...
Структура у меня вот такая..
C++
1
2
3
4
5
6
7
struct date
{
    int kol_kom;
    int floor;
    int plo;
    char adress[100];
};
но она состоит не из однотипных файлов?!)
Извините конечно если вопрос глупый)))
0
2709 / 1309 / 253
Регистрация: 16.03.2008
Сообщений: 6,074
Записей в блоге: 2
13.04.2012, 18:56 4
Ну вот то, что у вас сейчас есть это в моем описании соответствует только вот этому куску
C++
1
2
3
структура с именем НС {
  сторка Имя;
  строка Фамилия; }
т.е. не хватает одного элемента....
Почитайте "Связанные списки на c++"
0
3 / 3 / 1
Регистрация: 13.04.2012
Сообщений: 58
13.04.2012, 19:43  [ТС] 5
Спасибо..я почитаю..как раз искал сейчас книги..нашел на этом форуме название книги "Как программировать на 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
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
13.04.2012, 21:36 6
Вот код иллюстрирующий связное хранениние записей
при помощи однонаправленного динамического списка.

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  [ТС] 7
Спасибо кто откликнулся..но комментариев к последнему коду не помешало бы))


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

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

Цитата Сообщение от zitxbit Посмотреть сообщение
if (pMyList == NULL) { pMyList = pListItem; pTail = pMyList; } else { pTail->pNext = pListItem; pTail = pListItem; }
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
14.04.2012, 04:58 8
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  [ТС] 9
Спасибо..за просветление))
0
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
08.03.2013, 13:56 10
Интересная реализация. Позвольте спросить, где Вы объявляете pListItem? Возможно надо подключить определенную библиотеку?
0
Неэпический
18112 / 10699 / 2062
Регистрация: 27.09.2012
Сообщений: 26,944
Записей в блоге: 1
08.03.2013, 14:40 11
Цитата Сообщение от Troll1 Посмотреть сообщение
Позвольте спросить, где Вы объявляете pListItem?
26 строка
Цитата Сообщение от zitxbit Посмотреть сообщение
C++
1
MYLIST* pListItem = new MYLIST;
1
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
08.03.2013, 18:15 12
СПС. Тогда может Вы скажите, что у меня неправильно. Делал по аналогии, компилирует без ошибок, но при запуске выкидывает. У меня предположение, что проблема с памятью...
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
08.03.2013, 18:15
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2013, 18:15
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru