Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Сортировка указателей


Автор: PRF 24.12.2007, 17:05
Привет вот дали такую задачу, помогит решить, мне надо только помочь в сортировке указателей, т.е не менять значение (числа, ключ типа int) указателей, а менять их адреса!!!
Задача
Реализовать связной список на основе узлов, где каждый узел является структурой, содержащий указатель на следующий и предыдущий элементы списка и ключ типа int. Динамически создать список. Ключи заполнить случайными числами.  Список отсортировать по ключам(причем менять не сами ключи, а указатели, их адреса) любым известным способом.

Помогите пожалуйста!!
Вот код где все сделано, кроме сортировки:

Код

// laba4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
using namespace std;

void crus(char *word)                                       // функция вывода русских букв
{
    char *rus = new char[200];
    CharToOem(word, rus);
    cout << rus;
    delete[]rus;
}

struct link
{
    int data;
    link* next;
};

int _tmain(int argc, _TCHAR* argv[])
{
//------------------------задача1-------------------------
    char key;
    link* first = new link;                        // начало списка
    link* cur = first;                            // текущиц элемент
    link* back = first;                            // предыдущий элемент

    do
    {
        crus("Добавить запись: 1\n");
        crus("Отсортировать записи по ключу: 2\n");
        crus("Выход: 3\n");
        key = _getch();
        switch(key)
        {
        case '1':                                                              
            cur->data = rand();                    // заполнение случайными числами
            cur->next = new link;                // выделение памяти под следующий элемент
            back = cur;
            cur = cur->next;
            break;
        case '2':                                                               // сортировка по ключам
            delete back->next;                    // удаляем не используемое область памяти
            back->next = NULL;
            
            cur = first;                        // в начало списка
            crus("Полученные числа\n");
            while(cur != 0)                        // вывод не упорядоченного списка
            {
                cout << cur -> data << ' ';
                back = cur;
                cur = cur->next;
            }
            cout << endl;
                
            // здесь надо написать код сортировки

            crus("Отсортированный массив\n");
            cur = first;
            
            while(cur != 0)                                    // вывод отсортированного массива
            {
                cout << cur -> data << ' ';
                back = cur;
                cur = cur->next;
            }
            cout << endl;
            break;
        }
    }
    while(key != '3');
    
    if(cur != back)                                            // если список был создан
    {
        delete back->next;                                    
        back->next = NULL;
        cur = first;
        while(cur != NULL)
        {
            back = cur;
            cur = cur->next;
            delete back;
        }
    }
    else
    {
        delete first;
    }
        return 0;
}


Автор: sgrey 25.12.2007, 20:52
алгоритм сортировки ничем не будет отличаться от сортировки чисел, только менять местами не числа, а link->next твоих объектов....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)