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

Списки. Входит ли один список в другой - C++

Восстановить пароль Регистрация
 
ВСЕМ ПРИВЕТИК
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 11
08.05.2014, 16:22     Списки. Входит ли один список в другой #1
Задание - Проверить, входит ли список l1 в список l2.

Термином "список" обозначен линейный список. Исходные и результирующие списки размещаются в файлах подходящего типа.

Ребятушки, надежда на вашу помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 16:22     Списки. Входит ли один список в другой
Посмотрите здесь:

C++ Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
C++ Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
Списки: реализовать слияние трёх списков в один C++
Написать рекурсивную функцию, проверяющую, входит или не входит элемент Е в не пустой список L, состоящий из вещественных чисел C++
Списки. Вхождение списка в другой C++
принадлежит ли один вектор другому (входит ли в состав) C++
C++ Если елементы массива соседние одинаковы то один из них заменяется на 0 а другой увеличиваетмя на один
C++ Выяснить, верно ли, что хотя бы один символ входит в массив более одного раза

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ВСЕМ ПРИВЕТИК
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 11
10.05.2014, 01:39  [ТС]     Списки. Входит ли один список в другой #2
Актуально. Ребят, помогите.
ВСЕМ ПРИВЕТИК
0 / 0 / 0
Регистрация: 25.12.2013
Сообщений: 11
15.05.2014, 21:41  [ТС]     Списки. Входит ли один список в другой #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
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <conio.h>
 
#define MAX_LEN 1000
 
typedef struct link
{
    struct link * next;
    double value;
} link_t;
 
// создание пустого элемента списка
static link_t * create_link()
{
    link_t * l = (link_t *)malloc(sizeof(link_t));
    l->next = NULL;
    l->value = 0;
 
    return l;
}
 
// удаление списка
static void delete_list(link_t ** l)
{
    if (l && *l)
    {
        delete_list(&((*l)->next));
        free(*l);
        *l = NULL;
    }
}
 
// создание списка из файла
static void create_list_from_file(link_t ** l, FILE * file)
{
    double c;
    fscanf(file, "%lf", &c);
 
    if (!feof(file))
    {
        (*l) = create_link();
        (*l)->value = c;
 
        create_list_from_file(&((*l)->next), file);
    }
}
 
// печать списка
static void print_list(link_t * l)
{
    link_t * current = l;
 
    while (current)
    {
        printf("%lf ", current->value);
        current = current->next;
    }
 
    printf("\n");
}
 
// проверка содержит ли первый список второй
static bool contains(link_t * l, link_t * w)
{
    // если списпи пустые
    if (l == NULL || w == NULL)
        return false;
 
    link_t * currentl = l, * currentw = w;
 
    // сравниваем два слова
    while (currentw && currentl)
    {
        if (currentl->value != currentw->value)
            break;
 
        currentl = currentl->next;
        currentw = currentw->next;
    }
 
    return !l ? false : currentw ? contains(l->next, w)  : true;
}
 
// запрашивание имени файла и чтение списка из него
static bool readList(link_t ** l)
{
    char fileName[255];
 
    // запрашиваем имя файла
    printf("Введите имя файла: \n");
    scanf("%s", fileName);
 
    // открываем файл
    FILE * file = fopen(fileName, "r");
    if (!file)
    {
        printf("Не удалось открыть файл %s\n", fileName);
        return false;
    }
 
    // создаем список читая его из файла
    create_list_from_file(l, file);
    // закрываем файл
    fclose(file);
 
    return true;
}
 
int main()
{
    // установление русского языка в консоли
    setlocale(LC_ALL, "Russian");
 
    // создание пустых списков l1, l2
    link_t * l1 = NULL, * l2 = NULL;
 
    // чтение списков
    if (!readList(&l1))
        return EXIT_FAILURE;
    if (!readList(&l2))
        return EXIT_FAILURE;
 
    // печать списков
    printf("L1: \n");
    print_list(l1);
 
    printf("L2: \n");
    print_list(l2);
 
    // проверка наличия второго списка в первом
    if (contains(l1, l2))
        printf("Первый список содержит второй\n");
    else if (contains(l2, l1))
        printf("Второй список содержит первый\n");
    else
        printf("Ни один из списков не содерит друг друга\n");
 
    // очищение списков
    delete_list(&l1);
    delete_list(&l2);
 
    _getch();
    return EXIT_SUCCESS;
   
}
Yandex
Объявления
15.05.2014, 21:41     Списки. Входит ли один список в другой
Ответ Создать тему
Опции темы

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