Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 16:02   #1
Irinka_23
Новичок
Джуниор
 
Регистрация: 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;
}
Irinka_23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправте ошибку 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