С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
fen1ksss
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
#1

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

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

Есть динамическая структура
Код
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 00:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическая структура данных (C++):

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

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

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

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

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

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

15
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
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
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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
fen1ksss
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
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 18:05 #5
Могу ошибаться, но помоему,
C++
1
2
w=l.head;
w=w->next;
точно так же и перемещает head, так как ты присваеваешь указателю адрес, а не значение пременной.
0
fen1ksss
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
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 21:17 #7
C++
1
*w=l.head;
Так выглядит присвоение значения переменной указателю, а тебе надо присвоить весь список, извени, конкретнее не подскажу, уже еле соображаю, выходные начались ))
0
fen1ksss
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
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
20.05.2011, 23:07 #9
удалил пост
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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
vlad_ltd
3 / 3 / 0
Регистрация: 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
fen1ksss
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
vlad_ltd
3 / 3 / 0
Регистрация: 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
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
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
fen1ksss
2 / 2 / 0
Регистрация: 16.09.2010
Сообщений: 71
22.05.2011, 15:11  [ТС] #15
Цитата Сообщение от accept Посмотреть сообщение
у тебя ошибка - утечка памяти

C++
1
    comp *w = l.head;
идентификатор и звёздочка являются частью описателя
то есть вот так правильно?
0
22.05.2011, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 15:11
Привет! Вот еще темы с ответами:

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

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

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

Динамическая структура (СУБД на чистых c/c++, проблема занесения и чтения данных в таблицу) - C++
Доброго времени суток. Пишу СУБД на чистых c/c++ столкнулся с проблемой занесение и чтение данных в таблицу. Структура файла такая: ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.