⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 源码教程
💻 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 + -