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

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

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

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

Выручайте, весь поиск перерыл, ничего толком не нашел)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2014, 12:01
Ответы с готовыми решениями:

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

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

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

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

12
3298 / 2679 / 724
Регистрация: 25.03.2012
Сообщений: 9,677
Записей в блоге: 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
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
14.04.2014, 18:29  [ТС] 3
не совсем понял работу вашей программы
0
3298 / 2679 / 724
Регистрация: 25.03.2012
Сообщений: 9,677
Записей в блоге: 1
14.04.2014, 21:30 4

Не по теме:

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

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

Введите 8. Увидите разницу.
1
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
17.04.2014, 20:00  [ТС] 7
IrineK, спасибо. Понял уже. А возможно сделать так, чтобы сам вводил числа, а не размер списка?
0
Заблокирован
17.04.2014, 20:04 8
Цитата Сообщение от VitekSR Посмотреть сообщение
А возможно сделать так
Вы же погромист - все в ваших руках )
0
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
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
3298 / 2679 / 724
Регистрация: 25.03.2012
Сообщений: 9,677
Записей в блоге: 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
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
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
3298 / 2679 / 724
Регистрация: 25.03.2012
Сообщений: 9,677
Записей в блоге: 1
25.04.2014, 22:55 12
VitekSR, проект по-нормальному создавай. Начни с пустого проекта! Ты хотя бы Hello world писал в Студии? Я бы на твоём месте бросил заниматься всякими списками и сел бы за основы. Где ты вообще взял это задание? Любая книжка по С++ начинается с более простых вещей! Брось списки, короче!

0
Миниатюры
Удалить из односвязного линейного списка определенный узел  
0 / 1 / 4
Регистрация: 20.10.2013
Сообщений: 270
26.04.2014, 00:38  [ТС] 13
лабу задали в инсте. я не виноват, что такие сложные задания
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2014, 00:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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