링크드 리스트의 개념은 어렵지 않은데, C만 쓰다보니 델파이의 포인터와 쪼끔 다른 기호 사용들에 처음에 많이 헤멨다. 심지어 예제 소스도 거의 없는 편... 아주 간단한 예제이지만 Linked List의 틀을 가지고 있으니까 약간의 응용을 더하면 되지 않을까싶다.
간단하게 이름과 포인터를 가진 구조체를 선언하고, ListBox컴포넌트를 이용해서 내용을 출력하는 예제이다.
(2018.02.09 업데이트)
기본적인 구조체, 포인터의 선언과 삽입 프로시저, 출력 프로시저.
unit linkedlist; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type PExam = ^TExam; TExam = record iName : String; iNext : PExam; end; TForm1 = class(TForm) Edit1: TEdit; ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } tHead : PExam; procedure Add(aData : String); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Add(aData : String); var aNewNode : PExam; aHead : PExam; begin new(aNewNode); aNewNode.iNext := nil; aHead := tHead; if tHead = nil then begin tHead := aNewNode; aNewNode.iName := aData; end else begin while aHead^.iNext <> nil do aHead := aHead^.iNext; aHead^.iNext := aNewNode; // 마지막 노드를 가리킬 때 가리키는 노드의 iNext에 aNewNode를 연결 aHead := aHead^.iNext; // 추가한 마지막 노드를 가리킴 aHead^.iName := aData; end; end; procedure TForm1.Button1Click(Sender: TObject); var i : Integer; aHead : PExam; begin aHead := tHead; Add(Edit1.Text); ListBox1.Clear; if aHead = nil then else begin ListBox1.Items.Add(aHead^.iName); while aHead^.iNext <> nil do begin aHead := aHead^.iNext; ListBox1.Items.Add(aHead^.iName); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin tHead := nil; end; end.
'노동자의 삶 > 델파이' 카테고리의 다른 글
델파이 예제(3) - 가변형 레코드 (0) | 2018.02.14 |
---|---|
델파이 예제(2) - Move를 이용한 구조체에 문자열 대입하기 (0) | 2018.02.14 |
윈도우 업데이트 후 델파이 실행오류 (0) | 2018.02.13 |
델파이 기본적인 연산자와 키워드들 (0) | 2018.02.09 |
델파이의 시작 (0) | 2018.02.09 |