Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
fallen94
0 / 0 / 1
Регистрация: 07.09.2013
Сообщений: 15
1

Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой

07.09.2013, 23:29. Просмотров 1281. Ответов 12
Метки нет (Все метки)

Даны два списка целых чисел. Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 23:29
Ответы с готовыми решениями:

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые ...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые...

Сформировать список l, включив в него по одному разу элементы, которые входят. В один из списков l1 или l2. Но не входят в другой
Добрый вечер! Собственно суть задачи такова: Я не совсем поняла списки, вы не могли бы помочь...

Найдите все числа, которые входят как в первый, так и во второй список и выведите их в порядке возрастания
Добрый день! Я изучаю питон но вот при решении одной из задач возникла проблема. Задача...

Сформировать список Р, включив в него элементы списка Р1, которые не входят в список Р2
Как написать функцию или процедуру, которая формирует список Р, включив в него по одному разу...

12
anmartex
...
1733 / 1217 / 917
Регистрация: 12.02.2013
Сообщений: 1,994
08.09.2013, 15:36 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
typedef struct node_t
{
    int value;
    struct node_t* next;
}   TList;
 
//-----------------------------------------------------------------------------
TList* PushFront(TList** list, int value)
{
    TList* node = malloc(sizeof(TList));
    node->value = value;
    node->next = *list;
 
    *list = node;
 
    return *list;
}
//-----------------------------------------------------------------------------
int Random(int min, int max)
{
    return rand() % (max - min + 1) + min;
}
//-----------------------------------------------------------------------------
TList* GetRandomList(size_t count, int min, int max)
{
    TList* list = NULL;
 
    while (count--)
    {
        PushFront(&list, Random(min, max));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
TList* GetDifferenceList(const TList* first, const TList* second)
{
    TList* result = NULL;
 
    const TList* tmp;
 
    for (; first; first = first->next)
    {
        tmp = second;
 
        for (; tmp && first->value != tmp->value; tmp = tmp->next) { ; }
 
        if (tmp == NULL)
        {
            PushFront(&result, first->value);
        }
    }
 
    return result;
}
//-----------------------------------------------------------------------------
void PrintList(const TList* list)
{
    for (; list; list = list->next)
    {
        printf("%d, ", list->value);
    }
    printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
    srand(time(NULL));
 
    TList* first = GetRandomList(5, 1, 10);
    TList* second = GetRandomList(5, 5, 15);
 
    printf("first:  ");
    PrintList(first);
 
    printf("second: ");
    PrintList(second);
 
    TList* result = GetDifferenceList(first, second);
    
    printf("result: ");
    PrintList(result);
 
    return 0;
}
Создать список, элементы которого являются числа, которые входят в первый список и не входят в другой


Результат выполнения на codepad.org
2
fallen94
0 / 0 / 1
Регистрация: 07.09.2013
Сообщений: 15
08.09.2013, 20:39  [ТС] 3
Огромное спасибо.)

Добавлено через 1 минуту
anmartex, а не могли б вы пожалуйста напистаь коментарии??)
0
anmartex
...
1733 / 1217 / 917
Регистрация: 12.02.2013
Сообщений: 1,994
09.09.2013, 06:12 4
Лучший ответ Сообщение было отмечено как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
// Описание узла списка
typedef struct node_t
{
    int value;           // Значение хранимое узлом
    struct node_t* next; // Указатель на следующий узел
}   TList;
 
