请问如何实现队列的进队出队?
谢谢?
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Contnrs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
MyQueue:TQueue;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
begin
a:='Hello,world!';
MyQueue.Push(@a);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MyQueue:=TQueue.Create;
end;procedure TForm1.Button2Click(Sender: TObject);
var
S:^String;
begin
S:=MyQueue.Pop;
Edit1.Text:=^S;
end;end.但是并没有成功在edit1里面出现'Hello,world!'
请问问题出在哪里?
谢谢
谢谢?
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Contnrs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
MyQueue:TQueue;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
begin
a:='Hello,world!';
MyQueue.Push(@a);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MyQueue:=TQueue.Create;
end;procedure TForm1.Button2Click(Sender: TObject);
var
S:^String;
begin
S:=MyQueue.Pop;
Edit1.Text:=^S;
end;end.但是并没有成功在edit1里面出现'Hello,world!'
请问问题出在哪里?
谢谢
解决方案 »
- 关于delphi IDE环境的几个问题,散分型题目
- 在delphi中,如何跟数据库相连啊,以前在VB中我们在DLL中创建了个连接类,然后在程序中调用就可以了,delphi中该怎么做啊??
- D6报表中的QRLABEL的字体有得上下居中吗?
- fast report 使用哪个函树 可以求这一列的和啊
- 如何让MASKEDIT显示“2003年06月03日”呢,通过微调能过调整年月日?
- 一个有关通信的问题?
- 问题解决就送分!!
- 输出问题 100点 急!!!!!
- 请问如何扩大拦截消息的范围?
- ZwQueryInformationThread 如何使用呢?
- CloseFile Close 的区别
- NMSMTP在哪有下载?
procedure EnQueue(pt: TPoint);
function OutQueue(): TPoint;implementationconst
QueueLen = 10;var
Pos: array[0..QueueLen] of TPoint;
Frist: Integer = 0;
Last: Integer = 0;procedure EnQueue(pt: TPoint);
var
tmp: Integer;
begin
tmp := (Last+1)mod(QueueLen+1);
if (tmp = Frist) then OutQueue;
Last := tmp;
Pos[Last] := pt;
end;function OutQueue(): TPoint;
begin
if (Last = Frist) then
begin
Result.X := 0;
Result.Y := 0;
end else
begin
Frist := (Frist+1)mod(QueueLen+1);
Result := Pos[Frist];
end;
end;function IsEmpty(): Boolean;
begin
Result := (Last=Frist);
end;end.
PMyRecord = ^TMyRecord;
TMyRecord = record
filename :String;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyQueue:TQueue; //声明队变量
ARecord:PMyRecord; //一个指针
ss:String;
{初始化部分}
begin
MyQueue:=TQueue.Create();
{Push部分}
New(ARecord);//给指针空间
ARecord^.filename:='abcdefg';
MyQueue.Push(ARecord);//进队
{Pop部分}
ARecord:=MyQueue.Pop;//出队
Edit1.TExt:=ARecord^.filename;
Dispose(ARecord); //清空指针{释放队的资源}
MyQueue.Free;
end;
VCL的Contnrs.pas里有个现成的TObjectQueue class。
还有TObjectStack。
var
MyQueue:TQueue; //声明队变量
ARecord:^MyName; //一个指针
i:integer;
ss:String;
{初始化部分}
MyQueue:=TQueue.Create();
{Push部分}
for i=0 to 10 do
begin
New(ARecord);//给指针空间
ARecord^.filename:=IntToStr(i);
MyQueue.Push(ARecord);//进队
end;
{Pop部分}
for :=0 to (MyQueue.Count-1) do
begin
ARecord:=MyQueue.Pop;//出队
ss:=ARecord^.filename;
Dispose(ARecord); //清空指针
end;{释放队的资源}
MyQueue.Free;
String不多适合的,除非用New来处理http://lysoft.7u7.net