![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 13.05.2012
Сообщений: 2
|
![]()
вот алгоритм
Программа реализует алгоритм R поразрядной сортировки списков [2]: R1 [Цикл по k.] Вначале установить P ← LOC(RN ), указатель на последнюю запись. Затем выполнить шаги с R2 по R6 при k = 1, 2, . . . , p (шаги с R2 по R6 составляют один ”просмотр”) и завершить работу алгоритма. Переменная P будет указывать на запись с наименьшим ключом, LINK(P)—а запись со следующим по величине ключом, LINK(LINK(P))—на следующую и т.д.; поле LINK последней записи будет равно Λ. R2 [Опустошить стопки.] При 0 ≤ i < M установить TOP[i] ← LOC(BOTM[i]) и BOTM[i] ← Λ. R3 [Выделить k-ю цифру ключа.] Пусть KEY(P) — ключ записи, на которую указывает P,— равен (ap , . . . , a2 , a1 ); установить i ← ak , k-я младшая цифра этого ключа. R4 [Скорректировать связи.] Установить LINK(TOP[i]) ← P, затем TOP[i] ← P. R5 [Перейти к следующей записи.] Если k = 1 (первый просмотр) и если P = LOC(Rj ) при некотором j = 1, то установить P ← LOC(Rj−1 ) и возвратиться к шагу R3. Если k > 1 (не первый просмотр), то установить P ← LINK(P) и возвратиться к R3, если P = Λ. R6 [Выполнить алгоритм H.] (Теперь мы уже распределили все элементы по стопкам.) Выполнить приведенный ниже алгоритм H, который сцепляет отдельные ”стопки” в один список, подготавливая их к следующему просмотру. Затем установить P ← BOTM[0], указатель на первый элемент объединенного списка. Алгоритм H. (Сцепление очередей.) H1 [Начальная установка.] Установить i ← 0. H2 [Указатель на вершину стопки.] Установить P ← TOP[i]. H3 [Следующая стопка.] Увеличить i на 1. Если i = M , то установить LINK(P) ← Λ и завершить работу алгоритма. H4 [Стопка пуста?] Если BOTM[i] = Λ, тo возвратиться к HЗ. H5 [Сцепить стопки.] Установить LINK(P) ← BOTM[i]. Возвратиться к H2. а вот код #include <stddef.h> #include<iostream> #include <stdlib.h> using namespace std; struct Elem { int *key; Elem *Link; Elem() { this->Link = NULL; this->key = NULL; } }; int main() { int n; cout << "vvedite kol-vo zapisey" << endl; cin >> n; Elem *R; R = new Elem[n + 1]; cout << "vvedite kolithestvo bukv v kazdom slove" << endl; int t; cin >> t; cout << "vvedite slova" << endl; for (int i = 1; i < n + 1; i++) { R[i].key = new int[t + 1]; for (int j = 1; j < t + 1; j++) { cin >> R[i].key[j]; } } Elem *P; Elem **Top; Top=new Elem* [10]; Elem **Botm=new Elem* [10]; P = &R[n]; for (int k = 1; k < t + 1; k++) { for(int i=0;i<10;i++) { Top[i]=(Elem*)&Botm[i]; Botm[i]=NULL; } R3: int i = P->key[t + 1 - k]; Top[i]->Link = P; Top[i] = P; if (k == 1) { int j = n; while ((P != &R[j]) && (j > 0)) { j--; } if ((j!=1) && (P == &R[j])) { P = &R[j - 1]; goto R3; } } else { P = P->Link; if (P != NULL) { goto R3; } } int ii = 0; H2: P = Top[ii]; H3: ii++; if (ii == 10) { P->Link = NULL; goto STOP; } if (Botm[ii] == NULL) { goto H3; } P->Link = Botm[ii]; goto H2; STOP: P = Botm[0]; } while (P != NULL) { for (int i = 1; i < t + 1; i++) { cout << P->key[i]; } cout << endl; P = P->Link; } return 0; } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Исправте ошибку | Drago56 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 19.12.2010 10:18 |
Исправте ошибку | Drago56 | Общие вопросы C/C++ | 7 | 15.12.2010 16:09 |
Исправте ошибку | Gleb7 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 06.12.2010 20:26 |
Исправте ошибку | dimon305 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 19.05.2010 19:30 |
Исправте ошибку | dimon305 | Помощь студентам | 0 | 18.05.2010 21:23 |