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