Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Динамические структуры данных




Implementation

Type

TForm1 = class(TForm) ListView1: TListView; Panel1: TPanel; Button1: TButton; BitBtn1: TBitBtn; procedure Button1Click (Sender: TObject);

end;

var Porml: TForm1;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject); type IntArray = array [0..1000] of byte; const stext='Ошибка открытия файла'; var n:integer; p:pointer; a,I,k:integer; s:array [1..3] of string; t:textfile; frfile of char;

ListItem:TListItem;..

ListColumn:TListCoIumn; begin

{$1-}

AssignFile(f,’npfil.txt');

reset(f);

{$1+}

if LOResult<>O then begin

MessageDlg(sText,mtError,[mbOk],0);

exit; end;

n:=(FileSize(f)+l) div 2; :

CloseFile(f); p:=nil; try

GetMem(p,n);

{$1-}

AssignFile(t,'Inpfil.txt');

reset(t);

{$1+}

if LOResult<>O then begin

MessageDlg(sText,mtError,[mbOk], 0);

Exit;

end;

a:l;

while not eof(t) do begin


inc(a);

read(t,IntArray(р^)[a]); end;

CloseFile(t); for i:=l to 3 do begin

ListColumn:=ListView1.Columns.Add; case i of

1: ListColumn.Caption:=' Числа<=100';

2: ListColumn.Caption:='100< Числа<=200';

3: ListColumn.Caption:=' Числа>200';

End;

ListColumn.width:=14*Font.Size;

S[1]:='’;

end;

for i:=a-l downto 0 do begin k:= IntArray(p^) [i]

if k<=100 then s[1]:=s[1] + ‘ '+IntToStr (k) else if k<=200 then s[2]:=s[2]+’'+IntToStr(k)

else s[3]:=s[3] + ' '+IntToStr(k);

if dength(s[1])>14) or (length (s [2]) >14) or (length(s[3])>14) or (i=0) then begin ListItem:=ListView1.Items.Add; ListItem.Caption:=s[1]; ListItem.Selected:=true; ListView1.Selected.Subitems.Add(s[2]);

ListView1.Selected.SubItems.Add(s[3]};

s[1]:=’’;

s[2]:=’’;

s[3]:=’’;


Рассмотрим построение программы, которая имеет дело с людьми, слу­жащими в некоторой фирме. Структура данных для служащего может вклю­чать, например, имя, возраст, подразделение, оклад. Определим структуру данных для менеджера. Во-первых, менеджер является служащим, поэтому к нему относится рассматриваемая структура данных. Во-вторых, к менеджеру относятся некоторые добавочные характеристики, например список служа­щих, которые входят в его группу. В данном случае в памяти необходимо определить служащих, в том числе и менеджера. Но память с данными для менеджера должна содержать еще список подчиненных ему служащих. Оче­видно, этот список должен просто ссылаться в памяти на адреса расположе­ния информации о служащих, чтобы не повторять еще раз упомянутые дан­ные. Таким образом, в данном случае необходимо использовать указатели для построения структур данных {динамических структур данных).

Среди динамических структур данных можно выделить линейные структуры (списки) и структуры-деревья, например, такие:

• однонаправленные списки;

• двунаправленные списки;

• стеки;

• очереди;

• бинарные деревья.

Динамические структуры обычно состоят из двух частей. Первая часть включает содержательную информацию, а вторая необходима для построе­ния связей с другими элементами. Эти связи строят с помощью указателей.

 


end; end; finally

FreeMem(p,n); end; end; end.

В элементе ListView1 ширина столбцов связана с размером используе­мого шрифта. Значение 14 для расчета ширины столбца выбрано произволь­но (с помощью оператора IF length(s[1]>14... выводится не более 14 символов в строке). Оператор Try контролирует выделение памяти для ука­зателя р. Обратная последовательность вывода чисел обеспечивается опера­тором Fог... downto...

 
 

 


ОДНОНАПРАВЛЕННЫЕ СПИСКИ

Структура однонаправленного связанного списка приводится на рис. 40, где принято, что содержательная часть состоит из текстовой информации (Info) в виде строки. Звездочка представляет собой указатель, с помощью которого первый элемент связывается со вторым, второй - с третьим и т.д. Конец списка указывается с помощью пустого указателя nil. Построить та­кую структуру можно с помощью следующего объявления:




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 312; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.