📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PStackRec=^TStackRec;
TStackRec=record
Data:char;
Next:PStackRec;
Prev:pStackRec;
end;
TForm1 = class(TForm)
Button1: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
pHead:PStackRec;
protected
procedure FreeAllNode;
public
constructor Create;
destructor Destroy; override;
function IsEmpty:boolean;
function GetData(var a_ch:char):boolean;
function PopData(var a_ch:char):boolean;
function PushData(a_ch:char):boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TForm1.Create;
begin
GetMem(pHead,SizeOf(TStackRec));
pHead^.Next:=pHead;
pHead^.Prev:=pHead;
memo1.Lines.Add(phead^.Prev.Data);
memo1.Lines.Add(phead^.Data);
memo1.Lines.Add(phead^.Next.Data);
// inherited;
end;
procedure TForm1.FreeAllNode;
var
pNode:pStackRec;
begin
while pHead^.Next<>pHead do
begin
pNode:=pHead^.Next;
pHead^.Next:=pNode^.Next;
FreeMem(pNode);
end;
pHead^.Next:=pHead;
pHead^.Prev:=pHead;
end;
destructor TForm1.Destroy;
begin
FreeAllNode;
FreeMem(pHead);
inherited;
end;
function TForm1.IsEmpty:boolean;
begin
Result:=False;
if pHead^.Next=pHead then
Result:=True;
end;
function TForm1.GetData(var a_ch:char):boolean;
begin
if not IsEmpty then
begin
memo1.Lines.Add(pHead^.Prev^.Data);
Result:=True;
end
else
begin
Result:=False;
end;
end;
function TForm1.PopData(var a_ch:char):boolean; //删除最后一个内存
var
i:integer;
pTemp:pStackRec;
begin
if not IsEmpty then
begin
pTemp:=pHead^.Prev;
a_ch:=pTemp^.Data;
pHead^.Prev:=pTemp^.Prev;
pTemp^.Prev^.Next:=pHead;
FreeMem(pTemp);
memo1.Lines.Add(phead^.Prev.Data);
memo1.Lines.Add(phead^.Data);
memo1.Lines.Add(phead^.Next.Data);
Result:=True;
end
else
Result:=False;
end;
function TForm1.PushData(a_ch:char):boolean; //往最后加一个内存
var
pTemp:pStackRec;
begin
GetMem(pTemp,SizeOf(TStackRec));
pTemp^.Data:=a_ch;
pTemp^.Next:=pHead;
pTemp^.Prev:=pHead^.Prev;
pHead^.Prev^.Next:=pTemp;
pHead^.Prev:=pTemp;
memo1.Lines.Add(phead^.Prev.Data);
memo1.Lines.Add(phead^.Data);
memo1.Lines.Add(phead^.Next.Data);
Result:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Create;
end;
procedure TForm1.Button3Click(Sender: TObject);
var a_vch:char;
begin
a_vch:=Edit1.Text[1] ;
if GetData(a_vch) then
memo1.Lines.Add('成功'+a_vch)
else
memo1.Lines.Add('失败');
end;
procedure TForm1.Button4Click(Sender: TObject);
var a_vch:char;
begin
a_vch:=Edit1.Text[1] ;
if PopData(a_vch) then
memo1.Lines.Add('成功'+a_vch)
else
memo1.Lines.Add('失败');
end;
procedure TForm1.Button5Click(Sender: TObject);
var a_vch:char;
begin
a_vch:=Edit1.Text[1] ;
if PushData(a_vch) then
memo1.Lines.Add('成功'+a_vch)
else
memo1.Lines.Add('失败');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -