КАТЕГОРИИ: Архитектура-(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; Просмотров: 341; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |