Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
#1

Удалить из односвязного линейного списка определенный узел - C++

14.04.2014, 12:01. Просмотров 1734. Ответов 12
Метки нет (Все метки)

Построить односвязный список из входной последовательности целых чисел. Написать программу, которая удаляет из линейного списка входной последовательности целых чисел: Узел, содержащий число, равное числу предыдущего узла списка.

Выручайте, весь поиск перерыл, ничего толком не нашел)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 12:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить из односвязного линейного списка определенный узел (C++):

Не работает метод сортировки односвязного списка, оформленного классом(узел - структура)
Повторно прошу помощи, так как уже курсовая горит, а идей для решения задачи...

Проход по элементам односвязного линейного списка
Допустим у меня существует класс линейного односвязного списка. Надо пройти по...

Ввод вложенного односвязного линейного списка
Помогите, пожалуйста разобраться с вводом вложенного односвязного линейного...

Гайд по сортировке односвязного линейного списка
Посоветуйте пожалуйста толковый гайд по сортировке. Уже столько всего перерыл,...

Найти наименьший элемент односвязного линейного списка
Найти наименьший элемент односвязного линейного списка. Сценарий: обходя...

Задать двумерный массив с помощью линейного односвязного списка
Помогите решить задачу: "Задать двумерный массив с помощью линейного...

12
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,950
Записей в блоге: 1
14.04.2014, 12:48 #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
#include <iostream>
#include <ctime>
#include <cstdlib>
struct item{
    int value;
    item* next;
};
struct list{
    item* start;
    item* end;
};
void init(list& tlist){
    tlist.start=tlist.end=NULL;
}
void push_back_Item(list& tlist, int value){
    if (tlist.end){
        tlist.end->next=new item;
        tlist.end=tlist.end->next;
        tlist.end->next=NULL;
        tlist.end->value=value;
    }
    else{
        tlist.start=tlist.end=new item;  
        tlist.end->next=NULL;
        tlist.end->value=value;
    }
}
void output_list(const list& tlist){
    for(item* i=tlist.start; i!=NULL; i=i->next)
        std::cout<<(i->value)<<", ";
    std::cout<<std::endl;
}
void process_list(list& tlist){
    if (!tlist.start) return;
    item* i=tlist.start;
    while(i->next){
        if (i->value == i->next->value){
            item* tmp=i->next->next;
            delete i->next;
            i->next=tmp; 
            if (!tmp){  
                tlist.end=i;
                return;
            }
        }
        i=i->next;   
        tlist.end=i;
    }
}
void clear_list(list& tlist){   
    item* i=tlist.start;
    while(i){   
        item* tmp=i->next;
        delete i;
        i=tmp;
    }
    tlist.start=tlist.end=NULL;
}
int main(){
    int size;
    srand(time(NULL));
    std::cout<<"Input sizeof list: ";
    std::cin>>size;
    int pre_value;
    list data;
    init(data);
    for (int i=0; i<size; i++){
       if ((i&1)==0)
           pre_value=i; 
       push_back_Item(data, pre_value);
    }
    std::cout<<"created list: ";
    output_list(data);
    std::cout<<"processed list: ";
    process_list(data);
    output_list(data);
    clear_list(data);
    return 0;
}
0
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
14.04.2014, 18:29  [ТС] #3
не совсем понял работу вашей программы
0
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,950
Записей в блоге: 1
14.04.2014, 21:30 #4

Не по теме:

VitekSR, не выкай мне, ннна

Цитата Сообщение от VitekSR Посмотреть сообщение
не совсем понял работу вашей программы
какая функция непонятна? На какой ты стадии изучения языка Си?
Я писал как можно проще, чтобы даже те, кто не знает классов и шаблонов и вообще элементов Си++ (то есть знающие лишь основы Си) поняли.
0
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
17.04.2014, 19:22  [ТС] #5
Kuzia domovenok, ввожу числа, далее ничего не выводится. Что делаю не то?
0
Миниатюры
Удалить из односвязного линейного списка определенный узел  
IrineK
Заблокирован
17.04.2014, 19:50 #6
VitekSR,
Input sizeof list - означает введите размер списка.
Вы вводите 2 (считывается первое число). Получаете дав ноля, как задумал Kuzia domovenok, .
В ответе получаете один 0.

Введите 8. Увидите разницу.
1
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
17.04.2014, 20:00  [ТС] #7
IrineK, спасибо. Понял уже. А возможно сделать так, чтобы сам вводил числа, а не размер списка?
0
IrineK
Заблокирован
17.04.2014, 20:04 #8
Цитата Сообщение от VitekSR Посмотреть сообщение
А возможно сделать так
Вы же погромист - все в ваших руках )
0
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
17.04.2014, 20:22  [ТС] #9
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
#include <iostream>
#include <ctime>
#include <cstdlib>
struct item{
    int value; //информационное поле
    item* next; //указатель на след.элемент
};
struct list{ //не совсем понятно зачем вторая структура с другим именем ??
    item* start; //указатель на начало элемента
    item* end; //указатель на конец элемента
};
void init(list& tlist){ // ??
    tlist.start=tlist.end=NULL; //пока не достигнут конец ??
}
void push_back_Item(list& tlist, int value){ //функция обработки списка
    if (tlist.end){ //если..
        tlist.end->next=new item; //переход к след.элементу и создаем новую переменную
        tlist.end=tlist.end->next; 
        tlist.end->next=NULL; //пока не достигнут конец
        tlist.end->value=value;
    }
    else{ //иначе
        tlist.start=tlist.end=new item;   //
        tlist.end->next=NULL; //
        tlist.end->value=value; //
    }
}
void output_list(const list& tlist){ //функция формирования односвязного списка
    for(item* i=tlist.start; i!=NULL; i=i->next) //
        std::cout<<(i->value)<<", "; //
    std::cout<<std::endl; //вывод
}
void process_list(list& tlist){ //
    if (!tlist.start) return; //
    item* i=tlist.start; //
    while(i->next){ //
        if (i->value == i->next->value){ //
            item* tmp=i->next->next; //
            delete i->next; //
            i->next=tmp; //
            if (!tmp){  //
                tlist.end=i; //
                return; //
            }
        }
        i=i->next;   //
        tlist.end=i; //
    }
}
void clear_list(list& tlist){   //удаление элемента из списка
    item* i=tlist.start; // сохранить адрес следующего элемента
    while(i){   //пока i ??
        item* tmp=i->next; // записать адрес следующего за удаляемым элементом
        delete i; //удалить
        i=tmp; // ??
    }
    tlist.start=tlist.end=NULL; // что то типо "пока не достигнут конец"?
}
int main(){
    int size;
    srand(time(NULL));
    std::cout<<"Input sizeof list: ";
    std::cin>>size;
    int pre_value;
    list data; // ??
    init(data); // ??
    for (int i=0; i<size; i++){ //для чего этот цикл ??
       if ((i&1)==0) // ??
           pre_value=i;  // ??
       push_back_Item(data, pre_value); // ??
    }
    std::cout<<"created list: ";
    output_list(data); // ??
    std::cout<<"processed list: ";
    process_list(data); //??
    output_list(data); //??
    clear_list(data); // ??
    system("pause");
    return 0;
}
Ладно, помогите тогда разобраться с каждой строчкой программы. Я какие то сам подписал, какие то вообще не знаю, для чего нужны. Проверьте, пожалуйста, те, которые я сам подписал, правильно ли все? И помогите дополнить комментарии
0
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,950
Записей в блоге: 1
18.04.2014, 12:19 #10
Цитата Сообщение от VitekSR Посмотреть сообщение
for (int i=0; i<size; i++){ //для чего этот цикл ?? if ((i&1)==0) // ?? pre_value=i; // ?? push_back_Item(data, pre_value); // ?? }
это и есть заполнение списка по порядку.
в качестве чисел вводятся чётные индексы цикла ( if ((i&1)==0) )
В принципе можно вводить не индексы ( pre_value=i ),
а считывать с клавы числа ( cin>>pre_value ),
0
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
25.04.2014, 22:33  [ТС] #11
Ошибка 2 error LNK1120: 1 неразрешенных внешних элементов C:\Users\Виктор\documents\visual studio 2010\Projects\щлтщ\Debug\щлтщ.exe 1
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup C:\Users\Виктор\documents\visual studio 2010\Projects\щлтщ\щлтщ\MSVCRTD.lib(crtexew.obj)
0
Kuzia domovenok
2212 / 1981 / 443
Регистрация: 25.03.2012
Сообщений: 6,950
Записей в блоге: 1
25.04.2014, 22:55 #12
VitekSR, проект по-нормальному создавай. Начни с пустого проекта! Ты хотя бы Hello world писал в Студии? Я бы на твоём месте бросил заниматься всякими списками и сел бы за основы. Где ты вообще взял это задание? Любая книжка по С++ начинается с более простых вещей! Брось списки, короче!

0
Миниатюры
Удалить из односвязного линейного списка определенный узел  
VitekSR
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 268
26.04.2014, 00:38  [ТС] #13
лабу задали в инсте. я не виноват, что такие сложные задания
0
26.04.2014, 00:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2014, 00:38
Привет! Вот еще темы с решениями:

Написать программу, которая удаляет из линейного списка входной последовательности целых чисел узел
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct ult...

Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка
Здравствуйте! Очень нужна помощь в реализации программы. Задание:...

Удалить элемент из односвязного списка
Есть односвязный список struct student { char last_name; char name;...


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

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

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