Официальный сайт студ.городка НГТУ
Программирование и БД » [C++] вопрос по задаче 

#1  01.04.07 10:26

[C++] вопрос по задаче

Подскажите пожалуйста, что творится с указателем f2. теоритически он должен укаэывать уже на готовый список, упорядоченный по возрастанию. Много раз рисовал на бумаге, вроде все правильно, а на деле полная чушь.
Само задание: Написать программу сортировки списка по возрастанию значений поля value следующим способом: максимальный элемент «переносится» в начало нового списка.

Сначало случайным образом заполняю список, потом сортирую его по убыванию и переношу первый элемент в начало нового списка, затем второй в начало, сдвигая тем самым первый и т.д.

Вот сам код:

Код::

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

struct List
{
int value;
struct List *next;
};

void Put(int num, List **first)
{
List *q=new List;
q->value=num;
q->next=*first;
*first=q;
}

void Print_List(List *first)
{
List *p=first;
while(p!=NULL)
{
printf("\t%d", p->value);
p=p->next;
}
}

List *Sort(List *f1)
{
List *current, *pnt, *p, *f2;
int tmp;
for (current=f1; current->next!=NULL; current=current->next)
 {
  pnt=current;
  for( p=current->next; p!=NULL; p=p->next)
     if ( p->value > pnt->value )
     {
     tmp=pnt->value;
     pnt->value = p->value;
     p->value=tmp;
     }
 }
 Print_List(f1);
 printf("\n");

 f2=f1;
 pnt=f2;
 f1=f1->next;
 f2->next=NULL;
 current=f1;
 p=f1;

 while(f1!=NULL)
 {
 f2=f1;
 current=current->next;
 f1=(f1)->next;
 f2->next=pnt;
 pnt=p;
 p=current;
 }
 delete f1;
 delete current;
 delete pnt;
 delete p;
 return f2;
}

void main()
{
clrscr();
randomize();
int number, amount, i, j;
List **first1=NULL, *first2=NULL;

puts("Sorting of turn.");
printf("Enter amount of numbers: ");
scanf("%d", &amount);

for(i=0; i<amount; i++)
{
number=rand()%100-rand()%100;
Put(number, first1);
}
Print_List(*first1);
printf("\n");


first2=Sort(*first1);
Print_List(first2);
getch();
}

Уже столько времени убил, подскажите пожалуйста!

Offline

#2  01.04.07 10:42

Re: [C++] вопрос по задаче

Дональдак написал(а):

Подскажите пожалуйста, что творится с указателем f2. теоритически он должен укаэывать уже на готовый список, упорядоченный по возрастанию. Много раз рисовал на бумаге, вроде все правильно, а на деле полная чушь.

отладка рулит
ваще странно если человек умеет отлаживать на бумаге то на компе отлаживать все намного проще

Offline

#3  01.04.07 10:58

Re: [C++] вопрос по задаче

В этом то и дело, может ошибка кроется и ни в самой функции (хотя скорее всего именно там), а где-то еще, например в инициализации, или я просто чего - то не понимаю и поэтому рассуждаю иначе. В общем, помощь все еще очень нужна!

Offline

#4  01.04.07 11:25

Re: [C++] вопрос по задаче

Все тема закрыта! Нашел ошибку. Сильно я ступил )) В конце функции удаляя pnt, который всегда оказывался равным f2, я тем самым сносил и его. Достаточно удалить одну эту строчку и все заработало как надо.

Offline

#5  01.04.07 16:53

Re: [C++] вопрос по задаче

Народ  к5то  знает  что такое  поразрядная  обменнная  сортировка  или  такой  вообще  нет.  Подскажите  пожалуйста  заранее  спасибо.

Offline

#6  02.04.07 01:51

Re: [C++] вопрос по задаче

2.4. Обменная поразрядная сортировка

           Данный метод использует двоичное представление ключей.  Файл сор-
        тируется  последовательно  по  битам двоичного представления ключей,
        начиная со старшего.  Ключи,  имеющие значение данного бита,  равное
        нулю, ставятся в левую половину файла, а ключи со значением бита 1 -
        в правую.

Offline

Программирование и БД » [C++] вопрос по задаче 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.073 сек.
Выполнено 14 запросов.