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

Динамическая структура данных

20.05.2011, 00:35. Показов 2363. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть динамическая структура
Code
1
2
3
4
5
6
7
8
9
10
11
struct comp
{
    char num[10];
    comp* next; //Ссылка на следущий элемент списка
};
 
struct dyn_list
{
    comp* head; // Первый элемент списка
    comp* tail; // Последний элемент списка
};
есть поиск компонента в списке по имени
Code
1
2
3
4
5
6
7
8
9
10
comp* search(dyn_list l, char *n)
{
    while (l.head != NULL)
    {
        if (!strcmp(l.head->num,n))
            return l.head;
        l.head = l.head->next;
    }
    return l.head;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    char* buf_num = new char[10];
        // Динамический список
    dyn_list vars;
    ifstream* inp = new ifstream("1.txt");
    // считали в vars
    constr_list(vars);
    while (!inp->eof())
    {
        inp->getline(buf_num, 10, ' ');
        comp_in(vars, buf_num);
    }
    inp->close();
// теперь ищем параметр со значением 111
    comp* p = new comp();
    p = search(vars, "111");
    if (p)
    {
Вопрос такой: как осуществить вывод найденного элемента?
а именно подскажите как этот вывод описать в отдельной функции
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2011, 00:35
Ответы с готовыми решениями:

Динамическая структура данных
Дано type строка=array of char; дата=record число:1..31; месяц:1..12; год:1900..1979 end;анкета=record фамилия:строка;пол:(муж,...

Динамическая структура данных в С++
Определить функции вставки нового звена в односвязный линейный список, удаления звена из списка, просмотра содержимого списка. как вот...

Динамическая структура данных С++
Всем огромный привет! :) Начали учить эту тему, ещё до конца не разобрался, а уже прогу делать надо. Вот задание: Дана очередь на основе...

15
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
20.05.2011, 01:27
C++
1
2
3
4
void prin (comp * p) {
 printf ("%s\n", p->num);
 printf ("%x\n", p->next);
}
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.05.2011, 11:01
C++
1
2
3
4
5
6
7
8
9
10
comp* search(dyn_list l, char *n)
{
        while (l.head != NULL)
        {
                if (!strcmp(l.head->num,n))
                        return l.head;
                l.head = l.head->next;
        }
        return l.head;
}
неправильно, head нельзя перемещать
нужно создать указатель, присвоить ему значение из l.head, а потом перемещать его
иначе поиск меняет список
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
20.05.2011, 17:51  [ТС]
Code
1
2
3
4
5
6
7
8
9
10
11
12
comp* search(dyn_list l, char *n)
{
    comp* w = new comp();
    while (l.head != NULL)
    {
        if (!strcmp(l.head->num,n))
            return l.head;
        w=l.head;
        w=w->next;
    }
    return l.head;
}
так?
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 18:05
Могу ошибаться, но помоему,
C++
1
2
w=l.head;
w=w->next;
точно так же и перемещает head, так как ты присваеваешь указателю адрес, а не значение пременной.
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
20.05.2011, 19:03  [ТС]
Цитата Сообщение от vlad_ltd Посмотреть сообщение
Могу ошибаться, но помоему,
C++
1
2
w=l.head;
w=w->next;
точно так же и перемещает head, так как ты присваеваешь указателю адрес, а не значение пременной.
а как исправить?
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 21:17
C++
1
*w=l.head;
Так выглядит присвоение значения переменной указателю, а тебе надо присвоить весь список, извени, конкретнее не подскажу, уже еле соображаю, выходные начались ))
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
20.05.2011, 21:24  [ТС]
Цитата Сообщение от vlad_ltd Посмотреть сообщение
C++
1
*w=l.head;
w описана как
C++
1
comp* w = new comp();
вряд ли это верно
[BCC32 Error] File1.cpp(62): E2034 Cannot convert 'comp *' to 'comp'
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 23:07
удалил пост
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.05.2011, 06:09
Цитата Сообщение от fen1ksss Посмотреть сообщение
Code
1
2
3
4
5
6
7
8
9
10
11
12
comp* search(dyn_list l, char *n)
{
    comp* w = new comp();
    while (l.head != NULL)
    {
        if (!strcmp(l.head->num,n))
            return l.head;
        w=l.head;
        w=w->next;
    }
    return l.head;
}
так?

