用类实现链表

来源:互联网 发布:湖州市公务员网络学堂 编辑:程序博客网 时间:2024/05/17 11:34

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TCmdBuffer = class
   public
    Cmd, ParaData: string;
    Next: TCmdBuffer;

  procedure add(cmd,ParaData:string);
  procedure Delete(cmd:string);
  end;

  
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Memo1: TMemo;
    Button7: TButton;
    Button8: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button9: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
  private
    { Private declarations }
    CmdBuffer: TCmdBuffer;
    procedure Send(Cmd, ParaData: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}


  procedure TCmdBuffer.add(cmd,paradata:string);
  var p,a:TCmdBuffer;
  begin
  P:=TCmdBuffer.Create;
  a:= TCmdBuffer.Create;
  //if p.Cmd='' then p:=nil;
  p.Cmd:=cmd;
  p.ParaData:=paradata;
  p.Next:=nil;

    a:=Next; 
    p.Next:=a;
    Next:=p;

  end;

  procedure TCmdBuffer.delete(cmd:string );
  var p,a, a1,d1:TCmdBuffer;
      Find:Boolean;
  begin
  Find:=False;
    P := TCmdBuffer.Create;
    a := TCmdBuffer.Create;
    a1:= TCmdBuffer.Create;
    d1:= TCmdBuffer.Create;

    a1:=nil;
    a:=Next;
 
    while a<>nil do
    begin
    d1:= TCmdBuffer.Create;
   
    p.Cmd      :=a.Cmd;
    p.ParaData :=a.ParaData;
    p.Next     :=nil;
   
    if (a.Cmd=cmd) and Not Find then
     begin
     Find:=True;
     a:=a.Next;
     continue;
     end;

  if a1=nil then
    begin
    System.move(p,a1,Sizeof(p));
    System.move(d1,p,Sizeof(d1));
    a:=a.Next;
    continue;
    end;

 

    System.move(a1,p.Next,Sizeof(a1));
    System.move(p,a1,Sizeof(p));
    System.move(d1,p,Sizeof(d1));

    a:=a.Next;
    end;

    Next:=a1;
  end;
 

procedure TForm1.FormShow(Sender: TObject);
begin
CmdBuffer:=TCmdBuffer.Create;
//CmdBuffer:=nil;
end;

 

procedure TForm1.Button5Click(Sender: TObject);
var p,q:TCmdBuffer;
   s:TStringlist;
begin
s:=TStringlist.Create;
p:= TCmdBuffer.Create;
q:= TCmdBuffer.Create;
//p:=nil;

CmdBuffer.add('aaa',' aaa');
CmdBuffer.add('bbb',' bbb');
CmdBuffer.add('ccc',' ccc');
CmdBuffer.add('ddd',' ddd');
CmdBuffer.add('eee',' eee');

q:=CmdBuffer;
  while q<>nil do
  begin
  //showmessage(q.Cmd+q.ParaData);
  q:=q.Next;;
  end ;


end;

procedure TForm1.Button6Click(Sender: TObject);
var p:TCmdBuffer;
   s:TStringlist;
begin
 
CmdBuffer.Delete('ddd');
end;

 

procedure TForm1.Button7Click(Sender: TObject);
var p,q:TCmdBuffer;
   s:TStringlist;
begin


q:=CmdBuffer;
  while q<>nil do
  begin
  memo1.Lines.Add(q.Cmd+q.ParaData);
  q:=q.Next;;
  end ;


end;

 

procedure TForm1.Button8Click(Sender: TObject);
begin
CmdBuffer.add(edit1.Text,edit2.Text);
end;

 

procedure TForm1.Button9Click(Sender: TObject);
begin
CmdBuffer.Delete(edit1.Text );
end;

end.

原创粉丝点击