Другие языки программирования и технологии
Работа с динамическими списками в Делфи!
Помогите пожалуйста с задачкой!!! Нужно подсчитать в списке число соседств чисел одного знака.Используются односвязные списки, информационная часть которых - целое число. Для создания списка и вывода его на форму написать отдельные процедуры.
Доброго времени суток
Здесь действительно нет ничего сложного. Вот небольшой примерчик. Сначала объявляются типы.
TData = Integer; {это будет элемент данных списка}
PList = ^TList;
TList = record
Data : TData;
Next : PList; {указатель на следующий элемент списка}
end;
далее для работы объявляется несколько переменных
var
Fst, Cur, Last : PList;
В принципе, все готово и можно приступать к работе. Дальше нужно заполнить этот список. Допустим, это будут некоторые последовательные целые числа
for i:=20 to 55 do begin
if Fst = Nil then begin
New(Cur);
Fst := Cur;
end
else begin
New(Cur^.Next);
Cur := Cur^.Next;
end;
Cur^.Data := i;
Cur^.Next := Nil;
end;
Процедуру из этого кода попробуйте сделать сами.
Вывести список на экран можно так
procedure ShowList(Fst: PList);
var
L : PList;
begin
L := Fst;
while L <> Nil do begin
Write(L^.Data:4); {выводим список в строку}
L := L^.Next;
end;
WriteLn;
end;
После небольшой доработки эту же процедуру можно использовать для подсчета чисел, ведь главное, что она делает, это осуществляет последовательный просмотр списка. Поскольку вы работаете в Delphi, то придется только изменить в выводе строчку с Write.
А это примерчик сортировки списка
Last := Nil;
while Fst <> Last do begin
Cur := Fst;
while Cur^.Next <> Last do begin
if Cur^.Data > Cur^.Next^.Data then begin
T := Cur^.Data;
Cur^.Data := Cur^.Next^.Data;
Cur^.Next^.Data := T;
end;
Cur := Cur^.Next;
end;
Last := Cur;
end;
Удачи!
Здесь действительно нет ничего сложного. Вот небольшой примерчик. Сначала объявляются типы.
TData = Integer; {это будет элемент данных списка}
PList = ^TList;
TList = record
Data : TData;
Next : PList; {указатель на следующий элемент списка}
end;
далее для работы объявляется несколько переменных
var
Fst, Cur, Last : PList;
В принципе, все готово и можно приступать к работе. Дальше нужно заполнить этот список. Допустим, это будут некоторые последовательные целые числа
for i:=20 to 55 do begin
if Fst = Nil then begin
New(Cur);
Fst := Cur;
end
else begin
New(Cur^.Next);
Cur := Cur^.Next;
end;
Cur^.Data := i;
Cur^.Next := Nil;
end;
Процедуру из этого кода попробуйте сделать сами.
Вывести список на экран можно так
procedure ShowList(Fst: PList);
var
L : PList;
begin
L := Fst;
while L <> Nil do begin
Write(L^.Data:4); {выводим список в строку}
L := L^.Next;
end;
WriteLn;
end;
После небольшой доработки эту же процедуру можно использовать для подсчета чисел, ведь главное, что она делает, это осуществляет последовательный просмотр списка. Поскольку вы работаете в Delphi, то придется только изменить в выводе строчку с Write.
А это примерчик сортировки списка
Last := Nil;
while Fst <> Last do begin
Cur := Fst;
while Cur^.Next <> Last do begin
if Cur^.Data > Cur^.Next^.Data then begin
T := Cur^.Data;
Cur^.Data := Cur^.Next^.Data;
Cur^.Next^.Data := T;
end;
Cur := Cur^.Next;
end;
Last := Cur;
end;
Удачи!
Ну а что сложного? Вперёд в интернет. Смотри как реализовать списки можно (подскажу - через указатели) . И юзай. Всё просто.
В Дельфи есть уже готовый класс TList, зачем изобретать велосипед-то? Всего-то примеры посмотреть и хелп почитать :)
Похожие вопросы
- C++ :Разработать пользовательскую библиотеку для работы с односвязным списком (использовать динамическую память).
- delphi, динамические списки
- Кто может объяснить что такое списки в делфи? Пожалуйста !
- delphi, динамические списки
- delphi, динамические списки
- Работа с выпадающим списком (SELECT) и JavaScript... Как ява-скриптом выбрать один из пунктов????
- /*разработать программу для создания и работы с двусвязным списком, состоящим из структур.
- О делфи.. Можно ли? Можно ли в делфи программировать программу для работы, чтоб отчет был на excel? Как в '1С'
- вопрос о динамических массивах в fortran
- надо решить задачку через делфи и паскаль)))