type                               //定义指针变量
    pReorder=^recordQQ;
    recordQQ=record
    Xuhao:integer;
    next:pReorder;
    end;
-------------------------
var
    ReorderArray:array of pReorder;//定义指针数组链表
    MaxEnter:integer;
-------------------------
procedure TForm1.QQspeakNum;
var
  i:integer;
begin
  setlength(ReorderArray,MaxEnter+1);
  for i:= 0 to MaxEnter do        //首先初始化指针数组链表;
  begin
    new(ReorderArray[i]);
    ReorderArray[i]^.next:=nil;
  end;
  for i:=0 to QQcount -1 do      //为指针数组链表赋值
  begin
    new(ReorderArray[i]^.next);
    ReorderArray[i]:=ReorderArray[i]^.next;
    ReorderArray[i]^.Xuhao:=i;
    ReorderArray[i]^.next :=nil;
  end;
end;
------------------------------
 for i:= MaxEnter downto 0 do
  begin
    while ReorderArray[i].next <> nil do
    begin
       //这中间的语句竟然没有执行。 ?????????
    end;
  end;
------------------------------
  for i:= 0 to MaxEnter do     //FormDestroy中释放内存
  begin
    while  ReorderArray[i]^.next <> nil do
    begin
      dispose(ReorderArray[i]);
      ReorderArray[i]:=ReorderArray[i]^.next;
    end;
  end;不知道以上代码错在哪里?望高手指正,谢谢。

解决方案 »

  1.   

    for i:= 0 to MaxEnter do        //首先初始化指针数组链表;
      begin
        new(ReorderArray[i]);           这应该是必要的吧,定义的头节点
        ReorderArray[i]^.next:=nil;    
      end;                     for i:=0 to QQcount -1 do      //为指针数组链表赋值
      begin
        new(ReorderArray[A[i]]^.next);      为数组的相应项添加链表  这里错了吗????
        ReorderArray[A[i]]:=ReorderArray[A[i]]^.next;
        ReorderArray[A[i]]^.Xuhao:=A[i];       
        ReorderArray[A[i]]^.next :=nil;
      end;
      

  2.   

    在我这边调试通过。
    大致的意思是,
    在窗体创建的时候,创建链。
    按button2,取链中所有XuHao数据。放到edit1中!
      

  3.   

    調用了new可以不調用dispose嗎?
      

  4.   

    我的目的是用数组链表来排序例如:待排序的数组A[]  i    0   1   2   3   4   5   6A[i]   2   3   3   5   2   4   1  找出A[i]中最大的即 MaxEnter:= 5建立数组链表:setlength(ReorderArray,MaxEnter+1);
    ReorderArray[2]--〉0--〉4--〉nil 
    ReorderArray[3]--〉1--〉2--〉nil 
    ReorderArray[5]--〉3--〉nil 
    ReorderArray[4]--〉5--〉nil 
    ReorderArray[1]--〉6--〉nil ReorderArray[0]--〉nil 
    这样 for i:= MaxEnter downto 0 do
      begin
        while ReorderArray[i].next <> nil do
        begin
           语句1 //读取ReorderArray[i].Xuhao就把数组A[]中的元素排序出来了即:A[3] 〉A[5]……
        end;
      end;这样对数组一次扫描就可以按升序或降序排出来了,时间复杂度为O(n)。应该算是快速排序吧。
    我在弄数组链表时“语句1” 就没执行,不知道错在哪里?
      

  5.   

    废话,语句1执行了才怪。
    既然你的数组ReorderArray[i].next一直为nil,那么while ReorderArray[i].next <> nil do一执行就跳出循环
      

  6.   


    只是我用new分配指针内容后没有释放,不过程序也没有出错。
    这样释放指针数组链表为什么错了:
    var
      i:integer;
    begin
      for i:= 0 to MaxEnter do     
      begin
        Refi:=ReorderArray[i]^.next ;
        while  Refi <> nil do
        begin
          ReorderArray[i]:=Refi^.next;
          dispose(Refi);
          Refi:=ReorderArray[i]^.next;    ////这里错了????
        end;
        dispose(ReorderArray[i]);
      end;
    end;
      

  7.   

    UP
    new分配指针内容后不释放可以嗎?