Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337

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

28.04.2014, 16:36. Показов 7398. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста, как можно создать новый список из двух других, чтобы он содержал равные элементы из двух других списков.

Добавлено через 49 секунд
Я знаю, как создать список и как в него добавить значения, но не могу понять как правильно нужно сравнить элементы все, чтобы потом их записать в третий
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2014, 16:36
Ответы с готовыми решениями:

Создать список с указателями на поля из двух других списков
Здравствуйте. Есть два списка состоящие из структуры, как поля данных и класса, как указателей на структуру. Есть третий список, который...

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

Поместить в список все символы нижнего регистра из двух других списков
Создать новый односвязный список. Поместить в него все символы нижнего регистра из первых двух. Результирующий список вывести на экран. ...

57
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
01.05.2014, 23:41  [ТС]
Студворк — интернет-сервис помощи студентам
TenGen, я просто хочу сделать, что после создания всего списка, я бы его считал и построил многочлен своеобразный, спасибо, попробую.
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
02.05.2014, 07:39
ilya0610, абсолютно без разницы, как вы будете использовать. tmp = tmp->next будет быстрее, а item(&c, i) позволит обращаться к элементам в любом порядке (например, сначала к второму, потом к четвертому, потом к третьему), ну и позволит оформить цикл более привычным образом. Выбирайте, как вам больше нравится
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
02.05.2014, 11:38  [ТС]
TenGen, это будет выглядеть примерно так
C
1
2
3
4
5
6
7
8
9
void print(list *a)
 {
        int i; 
        for(i = 0; i < a->size; i++)
                {
            elem *p;
                        p = p->next;
                }
}
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
02.05.2014, 11:42
ilya0610, цикл и функция оформлены правильно, но... У вас elem *p имеет мусорный адрес, не имеющий ничего общего с элементами списка a. Присвойте ему адрес на первый элемент списка.
Либо можете не париться и в теле цикла прописать: elem *p = item(&a, i); printf("Step: %i; kof: %i", p->step, p->kof);
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
02.05.2014, 12:39  [ТС]
TenGen, Сейчас попробую поправить

Добавлено через 14 минут
TenGen, А что при этом должно быть в main? Если вот такая функция
C
1
2
3
4
5
6
7
8
9
10
 void print(list *a, elem *p)
 {
        int i; 
        for(i = 0; i < a->size; i++)
        {
            elem *p = item(a,i);
            printf("%i p^ %i = 0\n", p->kof, p->step);
        }
        
 }
По идеи там должен быть указатель на список, да?

Добавлено через 2 минуты
TenGen, Или лучше лучше вот так функцию сделать
C
1
2
3
4
5
6
7
8
9
10
11
12
void print(list *a, elem *p)
 {
        int i;
        elem *begin; 
        elem *p = begin;
        while(p != NULL)
        {
            
            printf("%i p^ %i = 0\n", p->kof, p->step);
        }
        
 }
Добавлено через 26 минут
TenGen, Получилось, а указатель на начало я правильно написал?

Добавлено через 9 минут
Все уже не надо, все получилось, спасибо за все большое
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
13.05.2014, 20:34  [ТС]
TenGen, Здравствуйте, извините, что обращаюсь к вам снова, просто у меня спустя время возник вопрос, а если в списке и в одном и во втором попадутся равные элементы, но они будут стоять не друг по другом, как при этом из них можно создать новый list?
Я понимаю, что идея состоит в том, чтобы
1) Мы берем, первое значение из 1 списка
2) Сравниваем его со всеми значениями 2-го списка
3) Если есть похожий, то делаем break и создаем новый список из этого
4) Далее если взяли второй и опять есть, то добавляем значения и так далее
Если вам не будет трудно, вы можете, мне это пояснить на примере

Добавлено через 18 часов 14 минут
TenGen, Сможете, хоть какую-нибудь наводку дать, очень надо просто

Добавлено через 6 часов 25 минут
TenGen, Попробовал, что либо сделать, вот, что получилось, как сделать указатель что с первого значения листа, он перешел на следующее и так же сравнивал значения со всем вторым литом?
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
void solve(list *a, list *b, list *c)
{
     int i; 
     
     for(i = 0; i < a->size; i++)
         for(i = 0; i < b->size; i++)
     {
         elem *tmp_a = item(a, i);
         elem *tmp_b = item(b, i);
    
             if(a->head->step == tmp_b->step)
             {
                
                c->size++;
                
             
             }
             else
             {  
 
                break;
                
             }
        add(c, create(tmp_b->step, tmp_a->kof + tmp_b->kof));
    }
}
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
13.05.2014, 21:03
ilya0610,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int i;
for (i = 0; i < a->size; i++)
{
    int j = -1;
    bool ok = false;
    elem *tmp_a = item(a, i);
    while ((++j) != b->size && !ok)
    {
        elem *tmp_b = item(b, j);
        if (tmp_b->step == tmp_a->step) ok = true;
    }
    if (ok) add(c, create(tmp_b->step, tmp_a->kof + tmp_b->kof));
}
вот этот кусок кода ищет одинаковые элементы в списках а и б и вызывает функцию добавления нового элемента в С. Вроде все ок.
На будущее: c->size вручную трогать не стоит, она меняется автоматически при добавлении, нет нужды ручками менять ее
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
13.05.2014, 22:08  [ТС]
TenGen, Пишет, что elem *tmp_b = item(b, j)- не определен
Миниатюры
Создать новый список из двух других, чтобы он содержал равные элементы из двух других списков  
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
13.05.2014, 22:34
ilya0610, ах да, забыл, согласен.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int i;
for (i = 0; i < a->size; i++)
{
    int j = -1;
    bool ok = false;
    elem *tmp_a = item(a, i), *tmp_b;
    while ((++j) != b->size && !ok)
    {
        tmp_b = item(b, j);
        if (tmp_b->step == tmp_a->step) ok = true;
    }
    if (ok) add(c, create(tmp_b->step, tmp_a->kof + tmp_b->kof));
}
тогда вот так
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 56
29.05.2014, 09:37
TenGen,извините за вмешательство, а что такое step и kof?
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
29.05.2014, 09:49
Гузель23, это данные, которые хранит список. По условию задачи надо создать список, который хранит пары чисел step и kof
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 56
29.05.2014, 09:51
TenGen, это я понимаю односвязный список. а как сделать эту же задачу, с помощью двусвязных списков?
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
29.05.2014, 09:56
Гузель23, решение будет почти идентичным, только будут небольшие изменения в коде
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* Элемент списка */
typedef struct element
{
    int step, kof;
    struct element *prev, *next;
} elem;
 
/* Функция для создания элемента, возвращает указатель на новый элемент */
elem *create(int step, int kof)
{
    elem *tmp = (elem*)malloc(sizeof(elem));
    tmp->step = step;
    tmp->kof = kof;
    tmp->next = tmp->prev = NULL;
    return tmp;
}
добавление в список:
C
1
2
3
4
5
6
7
8
9
10
11
12
/* Добавление элемента в нужный список */
void add(list *vect, elem *tmp)
{
    if (!vect->head) vect->head = vect->end = tmp;
    else
    {
        vect->end->next = tmp;
        tmp->prev = vect->end;
        vect->end = tmp;
    }
    vect->size++;
}
вроде ничего не забыл, должно работать.
Само собой, можно переделать код получше, что бы например функция возвращения элемента могла листать список с конца... Я вам дал работающий код, а уж как вы будете его менять под себя, воля ваша)
1
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 56
29.05.2014, 10:06
TenGen,пример запуска:
Введите кол-во элементов: 3
Список А:
Элемент 1: step=3-текущий элемент
kof=2-следующий
Элемент 2: step=2- уже 2 стало текущим
kof=8-следующий
и тд
так?
не могу понять почему при вводе одного элемента, нужно вводить 2 значения?

если вам не сложно можете написать какие элементы вводить, чтобы было правильно
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
29.05.2014, 10:19
Гузель23, каждый элемент списка хранит пару чисел. Потому при вводе 1 элемента мы вводим 2 значения, step и kof
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 56
29.05.2014, 10:23
TenGen, извините, еще несколько вопросов задам)

можно сделать, чтобы каждый элемент списка содержал одно число?
0
Будущее рядом
 Аватар для TenGen
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
29.05.2014, 10:32
Гузель23, измените структуру, функцию создания элемента (она получает 2 целых числа, нужно только одно), ну и само собой переписать весь код, где используется второе число
0
1 / 1 / 2
Регистрация: 18.11.2013
Сообщений: 337
29.05.2014, 11:34  [ТС]
Гузель23, step то степень у созданного многочлена, а kof- коэффициент многочлена
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2014, 11:34

Вывести список элементов, состоящий из уникальных общих элементов двух других списков
Помогите пожалуйста, срочно нужна помощь. Есть такое задание: Составить диалоговую программу, которая формирует список L, включив в него...

Функция: на основе двух списков сформировать новый список, в котором чередуются элементы исходных
написать функцию которая на основе двух списков формирует новый список в котором чередуются элементы исходных Добавлено через 1 минуту...

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

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

Сформировать новый массив из максимальных элементов двух других
Ввести 2 одномерных числовых массива А и В одинаковой длины и сформировать новый массив С , который состоит из элементов с(i)max{а(i);b(i)}...


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru