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

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

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

Author24 — интернет-сервис помощи студентам
Есть динамическая структура
Код
struct comp
{
	char num[10];
	comp* next; //Ссылка на следущий элемент списка
};

struct dyn_list
{
	comp* head; // Первый элемент списка
	comp* tail; // Последний элемент списка
};
есть поиск компонента в списке по имени
Код
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;
}
Код
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2011, 00:35
Ответы с готовыми решениями:

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

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

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

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

15
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
20.05.2011, 01:27 2
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 3
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  [ТС] 4
Код
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 5
Могу ошибаться, но помоему,
C++
1
2
w=l.head;
w=w->next;
точно так же и перемещает head, так как ты присваеваешь указателю адрес, а не значение пременной.
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
20.05.2011, 19:03  [ТС] 6
Цитата Сообщение от 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 7
C++
1
*w=l.head;
Так выглядит присвоение значения переменной указателю, а тебе надо присвоить весь список, извени, конкретнее не подскажу, уже еле соображаю, выходные начались ))
0
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
20.05.2011, 21:24  [ТС] 8
Цитата Сообщение от 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 9
удалил пост
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.05.2011, 06:09 10
Цитата Сообщение от fen1ksss Посмотреть сообщение
Код
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 11
Нет, точно не так, потому что, *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  [ТС] 12
записал так, все отлично работает
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 13
---------------------------------------------------------------------------------
Нет, точно не так, потому что, *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 14
Цитата Сообщение от 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  [ТС] 15
Цитата Сообщение от accept Посмотреть сообщение
у тебя ошибка - утечка памяти

C++
1
    comp *w = l.head;
идентификатор и звёздочка являются частью описателя
то есть вот так правильно?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.05.2011, 02:32 16
не нужно выделять память
указатель - это переменная, хранящая адрес
в данном случае адрес будет меняться в ней, а не в l.head
следовательно, после вызова функции список останется в первоначальном виде
1
23.05.2011, 02:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2011, 02:32
Помогаю со студенческими работами здесь

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

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

Динамическая структура данных. Что это?
В требованиях к одной вакансии Динамическая структура данных. Цитата из Прата С. 189 стр.:...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru