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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2017, 20:39   #21
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Да. Организовываем новый цикл; а этот "p" - ограничение нового цикла. head нам больше не надо - его можно херить.
Код:
while (head !=р)
{
................
................
head =head->next;
}
А, наверно ещё и конец, в предыдущем цикле надо было запомнить в ("pr1").
___________________________________ __________

Пиши пробную версию.
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 20:44   #22
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Стоп! Цикл наверно не нужен, - ведь уже там связь есть. Может достаточно:
Код:
pr1->next= head;
И все дела.
Или надо - для разрыва? Подумай, может разорвать в предыдущем цикле заодно
.

Последний раз редактировалось ura_111; 15.02.2017 в 20:48.
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 20:49   #23
artilun
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 25
По умолчанию

Да, наверное лучше в предыдущем разорвать. Однако получится ли в итоге сдвиг именно в право, а то мне кажется что будет сдвиг влево: 1->2->3->4->5->6->7->8->9->10 cдвигаем на 3 и в итоге после разрыва и соединения получаем: 4-5-6-7-8-9-10-1-2-3
artilun вне форума Ответить с цитированием
Старый 15.02.2017, 20:58   #24
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Тогда организуй новый цикл переброской по одному и последовательно (самое главное, что новая голова есть - всё остальное пристраивается):
Код:
5->1......
6->5->1......
7->6->5->1......
Код (первоначальный) пиши.
ura_111 вне форума Ответить с цитированием
Старый 15.02.2017, 21:06   #25
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ты ничего не понял! Ты спрашиваешь не те вопросы...
Самое главное, что есть новая голова - всё остальное пристраивается...
___________________________________ ______________________
Самое главное концепция, а местная реализация - это херня... У нас концепция: найти голову и перестроить, а есть ещё другая концепция - это когда "имитация каждого хода-сдвига", т.е. идём по змее и на каждом цикле сдвигаем все элементы по кругу (но в этом случае, вроде, получится цикл в цикле).
ura_111 вне форума Ответить с цитированием
Старый 16.02.2017, 00:05   #26
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ну что забацал?
ura_111 вне форума Ответить с цитированием
Старый 16.02.2017, 00:19   #27
artilun
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 25
По умолчанию

Да, получилось, спасибо Вам за помощь и советы. Смещение головы по вашему методу пригодилось.
artilun вне форума Ответить с цитированием
Старый 16.02.2017, 00:20   #28
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

покажи.
ura_111 вне форума Ответить с цитированием
Старый 16.02.2017, 00:20   #29
artilun
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 25
По умолчанию

Код:
void CListRightShiftItems::RightShiftItems(int num)
{ 
	if (!head)
	{
		cout << "Список пуст!" << endl;
		return;
	}
  
	list *p, *first, *last, *perv;
	last=perv=p=first=head;
	while((last->next)!=NULL){ // Находим конец списка
		last=last->next;
	}
int count = 0;
while (count != num) // Сдвигаем голову
{
	if (p->next == NULL)
	{
		p = head;
		count++;
		continue;
	}
	p = p->next;
	count++;
}
head=head->next; 

while((p->next)!=NULL){
	p=p->next;
	first=first->next;
	head=head->next;
}

first->next=NULL; 
last->next=perv; // Замыкаем список

while(head){
	printf("%d ", head->key);
	head=head->next;
}

}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 16.02.2017 в 10:09.
artilun вне форума Ответить с цитированием
Старый 16.02.2017, 01:25   #30
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вот моя версия:
Код:
struct list
{
	int key;
	list* next;
};

#include <conio.h>
#include <stdio.h>

int main()
{
	list *head = new list;	head->key = 0;
	list *h1 = new list;	h1->key = 1;  head->next = h1;	
	list *h2 = new list;	h2->key = 2;    h1->next = h2;
	list *h3 = new list;	h3->key = 3;	h2->next = h3;
	list *h4 = new list;	h4->key = 4;	h3->next = h4;
	list *h5 = new list;	h5->key = 5;	h4->next = h5;
	list *h6 = new list;	h6->key = 6;	h5->next = h6;
	                                        h6->next = NULL;
	// Вывод на экран первоначального массива
	list *vuvod;
	vuvod = head;
	while (vuvod)
	{
		printf("%d ", vuvod->key);
		vuvod = vuvod->next;
	}
	printf("\n");

	//////////////////Сама программа/////////////////////////////
	int num = 3;	
	list *p, *first, *END;
	p = head;	
	int count = 0;
	while (count != num) // Сдвигаем голову
	{
		END = p;
		if (p->next == NULL)
		{
			p = head;
			count++;
			continue;
		}
		p = p->next;		
		count++;
	}	
	if (END->next != NULL)
	{
		END->next = NULL;
		while (p != NULL)
		{
			first = p;
			p = p->next;
			first->next = head;
			head = first;
		}
	}
	/////////////////////////////////////////////////////////

	// Вывод на экран результата
	vuvod = head;
	while (vuvod)
	{
		printf("%d ", vuvod->key);
		vuvod = vuvod->next;
	}
	scanf("%d", &num); // чтобы консоль быстро не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг элементов списка artilun Помощь студентам 3 12.02.2017 13:15
Осуществить циклический сдвиг элементов прямоугольной матрицы на 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