Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Сортировка указателей 
:(
    Опции темы
PRF
Дата 24.12.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Привет вот дали такую задачу, помогит решить, мне надо только помочь в сортировке указателей, т.е не менять значение (числа, ключ типа 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;
}


PM MAIL   Вверх
sgrey
Дата 25.12.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



алгоритм сортировки ничем не будет отличаться от сортировки чисел, только менять местами не числа, а link->next твоих объектов....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.