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

Нужно продублировать первое чётное число в односвязном списке - C++

Восстановить пароль Регистрация
 
Чернокот
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 5
23.07.2014, 19:41     Нужно продублировать первое чётное число в односвязном списке #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
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
//описание структуры
struct point
{
int num;//информационное поле
point*next;//адресное поле
};
point* make_point()
//создание одного элемента
{
    point*p=new(point);//выделить память
    cout<<"\nВведите число: ";
    cin>>p->num;
    p->next=0;//сформировать адресное поле 
return p;
}
void print_point(point*p)
//печать информационных полей одного элемента списка
{
    cout<<"\nЧисло: "<<p->num;
}
 
point* make_list(int n)
//формирование списка из n элементов
{
    point* beg=make_point();//сформировать первый элемент
    point*r;
    for(int i=1;i<n;i++)
    {
        r=make_point();//сформировать следующий элемент
        //добавление в начало списка
        r->next=beg;//сформировать адресное поле 
        beg=r;//изменить адрес первого элемента списка
    }
    return beg;//вернуть адрес начала списка
}
int print_list(point*beg)
//печать списка, на который указывает указатель beg
{
    point*p=beg;//р присвоить адрес первого элемента списка
int k=0;//счетчик количества напечатанных элементов 
    while(p)//пока нет конца списка
    {
        print_point(p);//печать элемента, на который указывает элемент p
        p=p->next;//переход к следующему элементу
k++;
    }
return k;//количество элементов в списке
}
void main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout<<"\nВведите размер листа: ";
        cin>>n;
    point*beg=make_list(n);//формирование списка
if(!print_list(beg)) cout<<"\nЛист пуст";
getch();
}//печать списка
Добавлено через 6 часов 0 минут
поднимем
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2014, 19:41     Нужно продублировать первое чётное число в односвязном списке
Посмотрите здесь:

удаление/добавление записи по ключу в односвязном списке C++
C++ Сортировка вставками в односвязном списке
C++ Написать на С++ функцию, переставляющую в обратном порядке элементы в односвязном списке
Ошибка в односвязном списке C++
В односвязном списке поменять местами крайние элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
23.07.2014, 19:44     Нужно продублировать первое чётное число в односвязном списке #2
Чернокот, а в каком смысле "продублировать"? Добавить сразу после найденного элемента? Дописать к концу списка?
Чернокот
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 5
23.07.2014, 19:45  [ТС]     Нужно продублировать первое чётное число в односвязном списке #3
Без разницы. Просто продублировать.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
23.07.2014, 20:19     Нужно продублировать первое чётное число в односвязном списке #4
Чернокот, разница как бы есть. Если в конец дописать такой же элемент, то просто находишь первое четное число, создаешь элемент с таким же числом и дописываешь в конец списка. А вот если вставка сразу после этого найденного элемента, то будет иначе
Чернокот
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 5
28.07.2014, 17:29  [ТС]     Нужно продублировать первое чётное число в односвязном списке #5
Сам уже сделал.
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
//описание структуры
struct point
{
int num;//информационное поле
point*next;//адресное поле
};
point* make_point()
//создание одного элемента
{
    point*p=new(point);//выделить память
    cout<<"\nВведите число: ";
    cin>>p->num;
    p->next=0;//сформировать адресное поле 
return p;
}
void print_point(point*p)
//печать информационных полей одного элемента списка
{
    cout<<"\nЧисло: "<<p->num;
}
 
point* make_list(int n)
//формирование списка из n элементов
{
    point* beg=make_point();//сформировать первый элемент
    point*r;
    for(int i=1;i<n;i++)
    {
        r=make_point();//сформировать следующий элемент
        //добавление в начало списка
        r->next=beg;//сформировать адресное поле 
        beg=r;//изменить адрес первого элемента списка
    }
    return beg;//вернуть адрес начала списка
}
int print_list(point*beg)
//печать списка, на который указывает указатель beg
{
    point*p=beg;//р присвоить адрес первого элемента списка
int k=0;//счетчик количества напечатанных элементов 
    while(p)//пока нет конца списка
    {
        print_point(p);//печать элемента, на который указывает элемент p
        p=p->next;//переход к следующему элементу
k++;
    }
return k;//количество элементов в списке
}
point* add_point(point*beg)
{
    point*p=beg,*r=new(point),*k=new(point);
    while(p)
    {
        if(p->num%2==0) {r->num=p->num;k=p->next;p->next=r;r->next=k;break;}
        p=p->next;
    }
        return beg;//вернуть начало списка
 
}
 
void main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cout<<"\nВведите размер листа: ";
        cin>>n;
    point*beg=make_list(n);//формирование списка
if(!print_list(beg)) cout<<"\nЛист пуст";
add_point(beg);
cout<<"\nИзменённый список: ";
print_list(beg);
getch();
}//печать списка
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
30.07.2014, 18:11     Нужно продублировать первое чётное число в односвязном списке #6
Чернокот, ну если работает, как надо, то мои поздравления
Yandex
Объявления
30.07.2014, 18:11     Нужно продублировать первое чётное число в односвязном списке
Ответ Создать тему
Опции темы

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