Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++] Односвязный список

32K
02 мая 2010 года
xface
43 / / 07.11.2009
Привет. Набросал код, создает односвязный список, и должен его отсортировать по кол-ву WorkTime по убыванию. Немогу понять, или с выводом что-то не то, или же не правильно работает. Помогите плиз.

 
Код:
struct JobMan
{
    char FName[8];          // ima
    char LName[12];         // fam
    char OName[12];         // otch
    int tabNum;             // tabelniy nomer
    int WorkTime;           // otrabotanie chasi
    JobMan *Next;
};


Код:
void CreateList(JobMan *First)
{
    fDB = fopen("test.dat", "rb");
    rewind(fDB);

    First = NULL;

    while (fread(&Man, sizeof(Man), 1, fDB))
    {
        JobMan *tek = new JobMan;

        tek = &Man;
        tek->Next = NULL;


        if (First == NULL)
            First = tek;
        else
        {
            tek1 = First; // тут ищем место вставки
            pred = NULL;

            while ((tek1 != NULL) && (tek->WorkTime < tek1->WorkTime))
            {
                pred = tek1;
                tek1 = tek1->Next;
            }

            if (tek1 == First) // вставка в начало
            {
                tek->Next = First;
                First = tek;
            }
            else
            {
                tek->Next = pred->Next; // вставка после pred
                pred->Next = tek;
            }
        }

    }

    fclose(fDB);

}
14K
03 мая 2010 года
Fenja
138 / / 20.03.2009
Цитата:
Немогу понять, или с выводом что-то не то, или же не правильно работает


Лично я вывода не вижу.

Цитата:
while (fread(&Man, sizeof(Man), 1, fDB))


Что такое Man? Объект типа структуры JobMan?
tek и tek1 - очень информативные имена переменных.
З.Ы. В алгоритм сортировки не въехал :)

32K
03 мая 2010 года
xface
43 / / 07.11.2009
Цитата: Fenja
Лично я вывода не вижу.

Что такое Man? Объект типа структуры JobMan?
tek и tek1 - очень информативные имена переменных.
З.Ы. В алгоритм сортировки не въехал :)



Да, JobMan Man. Сортировка тут идет методом вставки меньшего элемента вперед списка.

Вобщем я переделаю. Мне нужно 2 структуры создать. 1 - это Man, а во второй уже сам список + указатель на Man.

392
05 мая 2010 года
cronya
421 / / 03.01.2009
А чего именно за проблема возникла??
Сортировка делается методом пузырька, аналогично массивам, только надо связи правильно настроить при сортировке и всего делов не о чем :)
32K
05 мая 2010 года
xface
43 / / 07.11.2009
Трабла была в указателях. Прошелся дебагером выцыпил ошибку)) Но все равно нужно сделать 2 структуры, а то писать в файл еще и указатель (*Next) ни к чему я думаю.
392
08 мая 2010 года
cronya
421 / / 03.01.2009
Цитата: xface
Трабла была в указателях. Прошелся дебагером выцыпил ошибку)) Но все равно нужно сделать 2 структуры, а то писать в файл еще и указатель (*Next) ни к чему я думаю.



Зачем 2 структура?? Я не понял:)

 
Код:
while (fread(&Man, sizeof(Man), 1, fDB))
    {
        JobMan *tek = new JobMan;

        tek = &Man;
        tek->Next = NULL;

у тебя вообще считывает с файла??? Я чего то не вижу откуды это делается! Судя по твоему коду должны паразитные записи вылезать:)
55K
14 мая 2010 года
PREsideNT_11
9 / / 22.03.2010
нужно два класса.

 
Код:
class JobMan
{
    char FName[8];          // ima
    char LName[12];         // fam
    char OName[12];         // otch
    int tabNum;             // tabelniy nomer
    int WorkTime;           // otrabotanie chasi
}


и клас-нода листа:

 
Код:
class Node
{
     JobMan* data;
     Node* next;
}


Так, я думаю, будет более логично.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог