Сортировка списка в динамической области(pascal)
Суть в следующем: имеется односвязный список в динамической области. Необходимо отсортировать его по информационному полю. КАк возможно это выполнить на turbo pascal? Создавать второй список нельзя. Подскажите, пожалуйста, или дайте ссылки на подобные задачки. Спасибо.
Во-первых, что значит "в динамической области"? Во-вторых, где он имеется, в языке Турбо Паскаль нет структуры данных "список".
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Вот примерный тип элемента списка:Хыиуду писал(а):Во-первых, что значит "в динамической области"? Во-вторых, где он имеется, в языке Турбо Паскаль нет структуры данных "список".
type uk=^elem;
elem=record
inf:string; {информация конкретного элемента списка}
next:uk; {указатель на следующий элемент}
end;
var beg:uk; {это первый элемент списка}
Далее у меня есть написанные процедуры добавления/удаления элементов.
Так вот мне теперь нужно отсортировать эти элементы по полю inf. А как это сделать даже и не знаю. Ведь доступ ко всем элементам только последовательный.
Дважды в цикле пройтись по массиву: если информационное поле текущего элемента больше, чем у того, на который он указывает, то поменять указатели этих двух элементов местами.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Это понятно. А вот реализовать не могу. Всё время теряются какие-нибудь элементы при переадресации. Если вам не сложно, напишите код этой процедуры. СПасибо.
Процедура, которая меняет два числа а и b - примерно такая:
temp:=a;
a:=b;
b:=temp;
Сортировка пузырьком в отдельной теме
А вот как это все реализовать полностью - не скажу, ибо указатели в Паскале считаю ересью ]:-(
temp:=a;
a:=b;
b:=temp;
Сортировка пузырьком в отдельной теме
А вот как это все реализовать полностью - не скажу, ибо указатели в Паскале считаю ересью ]:-(
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Вообщем нуна составить прогу с динамической памятью(или при помощи денамич памяти), вот задание.
В одномерном массиве, состоящем из N вещественых элементов, вычеслить количество элементов, меньше С.
Вообщем я её решил без денамической памяти
, и как счас приобразовать всё это чтоб было всё в шокаладЕ, т.е чтобы она была с динамической памятью
program dinami4pam9tb;
uses crt;
var
m:array[1..20] of byte;
n,b,i,c:byte;
begin
clrscr;
writeln('Vvedite koli4estvo elementov');
readln(n);
for i:=1 to n do
begin
writeln('Vvedite ',i,' element massiva');
readln(m);
end;
writeln('Vvedeni massiv');
for i:=1 to n do
begin
writeln('',m,'');
end;
writeln;
b:=0;
write('Vvedite element "C":');
Readln(c);
for i:=1 to n do
if m<c then begin
b:=b+1;
end;
if b=0 then
writeln('Net takih elementov')
else
begin
writeln('Koli4estvo elementov menshe ',c,' ravneitsia ',b);
end;
Readkey;
end.
В одномерном массиве, состоящем из N вещественых элементов, вычеслить количество элементов, меньше С.
Вообщем я её решил без денамической памяти

program dinami4pam9tb;
uses crt;
var
m:array[1..20] of byte;
n,b,i,c:byte;
begin
clrscr;
writeln('Vvedite koli4estvo elementov');
readln(n);
for i:=1 to n do
begin
writeln('Vvedite ',i,' element massiva');
readln(m);
end;
writeln('Vvedeni massiv');
for i:=1 to n do
begin
writeln('',m,'');
end;
writeln;
b:=0;
write('Vvedite element "C":');
Readln(c);
for i:=1 to n do
if m<c then begin
b:=b+1;
end;
if b=0 then
writeln('Net takih elementov')
else
begin
writeln('Koli4estvo elementov menshe ',c,' ravneitsia ',b);
end;
Readkey;
end.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
А как можно к примеру хеш-список реализовать без указателей, если не сектрет?Хыиуду писал(а):А вот как это все реализовать полностью - не скажу, ибо указатели в Паскале считаю ересью ]:-(
2B OR NOT(2B) = FF
Будем мыслить, как прикладные программисты: а зачем мне хэш-список?Absurd писал(а):А как можно к примеру хеш-список реализовать без указателей, если не сектрет?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Указатели есть основа основ в модели организации памяти. А в паскале работа с указателями сложна и непродумана. Складывать и вычитать их, понимаешь, нельзя - хотя они такие же числа. Умножать на число тоже. И как мне, понимаешь, к сложным структуркам обращаться? 10 типов новых вводить? А если мне число, которое рядом надо - еще один поинтер? На хрен они такие красивые нужны. До сих пор путаю где надо ставить крышку если надо по указателю что-то взять или его объявить. Потому с ними особо не муруюсь и если нужно объявлять структуры, вроде
А вообще в такой задаче при сортировке достаточно поменять местами указатели по следующей схеме - пусть надо поменять 2 и 3. Значок ^ означает "указывает"
Первоначально
1 ^ 2 ^ 3 ^ 4
Нужно
1 ^ 3 ^ 2 ^ 4
Следовательно
1. Меняем указатель в 1-ом элементе с 2 на 3
2. Меняем указатель в 2-ом элементе с 3 на 4
3. Меняем указатель в 3-ом элементе с 4 на 2
4. Четвертый указывает на 5-ый, потому ничего не меняем
то делаю его либо в одном сегменте последовательно, либо ищу другие способы орагнизации таких "фрагментированных деревьев". На асме, конечно, проблем никаких нет." писал(а):type uk=^elem;
elem=record
inf:string; {информация конкретного элемента списка}
next:uk; {указатель на следующий элемент}
end;
А вообще в такой задаче при сортировке достаточно поменять местами указатели по следующей схеме - пусть надо поменять 2 и 3. Значок ^ означает "указывает"
Первоначально
1 ^ 2 ^ 3 ^ 4
Нужно
1 ^ 3 ^ 2 ^ 4
Следовательно
1. Меняем указатель в 1-ом элементе с 2 на 3
2. Меняем указатель в 2-ом элементе с 3 на 4
3. Меняем указатель в 3-ом элементе с 4 на 2
4. Четвертый указывает на 5-ый, потому ничего не меняем
It's a long way to the top if you wanna rock'n'roll