Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема со списками / 15 сообщений из 15, страница 1 из 1
18.04.2005, 15:30
    #33021400
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
Делаю вот так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
typedef struct lit
  { char a;
    struct lit * next1;
  }  LIT;


 LIT * head1 = NULL;
 LIT * pnode1 = NULL;


 while ((k=fgetc(in))!='\n')
  {
     pnode1=(lit*)malloc(sizeof(lit));
     pnode1->a=k;
     pnode1->next1=NULL;
  }


 while (pnode1!=NULL)
 {
  printf("%c",pnode1->a);
 }



Почему список не распечатывается.
Может кто даст стандартные процедуры распечатки и создания списков?
...
Рейтинг: 0 / 0
18.04.2005, 15:41
    #33021449
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
1) Это Си или С++ ?
2) У вас списка вроде как не получится - у вас все присваивается в один указатель - pnode1.
3) утечки памяти
...
Рейтинг: 0 / 0
19.04.2005, 04:38
    #33022217
sever_5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
rergomus
Может кто даст стандартные процедуры распечатки и создания списков?

На
Код: plaintext
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.
struct spl
{
 int item;
 spl *next;
};

spl *root=NULL,*end;

void new_e(int item)
{
 spl *q;
 q=new spl;
 q->item=item;
 q->next=NULL;
 if (root==NULL)
  root=q;
 else end->next=q;
 end=q;
}

void print()
{
 spl *q=root;
 while (q!=NULL) printf (" %d",q->item);
}

Обычный односвязный список
...
Рейтинг: 0 / 0
19.04.2005, 07:12
    #33022267
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
Код: plaintext
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 lit
{ 
public:
    char a;
    lit *next;
    lit();
    lit(char a_);
    ~lit();
    void add_lit();
    void add_lit(char a_);
    void print();
}  LIT;

lit::lit(){next = NULL;}

lit::lit(char a_){
   next = NULL;
   a = a_;
}

lit::~lit(){ 
   if(next != NULL) delete next;
}

void lit::add_lit(){
   if(next!=NULL) next->add_lit();
   else next = new lit();
}

void lit::add_lit(char a_){
   if(next!=NULL) next->add_lit(a_);
   else next = new lit(a_);
}

void lit::print(){
   printf("%c",a);
   if(next!=NULL) next->print();
}
...
Рейтинг: 0 / 0
19.04.2005, 07:27
    #33022276
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
автор
1) Это Си или С++ ?


Это СИ
...
Рейтинг: 0 / 0
19.04.2005, 07:44
    #33022289
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
rergomus
Может кто даст стандартные процедуры распечатки и создания списков?
Юзай книгу: Г.Шилдт "Полный справоник по языку С"
и спи спокойно...
...
Рейтинг: 0 / 0
19.04.2005, 07:44
    #33022290
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
работа со структурами в СИ и С++ одинакова
...
Рейтинг: 0 / 0
19.04.2005, 08:13
    #33022304
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
причем здесь структуры.
В си нет оператора new/delete
...
Рейтинг: 0 / 0
19.04.2005, 12:44
    #33022819
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
rergomusДелаю вот так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
typedef struct lit
  { char a;
    struct lit * next1;
  }  LIT;


 LIT * head1 = NULL;
 LIT * pnode1 = NULL;


 while ((k=fgetc(in))!='\n')
  {
     pnode1=(lit*)malloc(sizeof(lit));
     pnode1->a=k;
     pnode1->next1=NULL;
  }


 while (pnode1!=NULL)
 {
  printf("%c",pnode1->a);
 }



Почему список не распечатывается.
Может кто даст стандартные процедуры распечатки и создания списков?

немного подправил:
Код: plaintext
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.
typedef struct lit
  { char a;
    struct lit * next1;
  }  LIT;


 LIT * head1 = NULL;
 LIT * pnode1 = NULL;
 LIT * pnode_item = NULL;


 while ((k=fgetc(in))!='\n')
  {
     pnode1=(lit*)malloc(sizeof(lit));
     pnode1->a=k;
     pnode1->next1=NULL;
     if (head1 == NULL)
     {
         head1 = pnode_item = pnode1;
     } else
     {
         pnode_item->next1 = pnode1;
         pnode_item = pnode1;
     }
  }

 pnode1 = head1;
 while (pnode1!=NULL)
 {
  printf("%c",pnode1->a);
 }