C++
1
2
3
4
5
6
7
8
9
10
11
comp *search(dyn_list l, char *n)
{
    comp *w = l.head;
 
    while (w != NULL) {
        if (strcmp(w->num, n) == 0)
        return w;
    w = w->next;
    }
    return NULL;
}
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
21.05.2011, 14:39
Нет, точно не так, потому что, *w имеет тип структуры comp, а l.head тип структуры dyn_list, и присвоить *w любое значение типа dyn_list нельзя. *w может принять значения только типа comp.
Попробуй так:

C++
1
dyn_list* w = new dyn_list();
И после уже присваивай значение l.head указателю w
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
21.05.2011, 15:35  [ТС]
записал так, все отлично работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
comp* search(dyn_list l, char *n)
    {
        comp* w = new comp();
        w=l.head;
        while (w != NULL)
        {
            if (!strcmp(w->num,n))
                return w;
            w = w->next;
        }
        return w;
    }
всем спасибо
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
21.05.2011, 15:49
---------------------------------------------------------------------------------
Нет, точно не так, потому что, *w имеет тип структуры comp, а l.head тип структуры dyn_list, и присвоить *w любое значение типа dyn_list нельзя. *w может принять значения только типа comp.
Попробуй так:

C++
1
dyn_list* w = new dyn_list();
И после уже присваивай значение l.head указателю w

-------------------------------------------------------------
Посмотри как я нахожу первый элимент массива num[10] структуры comp, с помошью l.head структуры dyn_list, может поможет.
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
#include<iostream>
 
using namespace std;
 
struct comp
{
    char num[10];
    comp *p;
};
struct dyn_list
{
    char* head; // Первый элемент списка
        char* tail; // Последний элемент списка
};
 
int main()
{
    comp a;
    dyn_list l;
    l.head = new char;
    for (int i=0;i<10;i++)
        cin>>a.num[i];
//  a.p = new comp;
    l.head[0]=a.num[0];
    cout<<"p1="<<l.head[0]<<endl;
    system("pause");
    return 0;
}
В таком виде l.head не изменяет список
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
22.05.2011, 02:44
Цитата Сообщение от fen1ksss
записал так, все отлично работает
у тебя ошибка - утечка памяти
C++
1
2
    comp* w = new comp();
    w = l.head;
C++
1
    comp *w = l.head;
идентификатор и звёздочка являются частью описателя

Добавлено через 2 минуты
Цитата Сообщение от vlad_ltd
Нет, точно не так, потому что, *w имеет тип структуры comp, а l.head тип структуры dyn_list
l.head - указатель на структуру comp
прочитай объявление структуры dyn_list
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
22.05.2011, 15:11  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
у тебя ошибка - утечка памяти

C++
1
    comp *w = l.head;
идентификатор и звёздочка являются частью описателя
то есть вот так правильно?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2011, 02:32
не нужно выделять память
указатель - это переменная, хранящая адрес
в данном случае адрес будет меняться в ней, а не в l.head
следовательно, после вызова функции список останется в первоначальном виде
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2011, 02:32
Помогаю со студенческими работами здесь

Динамическая структура данных
Нужна помощь с динамическими структурами данных: Написать программу, которая сохраняет элементы с помощью динамической структуры...

Динамическая структура данных (Стек)
Подскажите в чем ошибка, пожалуйста. Программа выдает ошибку (&quot;Прекращена работа программы..&quot;), когда выбираю &quot;y&quot;...

Динамическая структура данных Очередь
Определить новую динамическая структуру данных(очередь на основе линейно - связного списка).Описать стандартные оператисе по работе со...

Динамическая структура данных. Что это?
В требованиях к одной вакансии Динамическая структура данных. Цитата из Прата С. 189 стр.: &quot;Инструментом для этого, опять-таки,...

некорректно работает динамическая структура данных с++
Взял пример с книги, которая одобренная министерством образования. А код работает не совсем правильно. Не могу найти ошибку, подскажите в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru