Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2013, 21:02   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию Вставка элемента в двусвязный однонаправленный список

Код:
struct list
{
    int item;
    list *prev;
    list *next;
};
 
void insert(list *start, int el)
{
    while (start->next != NULL)
    {
        start = start->next;
        if (start->next == NULL)
        {
            list *tmp = new list;
            tmp->item = el;
            tmp->prev = start->prev;
            tmp->next = NULL;
            start->next = tmp;
            break;
        }
        else
            if (start->item < el && start->next->item >el)
            {
                list *tmp = new list;
                tmp->item = el;
                tmp->prev = start;
                tmp->next = start->next;
                start->next = tmp;
                break;
            }
        
    }
}
ставка в середину списка и в конец происходит нормально, а как вставить в начало не пойму.
Pein95 вне форума Ответить с цитированием
Старый 11.02.2013, 21:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

ИМХО start = start->next; перенести в конец цикла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2013, 21:56   #3
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

Спасибо)) помогло))
Pein95 вне форума Ответить с цитированием
Старый 11.02.2013, 22:21   #4
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

Но теперь в конец не вставляет.
Исправил условие цыкла на while (start != NULL) и все работает)
Pein95 вне форума Ответить с цитированием
Старый 11.02.2013, 22:35   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну и славненько )
Нет ничего лучше рабочего кода, созданного своими руками, пусть даже он выглядит как картины Шагала, коих бы написал Дали.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2013, 15:20   #6
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

А как улучшить этот код?)
Pein95 вне форума Ответить с цитированием
Старый 12.02.2013, 15:53   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Оч. просто: Не выпендриваться и использовать STL (http://ru.wikipedia.org/wiki/%D0%A1%...BD%D0%BE%D0%B2)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2013, 19:04   #8
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Не выпендриваться и использовать STL
Очень плохой совет, если человек действительно хочет научиться писать списки, например)

Списки обычно делают с фиктивными элементами в начале и в конце, которые не используются для хранения данных (т.е. они присутствуют и в пустом списке), и с ними реализация несколько упрощается.

Можно подумать о декомпозиции кода, некоторые вещи удобно было бы сделать отдельными функциями или методами структуры list, например.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 12.02.2013, 19:13   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
если человек действительно хочет
Ну да. Но это если желание искренне. Если из академического интереса. А если нужно быстро сварганить, то велосипед изобретать пагубно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.02.2013, 20:50   #10
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

Цитата:
Списки обычно делают с фиктивными элементами в начале и в конце, которые не используются для хранения данных (т.е. они присутствуют и в пустом списке), и с ними реализация несколько упрощается.
здесь первый елемент пуст. Последний указывает на первый, разве есть смысл делать еого пустым?

Цитата:
Не выпендриваться и использовать STL (http://ru.wikipedia.org/wiki/%D0%A1%...BD%D0%BE%D0%B2)
С этим согласен) но на экзамене думаю не дозволят пользоваться STL)
Pein95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добовление элемента в однонаправленный список NikSlim Visual C++ 1 18.11.2012 20:58
Однонаправленный список Си nikitasnv Помощь студентам 6 02.07.2012 21:13
однонаправленный список Arthur92 Общие вопросы C/C++ 5 03.07.2011 20:51
Вставка элемента в список Kovax Паскаль, Turbo Pascal, PascalABC.NET 2 09.03.2011 20:28
[C] Однонаправленный список ordoss Помощь студентам 8 30.01.2010 14:43