Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Структуры данных  (Прочитано 7241 раз)
0 Пользователей и 1 Гость смотрят эту тему.
VelVet
Гость
« : 07-11-2005 07:43 » 

Здравствуйте.
Помогите разобраться со списками в. Надо объединить 2 списка, таким образом, чтобы сначала шел 1 элемент 1 списка, 1 элемент 2 списка, 2 элемент 1 списка…
Я так поняла надо сделать проход по спискам и кидать элементы в третий. Но не могу написать условие :<
Записан
Alf
Гость
« Ответ #1 : 07-11-2005 08:05 » 

Условие должно выглядеть примерно так:

Код:
while (Список1.НеПуст() && Список2.НеПуст())
  {
    РезультСписок.Добавить(Список1.Очередной());
    РезультСписок.Добавить(Список2.Очередной());
  }
if (Список1.НеПуст())
  РезультСписок.КопироватьОстаток(Список1);
if (Список2.НеПуст())
  РезультСписок.КопироватьОстаток(Список2);
Записан
VelVet
Гость
« Ответ #2 : 09-11-2005 18:11 » 

Alf big sps!
Что-то наваяла, не работает Жаль

#include <iostream.h>
#include <string.h>
struct PNode
{
   int Spisok [10];
   PNode* Next;
};
PNode* First1=NULL, First2 = NULL, First3= NULL;

PNode* AddFirst (PNode* First, int Data[])
{
   PNode* p=new PNode ;
   strcpy(p-> Spisok,Data);
   //p -> Spisok = Data;
   p -> Next = First;
   First = p;
   return First;
}

void PrintList (PNode* First)
{
   PNode* p = First;
   while (p)
   {
      cout<<p->Data<<' ';
      p = p -> Next;
   }
}
 
int main()
{
   const int n=10;
   int s[10];
   for (int i=0;i<n;i++)
   {
      cout<<"Input Spisok1: ";
      cin>>s;
      First = AddFirst(First1,s);
   }
   for (int i=0;i<n;i++)
   {
      cout<<"Input Spisok2: ";
      cin>>s;
      First = AddFirst(First2,s);
   }


for (int  i = 0; i<n;i++) {
  PNode* p = First1;
   
   while (p)
   {
      
      AddFirst(First3,p->Spisok);
      p = p->Next;
   }
  PNode* p = First2;
   
   while (p)
   {
      
      AddFirst(First3,p->Spisok);
      p = p->Next;
   }

   return 0;
}
 Подскажи please в чем ошибка, скоро надо будет сдаваться Улыбаюсь

« Последнее редактирование: 20-12-2007 19:09 от Алексей1153++ » Записан
dr_allcom
Гость
« Ответ #3 : 11-11-2005 18:22 » 

А че то у тебя First в main нигде не объявлен и нигде нет проверок на пустой элемент списка.
Записан
Alex437
Гость
« Ответ #4 : 18-11-2005 12:47 » 

Цитата
int Data[]
...
strcpy(p-> Spisok,Data);
Цитата
Ты целочисленные массивы с помощью strcpy копируешь?  Быть такого не может
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 18-11-2005 13:35 » new

насчёт
Код:
PNode* AddFirst (PNode* First, int Data[])
{
   PNode* p=new PNode ;
   strcpy(p-> Spisok,Data);

для скопировать массив int , в общем случае нужно знать размер массива.
если массив не статический, то размер (в байтах) передавай в процедуру
Код:
AddFirst (PNode* First, void* Data,int DataLenInBytes)

затем позаботься о том, чтобы массив (или что это у тебя?),
 адрес которого == (p->Spisok) смог вместить DataLenInBytes байт

копирование (я всё-таки предполагаю, что (p->Spisok) - это указатель)

memmove( p->Spisok , Data, DataLenInBytes );

Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines