回 帖 发 新 帖 刷新版面

主题:一道排序题

Program ex;
Type
  Link = ^node;
  Node = Record
    Data: Integer;
    Next: Link;
End;
Var
  n, a, i : Integer;
  p, p1, p2, head, tail : Link;
Begin
  ReadLn (n);
  Randomize;
  a := Random (90) + 10;
  New(p);
  p^.Data := a;
  p^.Next := Nil;
  head := p;
  tail := p;
  For i:=2 To n Do Begin
    New(p);
    p^.Data := random(90)+10;
    p^.Next := Nil;
    tail^.Next := p;
    tail := tail^.Next;
  End;
  p := head;
  While p <> Nil Do Begin
    write (p^.Data:4);
    p := p^.Next;
  End;
  WriteLn;
  p1 := head;
  For i:=1 To n-1 Do Begin
    p2 := p1^.Data;
    For i:= i+1 To n Do Begin
      a := p1^.Data;
      b := p2^.Data;
      if a>b then Begin
        p1^.Data := a;
        p2^.Data := b;
      p2 := p2^.Next;
      End;
    p1 := p1^.Next;
    End;
  End;
End.

这道题他显示是    p2 := p1^.Data;   这里错了,不过我是初学,没有弄懂,大家能不能帮我讲一下,谢谢。

回复列表 (共7个回复)

沙发

显然是错的。
node的data域是integer类型,而p2是指针类型,不出错才怪

板凳

现在改成了如下程序,不过在运行的时候只显示一行就不能运行了,只能强行关闭,这是怎么回事呢?
Program ex;
Type
  Link = ^node;
  Node = Record
    Data: Integer;
    Next: Link;
End;
Var
  n, b, a, i : Integer;
  p, p1, p2, head, tail : Link;
Begin
  ReadLn (n);
  Randomize;
  a := Random (90) + 10;
  New(p);
  p^.Data := a;
  p^.Next := Nil;
  head := p;
  tail := p;
  For i:=2 To n Do Begin
    New(p);
    p^.Data := random(90)+10;
    p^.Next := Nil;
    tail^.Next := p;
    tail := tail^.Next;
  End;
  p := head;
  While p <> Nil Do Begin
    write (p^.Data:4);
    p := p^.Next;
  End;
  WriteLn;
  p1 := head;
  While p1<>Nil Do Begin
    p2 := p1^.Next;
    While p2<>Nil Do Begin
      a := p1^.Data;
      b := p2^.Data;
      if a>b then Begin
        a := p2^.Data;
        b := p1^.Data;
      p2 := p2^.Next;
      End;
    p1 := p1^.Next;
    End;
  End;
  p := head;
  While p <> Nil Do Begin
    write (p^.Data:4);
    p := p^.Next;
  End;
End.

3 楼

中间有个死循环

4 楼

能具体的说一下吗?Thanks

5 楼

可是你好歹把程序算法什么的告诉我吧……虽然自己也能分析出来,但费时很大的……

6 楼

算法?什么是算法?(我晕)

这道题就是随机生成n个数,然后按从小到大的顺序排序。好像是选择排序吧。我好像就知道这么多了,惭愧。

7 楼

汗……你对指针的理解有些问题……
最好查查书再写……关键过程很乱

我来回复

您尚未登录,请登录后再回复。点此登录或注册