三、Delphi 2009 泛型容器单元(Generics.Collections)[2]: TQueue<T>

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.

TQueue 主要有三个方法、一个属性:
Enqueue(入列)、Dequeue(出列)、Peek(查看下一个要出列的元素);
Count(元素总数).

 

 

unit  Unit1;

interface

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

type
  TForm1 
=   class (TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    
procedure  FormCreate(Sender: TObject);
    
procedure  FormDestroy(Sender: TObject);
    
procedure  Button1Click(Sender: TObject);
    
procedure  Button2Click(Sender: TObject);
    
procedure  Button3Click(Sender: TObject);
  
end ;

var
  Form1: TForm1;

implementation

{ $R *.dfm }

uses  Generics.Collections;  { Delphi 2009 新增的泛型容器单元 }

type
  TRec 
=   record
    Name: 
string ;
    Age: Word;
  
end ;

var
  Queue: TQueue
< TRec > ;   { 定义一个泛型 TQueue 类, 这指定了要用于上面定义的 TRec 记录 }

{ 建立 }
procedure  TForm1.FormCreate(Sender: TObject);
begin
  Queue :
=  TQueue < TRec > .Create;

  Memo1.Clear;
  Button1.Caption :
=  Button1.Caption  +   '  入列 ' ;
  Button2.Caption :
=  Button2.Caption  +   '  出列 ' ;
  Button3.Caption :
=  Button3.Caption  +   '  下一个出列的 ' ;
end ;

{ 释放 }
procedure  TForm1.FormDestroy(Sender: TObject);
begin
  Queue.Free;
end ;

{ 入列: Enqueue }
procedure  TForm1.Button1Click(Sender: TObject);
var
  rec: TRec;
begin
  rec.Name :
=  StringOfChar(Char( 65   +  Random( 26 )),  3 );
  rec.Age :
=  Random( 150 );
  Queue.Enqueue(rec);
  Text :
=  Format( ' 当前队列成员总数: %d ' , [Queue.Count]);

  
{ 让 Memo1 配合显示 }
  Memo1.Lines.Add(Format(
' %s, %d ' , [rec.Name, rec.Age]));
end ;

{ 出列: Dequeue }
procedure  TForm1.Button2Click(Sender: TObject);
var
  rec: TRec;
begin
  
if  Queue.Count  =   0   then  Exit;
  rec :
=  Queue.Dequeue;
  ShowMessage(Format(
' %s, %d ' , [rec.Name, rec.Age]));
  Text :
=  Format( ' 当前队列成员总数: %d ' , [Queue.Count]);

  
{ 让 Memo1 配合显示 }
  Memo1.Lines.Delete(
0 );
end ;

{ 下一个出列的元素: Peek }
procedure  TForm1.Button3Click(Sender: TObject);
var
  rec: TRec;
begin
  
if  Queue.Count  =   0   then  Exit;
  rec :
=  Queue.Peek;
  ShowMessage(Format(
' %s, %d ' , [rec.Name, rec.Age]));
end ;

end .

 

 

ContractedBlock.gif ExpandedBlockStart.gif DFM
object Form1: TForm1
  Left 
= 0
  Top 
= 0
  Caption 
= 'Form1'
  ClientHeight 
= 147
  ClientWidth 
= 284
  Color 
= clBtnFace
  Font.Charset 
= DEFAULT_CHARSET
  Font.Color 
= clWindowText
  Font.Height 
= -11
  Font.Name 
= 'Tahoma'
  Font.Style 
= []
  OldCreateOrder 
= False
  Position 
= poDesktopCenter
  OnCreate 
= FormCreate
  OnDestroy 
= FormDestroy
  PixelsPerInch 
= 96
  TextHeight 
= 13
  
object Memo1: TMemo
    Left 
= 0
    Top 
= 0
    Width 
= 121
    Height 
= 147
    Align 
= alLeft
    Font.Charset 
= DEFAULT_CHARSET
    Font.Color 
= clWindowText
    Font.Height 
= -13
    Font.Name 
= 'Courier New'
    Font.Style 
= []
    Lines.Strings 
= (
      
'Memo1')
    ParentFont 
= False
    ScrollBars 
= ssBoth
    TabOrder 
= 0
    ExplicitHeight 
= 201
  
end
  
object Button1: TButton
    Left 
= 127
    Top 
= 21
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button1'
    TabOrder 
= 1
    OnClick 
= Button1Click
  
end
  
object Button2: TButton
    Left 
= 127
    Top 
= 61
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button2'
    TabOrder 
= 2
    OnClick 
= Button2Click
  
end
  
object Button3: TButton
    Left 
= 127
    Top 
= 99
    Width 
= 146
    Height 
= 25
    Caption 
= 'Button3'
    TabOrder 
= 3
    OnClick 
= Button3Click
  
end
end

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值