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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 15:11   #1
Adya
 
Регистрация: 26.08.2009
Сообщений: 4
Вопрос

Здравствуйте! Никак не могу справится с задачей : переставить все отрицательные нечетные элементы в конец списка.
вот функция:

Код:
struct Sp *End(struct Sp *F)
{
	struct Sp *T;
	struct Sp *u;
	struct Sp *t;
	struct Sp *E;
	int p,w;
	p=0;
	w=0;
	for(T=F;T->Next!=NULL;T=T->Next)
	{
		w=T->Info;
		if(w%2!=0)
		{
			if(w<0)
			{
				p++;
                                E=F;
				while(E->Next!=NULL)
		                      E=E->Next; //указатель на последний элемент
                                u=F;
		               while(u->Next!=T)
			             u=u->Next;//ук-ль на предыдущий
     			        t=T;
				u->Next=t->Next;
				t->Next=E;
				E->Next=t;
				t->Next=NULL;
			        T=u;
			}
		}
	}
	printf("\n");
	printf("%d\n",p);
	return(F);
}
Эта функция работает только если в списке один элемент, удовлетворяющий данному условию. Если таких эл-в 2 и более вообще отказывается выполнять.
Помогите пожалуйста!

вот исходник всей программы:
Код:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct Sp 
{ 
	int Info;
	struct Sp*Next;
};
struct Sp *input();
int Lenght(struct Sp *);
void output(struct Sp *);
struct Sp *End(struct Sp *);
void main ()
{
	
	int L;
	struct Sp *lst;
	lst=input();
	if(!lst)
	{
		printf("Spisok pust\n");
		return;
	}
	L=Lenght(lst);
	if(L<3)
	{
		
		printf("Dlina %d minimalna! Prodolzhenie nevozmozhno!\n",L);
		output(lst);
		return;
	}
	printf("Dlina spiska =%d\n",L);
	printf("ishodnii spisok:\n");
	output(lst);
	printf("\n");
	lst=End(lst);
	output(lst);
}
struct Sp *input()
{
	int a;
	struct Sp*T=NULL;
	struct Sp*F=NULL; //указатель на начало
	struct Sp*P=NULL; //указатель на конец
	while(1)
	{
		printf("Dobavit' element v spisok? 1-da, 0-net\n");
		if(scanf("%d",&a)==0)
		{
			printf("Error! Oshibka pri wwode!\n");
			return(NULL);
			break;
		}
	      if (a==0) 
			break;
		if(a==1)
		{
		  T=(struct Sp *) malloc(sizeof(struct Sp));
		  T->Next=NULL;
		  printf("wwedite chislo\n");
		  if (!scanf("%d",&T->Info))
		  {
			  printf("Error!WWodi vnimatelnee!!!\n");
			  return(NULL);
			  break;
		  }
		  if (F==NULL)
		    {
			   F=T;
			   P=T;
		    }
		  else
		    {
			  P->Next=T;
			  P=T;
		    }
		}
		if ((a!=0)&&(a!=1))
		{
			printf("Oshibka pri wwode! \n");
			return(NULL);
			break;
		}

	}
	return(F);

}
int Lenght(struct Sp *F)
{
	struct Sp *T;
	int k;
	k=0;
	for(T=F; T!=NULL; T=T->Next)
		   k++;
	return(k);
}
void output(struct Sp *F)
{
       struct Sp *T;
	   for(T=F; T!=NULL; T=T->Next)
		   printf("%3d",T->Info);
	   printf("\n");
}
struct Sp *End(struct Sp *F)
{
	struct Sp *T;
	struct Sp *u;
	struct Sp *t;
	struct Sp *E;
	int p,w;
	p=0;
	w=0;
	for(T=F;T->Next!=NULL;T=T->Next)
	{
		w=T->Info;
		if(w%2!=0)
		{
			if(w<0)
			{
				p++;
                E=F;
				while(E->Next!=NULL)
		              E=E->Next;
                u=F;
		        while(u->Next!=T)
			           u=u->Next;
     			t=T;
				u->Next=t->Next;
				t->Next=E;
				t->Next=NULL;
				E=t;
			    T=u;
			}
		}
	}
	printf("\n");
	printf("%d\n",p);
	return(F);
}

Последний раз редактировалось Stilet; 26.08.2009 в 16:20.
Adya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка элементов четных и нечетных строк Юлия19 Помощь студентам 3 14.06.2009 18:33
Обмен местами 2х элементов в односвязном списке. amdbodia Общие вопросы C/C++ 4 31.05.2009 23:26
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Дан массив из N элементов (чисел),определить количество элементов кратных 3. Woha Общие вопросы C/C++ 2 08.12.2008 13:12