zoukankan      html  css  js  c++  java
  • 《Delphi 算法与数据结构》学习与感悟[10]: 双向链表

    如果在结构中再拿出 4 个字节的地址空间指向上一个节点, 就成了双向链表了.

    本例效果图:


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    type
      PMyRec = ^MyRec;
      MyRec = record
        Name: string[8];
        Age : Word;
        Prev,Next: PMyRec; {上一个与下一个的结构指针}
      end;
    
    var
      CurrentNode: PMyRec;
    
    {建立双向链表}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      PrevNode: PMyRec;
      i: Integer;
    begin
      PrevNode := nil;
      for i := 65 to 71 do  {建七个节点, 准备用 AA, BB, CC, DD, EE, FF, GG 来指定 MyRec.Name }
      begin
        New(CurrentNode);
        CurrentNode.Name := Chr(i) + Chr(i);
        CurrentNode.Age := i;
        CurrentNode.Prev := PrevNode;
        if Assigned(PrevNode) then PrevNode.Next := CurrentNode;
        PrevNode := CurrentNode;
      end;
    
      Button1.Caption := '上一个';
      Button2.Caption := '下一个';
    end;
    
    {上一个}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Assigned(CurrentNode.Prev) then
      begin
        CurrentNode := CurrentNode.Prev;
        Text := CurrentNode.Name + #44 + IntToStr(CurrentNode.Age);
      end else Text := '这是第一个节点';
    end;
    
    {下一个}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Assigned(CurrentNode.Next) then
      begin
        CurrentNode := CurrentNode.Next;
        Text := CurrentNode.Name + #44 + IntToStr(CurrentNode.Age);
      end else Text := '这是最后一个节点';
    end;
    
    end.
    
  • 相关阅读:
    PLAYBOOK 命令统计资源利用率 输出本地文件 flask展示
    如何对PFX证书转换成PEM格式证书
    Openshift学习
    Playbook handlers使用
    网络空间安全基础篇(2)----wireshark
    网络空间安全基础篇(1)----nmap的使用
    opencv——图像掩码操作
    opencv图像阈值操作
    在图片上绘制图形和添加文字
    使用opencv去操作树莓派摄像头保存图片和视频
  • 原文地址:https://www.cnblogs.com/del/p/1113075.html
Copyright © 2011-2022 走看看