//-----------------------------------------------------------------------------
// Функция добавления нового значения в вершину списка
TList* PushFront(TList** list, int value)
{
    // Создаём новый узел и присваиваем ему значение
    TList* node = malloc(sizeof(TList));
    node->value = value;
    // Т.к. добавление происходит в вершину списка,
    // то новый узел должен указывать на имеющийся
    node->next = *list;
 
    // Вершиной списка теперь является новый узел
    *list = node;
 
    return *list;
}
//-----------------------------------------------------------------------------
// Функция генерирования случайного числа в диапазоне
int Random(int min, int max)
{
    return rand() % (max - min + 1) + min;
}
//-----------------------------------------------------------------------------
// Функция генерирует список на заданное количество
// элементов в заданном диапазоне
TList* GetRandomList(size_t count, int min, int max)
{
    TList* list = NULL;
 
    // Заданное количество раз выполняем добавление в список
    // случайны чисел из диапазона 
    while (count--)
    {
        PushFront(&list, Random(min, max));
    }
 
    return list;
}
//-----------------------------------------------------------------------------
// Функция выполняет разность двух списков, т.е. формирует новый
// из элементов входящих в первый но не входящий во второй
TList* GetDifferenceList(const TList* first, const TList* second)
{
    TList* result = NULL;
 
    const TList* tmp;
 
    // Пробегаемся по первому списку 
    for (; first; first = first->next)
    {
        // Ищем во втором списке одинаковый элемент
        for (tmp = second; tmp && first->value != tmp->value; tmp = tmp->next) { ; }
 
        // Если элемент во втором списке не был найден, то добавляем
        // его в результирующий список
        if (tmp == NULL)
        {
            PushFront(&result, first->value);
        }
    }
 
    return result;
}
//-----------------------------------------------------------------------------
void PrintList(const TList* list)
{
    // Перебираем все элементы списка и выводим их на экран
    for (; list; list = list->next)
    {
        printf("%d, ", list->value);
    }
    printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
    srand(time(NULL));
 
    TList* first = GetRandomList(5, 1, 10);
    TList* second = GetRandomList(5, 5, 15);
 
    printf("first:  ");
    PrintList(first);
 
    printf("second: ");
    PrintList(second);
 
    TList* result = GetDifferenceList(first, second);
    
    printf("result: ");
    PrintList(result);
 
    return 0;
}
3
09.09.2013, 06:12
fallen94
0 / 0 / 1
Регистрация: 07.09.2013
Сообщений: 15
10.09.2013, 12:46  [ТС] 5
anmartex, Простите ,но в этой строчке выдает ошибку
C
1
TList* node = malloc(sizeof(TList));
0
anmartex
...
1733 / 1217 / 917
Регистрация: 12.02.2013
Сообщений: 1,994
10.09.2013, 14:35 6
fallen94, ну извиняться не за что. А вот то, что я не телепат - это факт. Но смею предположить, что ваш компилятор не хочет выполнить приведение типов. Поэтому попробуйте так:
C
1
   TList* node = (TList*) malloc(sizeof(TList));
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10295 / 6178 / 1554
Регистрация: 25.07.2009
Сообщений: 11,761
11.09.2013, 19:22 7
Цитата Сообщение от anmartex Посмотреть сообщение
компилятор не хочет выполнить приведение типов...
... когда пытается С код компилировать, как С++.
0
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 83
Регистрация: 08.07.2012
Сообщений: 577
11.09.2013, 23:12 8
anmartex ты в коде добавлял проверки возвращаемых значений, вообще, имхо разумеется, на такие вопросы давать код развернутый. Ибо вот такая подача кода, как у тебя, приведет к бездумному копированию и далее далее далее. Потом этот пример отложиться в голове как правильный способ для решения этой задачи, без проверок и прочее прочее. Сами же плодим аналоги "индусов", а потом ругаемся, что плохие нынче программисты пошли.

Это не укор, ни в разе, просто горечь в слух.
0
anmartex
...
1733 / 1217 / 917
Регистрация: 12.02.2013
Сообщений: 1,994
12.09.2013, 04:02 9
fanatdebian, не уловил вашу мысль, о каких проверках вы толкуете?
0
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 83
Регистрация: 08.07.2012
Сообщений: 577
12.09.2013, 10:35 10
Цитата Сообщение от anmartex Посмотреть сообщение
fanatdebian, не уловил вашу мысль, о каких проверках вы толкуете?
C
1
2
3
 // Создаём новый узел и присваиваем ему значение
    TList* node = malloc(sizeof(TList));
    node->value = value;
0
anmartex
...
1733 / 1217 / 917
Регистрация: 12.02.2013
Сообщений: 1,994
12.09.2013, 11:42 11
fanatdebian, вы на счёт комментария? Согласен, погорячился. Сложно писать комментарии к тому, что уже не просто понятно, а ясно как 2x2.
0
easybudda
12.09.2013, 15:19
  #12

Не по теме:

Комментарии - это, конечно, прекрасно, но я бы на другое внимание уделил: функции malloc()/calloc()/realloc() в случае ошибки возвращают NULL и вот этот момент крайне неплохо бы отслеживать. А то ведь кулл-хацкер как поступит? Забьёт всю доступную память не бог весть чем, перехватит NullPointerException, который в следующей же строке случится, и баста, карапузики! ;)

1
fallen94
0 / 0 / 1
Регистрация: 07.09.2013
Сообщений: 15
29.09.2013, 12:23  [ТС] 13
anmartex, подскажите пожалуйста ,как можно заменить по другому эту строчку?
C
1
 for (; first; first = first->next)
я пробовал так
C
1
2
3
while(first)
{first=first->next;
}
0
29.09.2013, 12:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2013, 12:23

Удалить из списка L1 все элементы, которые входят в список L2
Даны списки L1 и L2, элементы которых являются целыми числами. Удалить из списка L1 все элементы,...

Построить новый список L3, включив в него элементы, которые входят одновременно в L1 и в L2
Даны два целочисленных списка L1 и L2. Построить новый список L3, включив в него элементы, которые...

Получить третий массив из чисел, которые входят в первый и не входят во второй
Сформировать два массива натуральных чисел. Получить третий массив из чисел, которые в первый и не...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru