Форум программистов, компьютерный форум CyberForum.ru

Поиск под списка в списке - C++

Войти
Регистрация
Восстановить пароль
 
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
21.09.2012, 20:19     Поиск под списка в списке #1
Написать функцию, которая находит в списке максимальный подсписок, в котором все элементы различны. Плюс написать функцию печати списка в прямом порядке (для проверки).

Вот мои наработки)
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
29
30
31
32
#include <iostream>
#include <conio>
#include <vector>
using namespace std;
 
struct Item{
        int data;
        Item *next;
};
 
void makelist(Item *&first,int n){
        first = new Item;
        cin >> first -> data ;
        Item *second = first;
        for(int i = 2;i <= n; i++){
                Item *third = new Item;
                cin >> third -> data;
                second -> next = third;
                second = third;
        }
second->next = NULL;
}
 
void printlist(Item *first){
        Item *cur = first;
        while(cur != NULL){
        cout << cur -> data<<" ";
        cur = cur -> next;
        }
}
 
void pomaxpod(Item *first){ // вот тут я и встрял...если кто поможет напишите пожалуйста коментарии буду очень благодарен!)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2012, 20:19     Поиск под списка в списке
Посмотрите здесь:

C++ Построить класс для работы с односвязным списком. Создать два списка: List1 и List2. Проверить, содержатся ли элементы списка List1 в списке List2 в у
C++ Поиск элемента в списке.
C++ Поиск элемента в списке
удаление и поиск в списке C++
C++ Выяснить, содержится ли каждая из фамилий списка 2 в списке 1
Поиск элемента в списке C++
Поиск в двусвязном списке C++
C++ Поиск числа в списке
C++ Поиск в двусвязном списке
Поиск в списке C++
Iterator в списке - как вывести на экран конкретный элемент списка? C++
C++ В непустом динамическом списке последний элемент переместить в начало списка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
21.09.2012, 22:04     Поиск под списка в списке #2
А мы, в свою очередь, будем благодарны, если вы напишете коментарии к своему коду
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
21.09.2012, 22:14  [ТС]     Поиск под списка в списке #3
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
29
30
#include <iostream>
#include <conio>
#include <vector>
using namespace std;
 
struct Item{           //обьявление структуры
int data;
Item *next;
};
 
void makelist(Item *&first,int n){   // создание списка // список заполняется вручную
first = new Item;
cin >> first -> data ;
Item *second = first;
for(int i = 2;i <= n; i++){
Item *third = new Item;
cin >> third -> data;
second -> next = third;
second = third;
}
second->next = NULL;
}
 
void printlist(Item *first){                // вывод списка
Item *cur = first;
while(cur != NULL){
cout << cur -> data<<" ";
cur = cur -> next;
}
}
что тут не понятного?))) даже функции названы более мение понятно)
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.09.2012, 22:40     Поиск под списка в списке #4
Ну, как минимум, вариант алгоритма "в лоб" вы вполне можете написать. Т.е. берете первый элемент списка и идете от него дальше по списку, пока не встретите повторяющийся элемент. Как только встретили - смотрите на длину полученной подпоследоватльности. Затем берете следующий элемент списка и тд.
Конечно, есть более изящные алгоритмы. Но такой, я думаю, вам будет проще реализовать
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
21.09.2012, 23:12  [ТС]     Поиск под списка в списке #5
это я понимаю и даже сам написал бы но со списками туговато у меня по этому и прошу помочь.
RESTY
5 / 5 / 0
Регистрация: 30.05.2012
Сообщений: 89
16.12.2012, 01:54  [ТС]     Поиск под списка в списке #6
по мере моего обучения набираюсь ума)
вот рабочий код

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <set>
#include <windows.h>
 
struct Item{
        int data;
        Item *next;
};
 
void makelist(Item *&first,int n){
        first = new Item;
        std::cin >> first -> data ;
        Item *second = first;
        for(int i = 2; i <= n; i++){
                Item *third = new Item;
                std::cin >> third -> data;
                second -> next = third;
                second = third;
        }
    second->next = NULL;
}
 
void printlist(Item *first){
        Item *cur = first;
        while(cur != NULL){
            std::cout << cur -> data<<" ";
            cur = cur -> next;
        }
        std::cout << std::endl;
}
 
void pomaxpod(Item *first){
        Item *cur = first;
        Item *second = first;
        std::set <int> a;
        int dlin = 0,dlinmax = 0;
        while (cur != NULL){
            second = cur;
            while ( second != NULL){
                if ( a.count(second -> data) == 1 ){
                    if (dlin > dlinmax){
                        dlinmax = dlin;
                        dlin = 0;
                    }
                    a.clear();
                    a.insert(second -> data);
                    dlin = 0;
                    cur = second;
                    break;
                }
                a.insert (second -> data);
                second = second -> next;
                dlin++;
            }
            cur = second;
            a.clear();
        }
        if (dlin > dlinmax){
            dlinmax = dlin;
        }
        std::cout << dlinmax;
}
 
int main(){
        setlocale(LC_ALL,"");
        Item *first;
        int n;
 
        std::cout << "Введите количество элементов списка n = ";
        std::cin >> n;
 
        std::cout << "Ввод элементов : ";
        makelist(first,n);
 
        std::cout << "Вывод списка : ";
        printlist(first);
 
        std::cout << "Максимальная длина подсписка = ";
        pomaxpod(first);
        //std::system("pause");
return 0;
}
Yandex
Объявления
16.12.2012, 01:54     Поиск под списка в списке
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru