Другие языки программирования и технологии

Кто может объяснить что такое списки в делфи? Пожалуйста !

Описать класс Spisok, в который входят следующие методы:
Создание пустого списка.
Подсчет количества элементов списка.
Вывод на экран содержимого списка в виде таблицы.
Ну и т. д
Интересует именно теория! Своими словами как можно подробнее.
1. Связный список - это структура данных, в которой как минимум одно поле указывает на другой список [Updated: На другой элемент, а не список!] (то есть является указателем=адресом в памяти) .
2. Вообще список - набор однотипных элементов, связанных между собой.
3. Что за список в данной задачи утверждать трудно. Если задача "чисто на классы", можно воспользоваться классом Delphi, к примеру TList (кстати, list - англ. - список) [т. е. взять готовую реализацию] . Если задача на классы + динамическую память (суть велосипедизм) , то придется еще связать это со связными списками [реализовать самому] .

Всё зависит целиком и полностью от тараканов, которые были у составителя задачи в голове при такой формулировке.
Shenja German
Shenja German
9 996
Лучший ответ
Список это цепочка записей (структур) , каждая из которых содержит адрес следующей записи (структуры) - в однонаправленных списках, или адреса следующей и предыдущей - в двунаправленных списках.
Описание класса:

type Spisok = class
S : tSpis;
constructor Create;
function Size : Word;
procedure Out;
procedure Add(N : Integer);
… { ну и ещё что нужно }
end;

Где tSpis — описанный ранее динамический список.
К примеру список целых чисел:

type tSpis = ^rSpis;
rSpis = record
N : Integer;
Next : tSpis;
end;

После описания класса, нужно описать его методы:

constructor Spisok.Create;
begin
S := nil;
end;

function Spisok.Size : Word;
var L : Word; Cur : tSpis;
begin
Cur := S; L := 0;
while Cur <> nil do begin Inc(L); Cur := Cur^.Next; end;
Size := L;
end;

procedure Spisok.Out;
begin
… { здесь нужно описать вывод в нужном тебе виде }
end;

procedure Spisok.Add(N : Integer);
var Cur, Tmp : tSpis;
begin
New(Tmp); Tmp^.N := N; Tmp^.Next := nil;
Cur := S; if Cur = nil then Sp := Tmp else begin while Cur^.Next <> nil do Cur := Cur^.Next; Cur^.Next := Tmp; end;
end;

Далее в программе можешь использовать описанное:

var Sp : Spisok;

Sp := Spisok.Create;
Len := Sp.Size; { Значение Len = 0 }
Sp.Add(1);
Sp.Add(2);
Len := Sp.Size; { Значение Len = 2 }
Олег Рогозин
Олег Рогозин
57 761
Ну если "Своими словами" и "как можно подробнее" то в Delphi списки реализованы классом Tlist и его производными например TObjectList
Если надо еще подробнее пиши в агент
Ринат Лопин
Ринат Лопин
68 014
Да нахрен ты кому тут уперся преподавать тебе здесь задарма теорию !
На то есть учебники и Гугль.
Саша Железкин Ну три слова. Списки это... Мне хватит. В гугле я по крайней мере пять способов реализации нашел что и поставило меня в тупик.
Списки - это что-то вроде массива, но для хранения более разнообразных типов данных и более динамичен.

Пример:
var list:TList;

вывод содержимого:
for i:=0 to List.count-1 do begin
Memo1.lines.add(List);
end;

Т. е. выводится также как и массив.

Добавление данных в список:
List.add(что добавляем (что угодно)) ;

List.clear - очистить список.

Пример удаления данных:
TSHape(List).free;
List:=nil;
List.Pack; - пересортирует список, т. е. удаляет пустые ячейки из строки.

Если чё пиши в Л. С.
Алексей Кудрявцев > Списки - это что-то вроде массива
Ага.
А потом, после таких вот "откровений", мы удивляемся почему наши космические корабли вместо того чтобы "бороздить просторы" бездарно и позорно падают в океан)