unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  PNode=^TNode;
  TNode=Record
    ElemValue:string;
    prior:PNode;
    next:PNode;
    head:pnode;
    add:PNode;
end;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit5: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure newnode();
  end;var
  Form1: TForm1;
  S,S1,S3:string;
  head:PNode;
   prior:PNode;
  anext:PNode;
  //add:PNode;
implementation{$R *.dfm}{procedure TForm1.read();
begin
  prior:=head;
  while prior.next<>head do prior:=prior.next;
end;}
procedure TForm1.newnode();
begin
  new(prior);
  new(anext);
  prior.ElemValue:=S;
  while(edit1.text<>'') do
  begin
    if prior.ElemValue='' then
      begin
        //new(prior);
        prior.ElemValue:=edit1.text;
        Edit5.Text:= Edit5.Text+' '+prior^.ElemValue;
        S:=edit1.Text;
        S1:=edit1.Text;
        head:=prior;
        break;
      end
    else  begin
      //new(anext);
      anext.ElemValue:=edit1.text;
      Edit5.Text:= Edit5.Text+' '+anext.ElemValue;
      S:=edit1.Text;
      S3:=edit1.Text;
      prior.next:=anext;
      prior:=anext;
      end;
    break;
  end;
  prior.next:=head;
  edit3.Text:=prior.ElemValue;
  edit4.Text:=head.ElemValue;
  anext:=head.next;
  edit2.Text:=head.next.ElemValue;
  dispose(anext);
  //read();
end;procedure TForm1.Button1Click(Sender: TObject);
//初始化
begin
  newnode();
end;procedure TForm1.Button2Click(Sender: TObject);
//插入
var
  S2:String;
  add:PNode;
begin
  new(add);
  //read();
  while prior.ElemValue<>edit2.text do
  begin
    prior:=prior.next;
    S2:=S2+' '+prior.ElemValue;
  end;
    add.next:=prior.next;
    prior.next:=add;
    add.ElemValue :=Edit3.Text;
    S2:=S2+' '+edit3.Text;
    prior:=add.next;
    S2:=S2+' '+prior.ElemValue;
  while prior.ElemValue<>S3 do
  begin
    prior:=prior.next;
    S2:=S2+' '+prior.ElemValue;
  end;
  edit5.text:=S2+' '+S3;
end;procedure TForm1.Button3Click(Sender: TObject);
//刪除
var
  S2:String;
  add:PNode;
begin
  //read();
  while prior.ElemValue<>edit4.text do
  begin
    S2:=S2+' '+prior.ElemValue;
    add:=prior;
    prior:=prior.next;
  end;
    add.next:=prior.next;
    prior:=add.next;
  while prior.ElemValue<>S3 do
  begin
    S2:=S2+' '+prior.ElemValue;
    prior:=prior.next;
    edit3.Text:=prior.ElemValue;
  end;
  edit5.text:=S2;
end;
end.

解决方案 »

  1.   

    題目:設計一個雙向鏈表:給出資料結構的定義,並給出插入、刪除的演算法。
    雙向鏈表的結構如下:
    type
    PNode=^TNode;
    TNode=Record
      ElemValue:string;
      prior:PNode;
      next:PNode;
    end;
    上面的程序是要實現這個簡單的功能,但我怎麼都做不出來,達人們幫我看看問題在哪兒啊.
      

  2.   

    當然運行了。Edit5.Text:= Edit5.Text+' '+prior^.ElemValue;。就是在這幾條語句卡住的,到底是我的鏈表根本就沒建好,還是建了之後都鏈表有問題就不知道了。