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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2012, 15:46   #1
s-mumrik
 
Регистрация: 24.05.2012
Сообщений: 4
По умолчанию структуры данных. проблема сортировки однонаправленного списка.

значит так, есть вот эта программа:

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
struct spisok
{   int info;
    spisok *link;
};
spisok *first=NULL;


void add(int data )
{
    if (first==NULL)
    {
	first=new (spisok);
	first->info=data;
	first->link=NULL;
    }
    else
    {
	spisok *adr;
	adr=first;
	while (adr->link!=NULL)
	{
	  adr=adr->link;
	}
	adr->link=new (spisok);
	adr=adr->link;
	adr->info=data;
	adr->link=NULL;
    }
}
void print()
{
  spisok *adr;
  if (first==NULL)
    printf("!!!spisok pust \n");
  else{
    adr=first;
    while (adr!=NULL){
      printf("%d  ",adr->info);
      adr=adr->link;
    }
    printf("\n");
  }
}

void del(int data)
{
    spisok *adr,*adr1;
    adr=first;
    if (first==NULL)
      printf("!!!spisok pust \n");
    else
    {
      if (adr->info==data)
      {
	first=adr->link;
	delete adr;
      }
      else
      {
	if(adr->link->info==data)
	{
	  adr1=adr->link;
	  adr->link=adr->link->link;
	  delete adr1;
	}
	else
	printf("\n!!!takogo elementa net \n");
      }
    }
}

void sortirovka (spisok *head )
{int k;
do
{
  k=0;
  int l=0;
  while (head->link != NULL)
  {
    if (head->info>head->link->info)
    {
	head;
	spisok *q=head;
	spisok *qq=head->link->link;
	first=head->link;
	first->link=q;
	first->link->link=qq;
	k=k+1;
	head=head->link;
    }
    else
    {
      head=head->link;
    }
    printf("%d",k);
  }
}
while (k!=0);
}

main()
{       clrscr();
    int n,a;
    do
    {
    printf("\n");
    printf("1. dobavit element \n");
    printf("2. posmotret spisok \n");
    printf("3. udalit element \n");
    printf("4. sortirovka elementov \n");
    printf("5. vyhod \n\n");
    printf("vyberite punkt menu: ");
    scanf("%d",&n);
    if (n==1)
    {
     printf("vvedite element \n");
     scanf("%d",&a);
     add(a);
    }
    if (n==2) print();
    if (n==3)
	{
		printf("vvedite ydaljaemoe chislo \n");
		scanf("%d",&a);
		del(a);
	}
    if (n==4) sortirovka(first);
    }
    while (n!=5);
}
все работает, кроме сортировки. то есть сортировка тоже работает, но только для сферического списка в вакууме(только для 2-х элементов). сортировка без перестановки элементов, то есть можно только перенаправить указатели. помогите пожалуйста разобраться, уже 2-ю неделю мучаюсь с прогой.

Последний раз редактировалось s-mumrik; 24.05.2012 в 15:53.
s-mumrik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программная реализация однонаправленного линейного списка Денис Ст Помощь студентам 2 14.01.2014 21:50
Подходы и методы сортировки связанного списка Lanx Помощь студентам 0 02.11.2011 22:26
С++. Функция сортировки списка по значению Caged Помощь студентам 0 02.11.2011 21:01
удаление циклического однонаправленного списка.. Yakoot Visual C++ 9 18.06.2011 20:05
Реализация однонаправленного шаблонного связанного списка Blade Общие вопросы C/C++ 17 28.03.2009 19:59