IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Односвязные списки, с++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Доброго времени суток. Появился вопрос: создаю 2 линейных односвязных списка списка, нужно найти максимальную последовательность элементов первого списка во втором. Например: если первый список у нас -12 -3 2 6 9 14, а второй -4 0 2 6 10, то максимальной последовательностью будет являться 2 6. Также в условии сказано, чтобы список был неубывающим, но это пока не реализовал. И еще: если ввести список 1 2 3 4 5, то выводит с конца, т.е. 5 4 3 2 1. Там в конце есть жалкая попытка smile.gif нахождения подпоследовательности, если есть что подсказать или исправить, прошу помочь.
#include <iostream.h>
#include <conio.h>

struct point
{
int key;
point *next;
};

point *make_point()
{
point *p = new (point);
cin >> p -> key;
p -> next = 0;
return p;
}

point *make_list1(int n)
{
point *beg = make_point();
point *r;
for ( int i=1; i<n; i++)
{
r = make_point();
r -> next = beg;
beg = r;
}
return beg;
}

void print_list (point *beg)
{
point *p=beg;
if (!p)
{
cout << " Spisok pust";
return;
}
while (p != 0)
{
cout << p -> key<< " ";
p = p -> next;
}
}

int main ()
{
clrscr();
int n, m, kol;
point *l1,*l2, *l;
cout << "Vvedite kol-vo elementov spiska #1 :";
cin >> n;
cout << "\nZapolnite spisok #1\n" << endl;
l1 = make_list1(n);
cout << "\nSpisok #1\n" << endl;
print_list(l1);
cout << "\n\nKol-vo elementov spiska #2 :";
cin >> m;
cout << "\nZapolnite spisok #2\n";
l2 = make_list1(m);
cout << "\nSpisok #2\n" << endl;
print_list(l2);
//тут начинаю искать подпоследвательность
while (l1 != NULL)
{
while(l2 != NULL)
{
if (l1==l2)
{
l=l1;
}
else if (l1 < l2)
{
l1=l1->next;
}
else if (l1 > l2)
{
l2=l2->next;
}
}
}
if (l != NULL)
print_list(l);
else
cout << "\nU spiskov net obschih elementov.\n";
getch();
return 0;
}


тут у меня процедура для формирования списка make_list, вот её-то и нужно использовать, но я не знаю как правильно, т.к. я не знаю точного количества элементов одинаковых.

Сообщение отредактировано: Nike0 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 5:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name