ЗЫ: думаю тот кто не знает С, не умеет и на С++ программить
...
Рейтинг: 0 / 0
19.04.2005, 12:54
    #33022869
_рубль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
zuzuЗЫ: думаю тот кто не знает С, не умеет и на С++ программить:)
...
Рейтинг: 0 / 0
20.04.2005, 07:48
    #33024337
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
автор
{
pnode1=(lit*)malloc(sizeof(lit));
pnode1->a=k;
pnode1->next1=NULL;
if (head1 == NULL)
{
head1 = pnode_item = pnode1;
} else
{
pnode_item->next1 = pnode1;
pnode_item = pnode1;
}
}


Объясните пжлста вот это
...
Рейтинг: 0 / 0
20.04.2005, 08:18
    #33024356
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
rergomus автор
{
pnode1=(lit*)malloc(sizeof(lit));
pnode1->a=k;
pnode1->next1=NULL;
if (head1 == NULL)
{
head1 = pnode_item = pnode1;
} else
{
pnode_item->next1 = pnode1;
pnode_item = pnode1;
}
}


Объясните пжлста вот это
Если по-простому, то:
- создается элемент списка;
- если это первый элемент(списка еще не существует), то он же становится головным (head1 = pnode_item = pnode1;)
- если это уже не первый элемент, то он добавляется в список (pnode_item->next1 = pnode1; ) и становится текущим (pnode_item = pnode1; )

Кстати, в цикле печати списка явно не хватает перемещения по списку (pnode_item=pnode_item->next1). А без этого получаем "зацикливание", когда первый элемент будет печататься бесконечно...
...
Рейтинг: 0 / 0
20.04.2005, 09:13
    #33024419
rergomus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
автор
pnode1 = head1;
while (pnode1!=NULL)
{
printf("%c",pnode1->a);
}


Почему же тогда мы печатаем pnode1 а не pnode_item и всё вроде работает правильно????
...
Рейтинг: 0 / 0
20.04.2005, 10:36
    #33024608
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
rergomus автор
pnode1 = head1;
while (pnode1!=NULL)
{
printf("%c",pnode1->a);
}


Почему же тогда мы печатаем pnode1 а не pnode_item и всё вроде работает правильно????

А подумать?
Здесь же используется адресация. И строка pnode1 = head1 обозначает, что в pnode1 после выполнения этого оператора будет находиться адрес головного элемента списка. То же самое можно было записать pnode_item = head1 (естественно, принимая во внимание область видимости переменных: к моменту присваивания переменная pnode_item должна быть доступна функции...)
А то, что я написал pnode_item, а не pnode1, так это не углядел... Ты уж извини...
Здесь ведь работает не компилятор, а голова. Здесь важен принцип...
...
Рейтинг: 0 / 0
20.04.2005, 14:35
    #33025397
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема со списками
Станислав C. rergomus автор
pnode1 = head1;
while (pnode1!=NULL)
{
printf("%c",pnode1->a);
}


Почему же тогда мы печатаем pnode1 а не pnode_item и всё вроде работает правильно????

А подумать?
Здесь же используется адресация. И строка pnode1 = head1 обозначает, что в pnode1 после выполнения этого оператора будет находиться адрес головного элемента списка. То же самое можно было записать pnode_item = head1 (естественно, принимая во внимание область видимости переменных: к моменту присваивания переменная pnode_item должна быть доступна функции...)
А то, что я написал pnode_item, а не pnode1, так это не углядел... Ты уж извини...
Здесь ведь работает не компилятор, а голова. Здесь важен принцип...
ага, точно, неугледел, надо :
Код: plaintext
1.
2.
for(pnode1=head1; pnode1; pnode1 = pnode1->next1)
    printf("%c",pnode1->a);
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема со списками / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]