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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2009, 10:19   #1
30MBU
Пользователь
 
Аватар для 30MBU
 
Регистрация: 15.09.2009
Сообщений: 19
Вопрос Си, рекурсивный разворот списка

Задача: развернуть список с помошью рекурсии.
Проблема в том, чтобы не использовать глобальные переменные.
Т.к. не совсем понимаю рекурсию, не могу придумать нормальный алгоритм (
30MBU вне форума Ответить с цитированием
Старый 01.12.2009, 07:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекурсию то все понимаю, мало кто понимает смысл такого напряга...
Обычно реверс рекурсией не делается - это ресурсоемко особенно при больших массивах.

Покажи как ты список хоть набиваешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2009, 16:11   #3
Сарма
Новичок
Джуниор
 
Регистрация: 01.12.2009
Сообщений: 1
По умолчанию

Цитата:
Сообщение от 30MBU Посмотреть сообщение
Проблема в том, чтобы не использовать глобальные переменные.(
Используй статические переменные:

Код:
void func(){
	
	static int i=5;
	
	printf("\nStatic %d", i++);
}
Сарма вне форума Ответить с цитированием
Старый 01.12.2009, 17:20   #4
30MBU
Пользователь
 
Аватар для 30MBU
 
Регистрация: 15.09.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Рекурсию то все понимаю, мало кто понимает смысл такого напряга...
Обычно реверс рекурсией не делается - это ресурсоемко особенно при больших массивах.

Покажи как ты список хоть набиваешь.
Задание такое и обязательно использовать рекурсию (

Элементы списка считываются из файла и кучей функций сортируются по возрастанию:
Код:
//сам список
struct list {
        int data;
        struct list * next;
};

struct list * create_list( FILE * file ) {
	int num = 0;
	char ch = 0;
	struct list * head = NULL;
	struct list * p = NULL;

	while( 1 != fscanf( file, "%d", &num ) && !feof( file ) ) {
		fscanf( file, "%c", &ch );
	}

	p = create_element( num );//выделяет память под элемент;
	p -> next = NULL;
	head = p;
	
	while( !feof(file) ) {
		while( 1 != fscanf( file, "%d", &num ) && !feof( file ) ) {
			fscanf( file, "%c", &ch );
		}

		p = create_element( num );
		head = insert_sorted( head, p );//находит место элемента и    вставляет его в список
	}

	return head;
}

struct list * insert_sorted( struct list * head, struct list * p ) {
	struct list * prev = head;
	struct list * foll = head;

	while( NULL != foll && p -> data > foll -> data ) {
		prev = foll;
		foll = foll -> next;
	}

	if( foll == head ) {
		p -> next = foll;
		head = p;
	} else {
		p -> next = foll;
		prev -> next = p;
	}

	return head;
}

//была такая функция, работает если все переменные глобальные
//recurtion(head) -> next = NULL;//вызывалась так в main

struct list * recurtion( struct list * p ) {
        if( p -> next == NULL ) {
            head = p;
            return head;
        } else {
            return recurtion( p -> next ) -> next = p;//как-то так
        }
}
30MBU вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивный алгоритм SVM Общие вопросы C/C++ 7 13.11.2009 09:24
рекурсивный поиск файлов всех картинок doniyor Общие вопросы Delphi 3 08.09.2009 09:21
Рекурсивный поиск папок FindFirst Lehanidze Помощь студентам 4 06.08.2009 13:13
Разработать рекурсивный алгоритм lucky Паскаль, Turbo Pascal, PascalABC.NET 4 08.05.2009 15:04
Рекурсивный SQL запрос ADSoft SQL, базы данных 5 02.06.2008 16:55