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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2017, 23:48   #1
artilun
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 25
По умолчанию Циклический сдвиг элементов списка

Циклический сдвиг элементов списка(односвязного) вправо на N позиций. Помогите, пожалуйста
artilun вне форума Ответить с цитированием
Старый 10.02.2017, 00:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

отсчитываешь N-1 и N-й элемент от конца списка.
в последний элемент списка заносишь ссылку на голову (Head)
указатель на начало списка Head - ставишь на N-й элемент.
в N-1 указатель Next делаешь NIL (разрываешь цепочку).
профит.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.02.2017, 01:37   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ты реально думаешь, что кто-то (с какого-то перепуга) будет делать за тебя?
Разбивай задачу на части и делай. Для начала хотя бы создай этот самый список (кстате, он у тебя кольцевой или нет?). Т.е. задача типа такой: создать список и его вывести на экран.
А потом дальше будешь думать.
Если ничего не знаешь - ищи в поиске форума (млжет бфть кто-то делал уже подобное):

10.jpg

И проштудируй видеохостинг youtube. Там много полезного, ну например:
https://www.youtube.com/watch?v=JDRMG1OLyn4
https://www.youtube.com/watch?v=QKRngL_FBSs
https://www.youtube.com/watch?v=ksTiXVd-6gc
https://www.youtube.com/watch?v=e5yI779oPdM
Ну что я буду тебе весь youtube перекидывать?
Ищи, крутись, читай(я думаю и в книгах такое описывается), НО самое главное - не бойся работать с кодом (ведь тебе надо максимально быстро набраться опыта): перенабирай примеры один раз (два, три раза подряд), пытайся вникнуть что пишут или о чём говорят из видеолекций, экспериментируй с кодом.

Последний раз редактировалось ura_111; 10.02.2017 в 01:57.
ura_111 вне форума Ответить с цитированием
Старый 12.02.2017, 13:15   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Код:
//g++  5.4.0

#include <forward_list>
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cstdlib>
#include <chrono>
#include <random>



template<typename ForwardIterator>
void rotate(ForwardIterator begin, ForwardIterator first, ForwardIterator end)
{
    while (begin != first && first != end) {
        ForwardIterator beginCopy = first;
        for (; begin != first && beginCopy != end; ++begin, ++beginCopy) {
            std::iter_swap(begin, beginCopy);
        }
        if (begin == first) {
            first = beginCopy;
        }
    }
}




bool testOne(std::forward_list<int> vec, size_t shift)
{
    auto copyVec(vec);
    auto first = copyVec.begin();
    std::advance(first, shift);
    std::rotate(copyVec.begin(), first, copyVec.end());
    first = vec.begin();
    std::advance(first, shift);
    ::rotate(vec.begin(), first, vec.end());
    return vec == copyVec;
}



int main()
{
    std::mt19937 gen(std::chrono::system_clock::now().time_since_epoch().count());
    std::forward_list<int> vec(50000);
    
    std::iota(vec.begin(), vec.end(), 1);
    std::size_t size = std::distance(vec.begin(), vec.end());
    for (int i = 0; i < 1000; ++i) {
        std::cout << "test №" << (i + 1) << ": " 
            << (::testOne(vec, gen()%size)?"ok":"fail") 
            << std::endl;
    }
}
http://rextester.com/QTJP34905
Croessmah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сдвиг циклический на несколько элементов.. manchester_alan Общие вопросы Delphi 6 14.12.2015 19:14
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз Nekro95 Помощь студентам 12 07.11.2012 22:31
циклический сдвиг элементов массива Carter Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2011 19:54
Не получается циклический сдвиг элементов списка влево Джиксер Общие вопросы C/C++ 5 02.06.2010 23:38