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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 17:28   #1
Шерлок
Новичок
Джуниор
 
Регистрация: 04.12.2012
Сообщений: 2
По умолчанию Линейный двусвязный список

Тип элемента списка определен так:
Код:
struct llist{
	int val;
	llist *next,*pred;};
	//Создаётся статический список из 3 эл-тов
	llist a,b,c;
	llist a={3,&b,NULL},b={2,&c,&a},c={1,NULL,&b},*ph=&a;
	int get(llist *p){return p->val;}
//дана ф-ция
	llist*fun(llist *z,int n)
	{llist *q;
	for (q=z;n!=0;q=q->next,n--);
	if(q->next==q){
		delete q;
		return NULL;}
	if(q==z) z=q->next;
	q->pred->next=q->next;
	q->next->pred=q->pred;
	delete q;
	return z;}
Определить выполняемое действие над списком, напишите вызов данной ф-ции для данного статического списка.
Реализация+вызов описаны ниже. В целом, что делает ф-ция понятно, но как именно она это делает, непонятно+работает, но как-то косячно. Помогите пожалуйста разобраться для чего q и z и эти 2 строчки непонятны : q->pred->next=q->next;
q->next->pred=q->pred;

Код:
#include "stdafx.h"
#include <locale.h>


struct llist{
	int val;
	llist *next,*pred;};
	//Создаётся статический список из 3 эл-тов
	extern llist a,b,c;
	llist a={3,&b,NULL},b={2,&c,&a},c={1,NULL,&b},*ph=&a;
	int get(llist *p){return p->val;}
//дана ф-ция
	llist*fun(llist *z,int n)
	{llist *q;
	for (q=z;n!=0;q=q->next,n--);
	if(q->next==q){
		delete q;
		return NULL;}
	if(q==z) z=q->next;
	q->pred->next=q->next;
	q->next->pred=q->pred;
	//delete q;
	return z;}

int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL, "rus");
int n;
printf ("Введите n:   ");
scanf("%i",&n);
printf ("%i \n",get(fun(ph,n)));
	return 0;
}
//работает только при единице, возвращает значение а

________
тут на форуме нет тега [CPP]..[/CPP]
используйте универсальный тег [CODE].. [ /CODE]

Модератор

Последний раз редактировалось Serge_Bliznykov; 25.12.2012 в 22:50.
Шерлок вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработайте класс, реализующий линейный двусвязный список Аким Ба Паскаль, Turbo Pascal, PascalABC.NET 11 24.08.2011 23:08