Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Borlan C] И снова двусвязный список и все что с н 
:(
    Опции темы
BCworm
Дата 10.9.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Начинаю изучение двусвязных списков. Много уже чего перечитал. Много чего недопонял. Но все же накалякал этот плагиатообразный код.
Заранее поясню. Создается структура из чара и двух интов. У меня получилось заполнить только чар name. Как заполнить остальные эелементы структуры prc и nom

Код

#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
struct item //структура
{char name[10]; int prc; int col; // в структуре три типа 
  struct item *prev; //  на предыдущую структуру
  struct item *next; // на следующую.
};
void build(void); // создает новую запись в списке
void view(item *); // просмотр списка
struct item *head,*tail; // указатели на начало и конец
main()
{
//поехали!
  build(); //создаем новую структуру после чего
  list(head); // просмотр с начала списка
free(head);
}
void build(void) //создание новой структуры
{item *p,*pr; //
  pr=NULL;
  printf("Добавление новой записи\n\n");
  do { p=(item *)malloc(sizeof(item));
    printf("Поле Name: "); //Начинем добавление с поля Name. Вот и вопрос а как остальные 2 поля prc и nom заполнить
    gets(p->name);
    p->prev=pred;
    if (pr!= NULL)
      pr->next=p;
    else
      head=p;
    pr=p;
    puts(" Finish- <esc>");
}




Это сообщение отредактировал(а) BCworm - 12.9.2007, 12:12
PM MAIL   Вверх
JavaCraft
Дата 10.9.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



ИМХО конечно...
1) Объявлена структура litem, а используется item, которая не понятно где объявлена.
2) лично я предпочитаю так
Код

typedef struct litem{
...
litem *Preview;
litem *Next;
} litem;

3) Не хватает закрывающей скобки в цикле do
4) вместо malloc лучше использовать
Код

p = (litem *)new litem;
 
5) free(head); В этом случае, лучше заменить на цикл с явным освобождением памяти.
Код

litem *d;
while(head){d=head; head=head->Next; delete d;}



Это сообщение отредактировал(а) JavaCraft - 10.9.2007, 17:52
PM MAIL   Вверх
BCworm
Дата 10.9.2007, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Черт это была очипятка. Я скопировал код по кускам и вот получился казус. структура item
Спасибо за советы. Но сейчас меня очень интересует как заполнять остальные элементы структуры prc и nom

Это сообщение отредактировал(а) BCworm - 10.9.2007, 23:38
PM MAIL   Вверх
apook
Дата 11.9.2007, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Видишь ли их надо заполнять перемещяя указатель


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
ausar
Дата 11.9.2007, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Если не затруднит. Поясни пожалуйста подробней. указатель это в его коде p->?

Это сообщение отредактировал(а) ausar - 11.9.2007, 07:09
PM MAIL   Вверх
apook
Дата 11.9.2007, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата

 *prev; //  указатель на предыдущую структуру
 *next; // указатель на следующую

Делаешь так 
Код

p=p->next;

и заполняешь следующюю

Это сообщение отредактировал(а) apook - 11.9.2007, 07:03


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 11.9.2007, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Спасибо!

У меня структура стотоит из nom prc и col. Если передвинуть указатель то не запишется ли тогда новая структура а не её элемент?
PM MAIL   Вверх
apook
Дата 11.9.2007, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Не то будет новая пустая структура, ты для нее нее память выдиляешь 
Код

p=(item *)malloc(sizeof(spis);




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 11.9.2007, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Так item состоит из name prc и col. В моем коде заполняется только name а вот как остальные эелементы структуры заполнить их еще 2

Это сообщение отредактировал(а) BCworm - 11.9.2007, 07:40
PM MAIL   Вверх
apook
Дата 11.9.2007, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Стоп а вопрос то про другое, ты ек можешь заполнить остальные поля кроме name[10] что-ли? Ну это воопще просто задай им значения да и все
Код

    printf( "Поле Name: " ); //Начинем добавление с поля Name. Вот и вопрос а как остальные 2 поля prc и nom заполнить
    gets( p->name );
printf( "Поле prc: " );
    scanf( "%d",  p->prc  );
printf( "Поле col: " );
    scanf( "%d",  p->col  );
 

Это сообщение отредактировал(а) apook - 11.9.2007, 07:46


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 11.9.2007, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



В таком случае gets( p->name ); тут уже и не нужно вроде как.
Таким образом если я правильно понял происходит так.
Заполняется name затем передвигается на prc заполняется prc передвигается на col потом должн быть указательна новую структуру p->next так?

PM MAIL   Вверх
apook
Дата 11.9.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата(BCworm @  11.9.2007,  07:50 Найти цитируемый пост)
Заполняется name затем передвигается на prc заполняется prc передвигается на col 
 Маленько не так, это я сразу не правильно вопрос понял начал обьяснять как следующюю структуру заполнять...  

Заполняется name затем  prc затем col потом здвигаешь указатель на новую структуру p->next!  перемещение у тебя в коде происходит в строчках:
Код

    if (pr!= NULL)
      pr->next=p;
    else
      head=p;
    pr=p;


 


Это сообщение отредактировал(а) apook - 11.9.2007, 08:26


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
BCworm
Дата 11.9.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Если можно пару строче кода. Как заполняются элементы структуры что после
gets(p->name)
PM MAIL   Вверх
zkv
Дата 11.9.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(BCworm @  11.9.2007,  10:11 Найти цитируемый пост)
Если можно пару строче кода. Как заполняются элементы структуры что после
gets(p->name) 

на форуме полно примеров работы с динамическими списками.
пытайся сам хоть что-то понять-сделать, в противном случае тебе в Центр помощи.
Удачи!
PM MAIL   Вверх
apook
Дата 11.9.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



я ж написал все?
функция build будит выглядеть так:
Код

void build( void ) //создание новой структуры
{
item *p,*pr=NULL; 

printf( "Добавление новой записи\n\n" );
do
{
    p=( item * )malloc( sizeof(spis) );

    printf( "Поле Name: " ); //Начинем добавление с поля Name. Вот и вопрос а как остальные 2 поля prc и nom заполнить
    gets( p->name );
    printf( "Поле prc: " );
    scanf( "%d",  p->prc  );
    printf( "Поле col: " );
    scanf( "%d",  p->col  );

    p->v1=pred;
    if (pr!= NULL)
      pr->next=p;
    else
      head=p;
    pr=p;
    puts(" Finish- <esc>");
}

кстати а с одним то полем name все нормально работает?


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.