|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Двусвязный список Delphi, проблема с выводом
Здравствуйте. Помогите с выводом двусвязного списка в ListBox. Скорее всего ошибка в l_printl, но я не совсем понимаю в каком месте и как правильно записать код для вывода информации в очередности.
Ещё возникла проблема в операциях по помещению элемента после и перед выбранным в операциях l_insert_before и l_insert_after. Не знаю, как правильно обозначить выбранный элемент из ListBox и присвоить его данные переменной е. За любую помощь буду благодарна) Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type PdlistEl = ^dlistEl; dlistEl = record next : PdlistEl; prev : PdlistEl; data : integer; end; dlistVar = record head : PdlistEl; tail : PdlistEl; count : cardinal; end; TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; ListBox1: TListBox; Button2: TButton; Button3: TButton; Button4: TButton; Button7: TButton; Label1: TLabel; Label2: TLabel; Button6: TButton; SaveDialog1: TSaveDialog; OpenDialog1: TOpenDialog; Button5: TButton; Button8: TButton; Button9: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure l_init (var L:dlistVar); begin L.head:=nil; L.tail:=nil; L.count:=0; end; procedure l_push_front ( var L:dlistVar; v:integer); var p: PdlistEl; begin new(p); p^.data:=v; p^.prev:=nil; p^.next:=L.head; L.head:=p; inc(L.count); if p^.next<>nil then p^.next^.prev:=p else L.tail:=p; end; procedure l_push_back ( var L:dlistVar; v:integer); var p:pdlistEl; begin new(p); p^.data:=v; p^.next:=nil; p^.prev:=L.tail; L.tail:=p; inc(L.count); if p^.prev<>nil then p.prev.next:=p else L.head:=p; end; procedure l_insert_before( var L : dlistVar; e : PdlistEl; v : integer ); var p : PdlistEl; begin if e = L.head then l_push_front ( L, v ) else begin new ( p ); p^.data := v; p^.next := e; p^.prev :=e.prev; inc ( L.count ); e.prev.next:=p; e.prev:=p; end; end; procedure l_insert_after ( var L : dlistVar; e : PdlistEl; v : integer ); var p : PdlistEl; begin if e = L.tail then l_push_back ( L, v ) else begin new ( p ); p^.data := v; p^.next := e^.next; p^.prev := e; inc ( L.count ); e^.next^.prev := p; e^.next := p; end; end; procedure l_remove ( var L : dlistVar; e : PdlistEl ); begin dec ( L.count ); if e^.prev <> nil then e^.prev^.next := e^.next else L.head := e^.next; if e^.next <> nil then e^.next^.prev := e^.prev else L.tail := e^.prev; dispose ( e ); end; procedure l_pop_front ( var L : dlistVar ); begin if L.count > 0 then l_remove ( L, L.head ); end; procedure l_pop_back ( var L : dlistVar ); begin if L.count > 0 then l_remove ( L, L.tail ); end; procedure l_printl ( var L : dlistVar ); var p : pdlistEl; begin p :=L.head; while (p <> nil) do begin Form1.ListBox1.Items.Add(IntToStr(p^.data)); p := p^.next; end; end; procedure TForm1.Button1Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_push_front(L,strtoint(Edit1.text)); l_printl(L); end; procedure TForm1.Button2Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_insert_before(L,L.tail,strtoint(Edit1.text)); l_printl(L); end; procedure TForm1.Button3Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_insert_after(L,L.head,strtoint(Edit1.text)); l_printl(L); end; procedure TForm1.Button4Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_push_back(L,strtoint(Edit1.text)); l_printl(L); end; procedure TForm1.Button7Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_remove(L,L.head.next.next); l_printl(L); end; procedure TForm1.Button8Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_pop_front(L); l_printl(L); end; procedure TForm1.Button9Click(Sender: TObject); var L : dlistVar; begin l_init(L); l_pop_back(L); l_printl(L); end; end. |