代码之家  ›  专栏  ›  技术社区  ›  NumberFour

Pascal格式的链表

  •  2
  • NumberFour  · 技术社区  · 14 年前

    作为一个帕斯卡初学者,它将帮助我作为一个学习材料很多。

    谢谢你的建议。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Aif    14 年前

    我在旧邮件中发现了一个我们做过的实现。代码是“法语”的,所以我不会碰它,以免忘记某个会破坏编译的函数:-)

    首先,我们有一个“element”类型,让我们可以轻松地更改要存储在列表中的内容:

    unit U_ELEMENT;
    
    interface
    
    { We store integers }
    type
        T_ELEMENT = Integer;
    
    { Reads an element }
    procedure lireElement(out res:INTEGER; out code:WORD; out ch:STRING);
    { Write and element }
    procedure ecrireElement(const t:T_ELEMENT);
    
    implementation
    
    procedure lireElement(out res:T_ELEMENT; out code:WORD; out ch:STRING);
    begin
        write('> ');readln(ch);
        val(ch,res,code);
    end;
    
    procedure ecrireElement(const t:T_ELEMENT);
    begin
        write(t);
    end;
    
    end.
    

    unit U_LISTE;
    
    interface
    
    uses U_ELEMENT;
    
    const LISTEVIDE = NIL;
    type
        T_LISTE = ^T_CELLULE; 
        T_CELLULE = record
            info: T_ELEMENT; { The stored information }
            suivant: T_LISTE; { Pointer to the next element }
        end;
    { Add an heading element }
    function ajouteEnTete(e:T_ELEMENT;l:T_LISTE):T_LISTE;
    { returns the head of the list }
    function tete(l:T_LISTE):T_ELEMENT;
    { returns the list, without the head }
    function reste(l:T_LISTE):T_LISTE;
    { List empty? }
    function estListeVide(l:T_LISTE):BOOLEAN;
    { Modify the header element }
    procedure modifierTete(var l:T_LISTE;const e:T_ELEMENT);
    { Modify the list after the head }
    procedure modifierReste(var l1:T_LISTE; const l2:T_LISTE);
    
    implementation
    
    function ajouteEnTete(e:T_ELEMENT;l:T_LISTE):T_LISTE;
    var l1:T_LISTE;
    begin
        new(l1);
        l1^.info := e;
        l1^.suivant := l;
        ajouteEnTete := l1;
    end;
    
    function tete(l:T_LISTE):T_ELEMENT;
    begin
        tete := l^.info;
    end;
    
    function reste(l:T_LISTE):T_LISTE;
    begin
        reste := l^.suivant;
    end;
    
    function estListeVide(l:T_LISTE):BOOLEAN;
    begin
        estListeVide := l=NIL;
    end;
    
    procedure modifierTete(var l:T_LISTE;const e:T_ELEMENT);
    begin
        l^.info := e;
    end;
    
    procedure modifierReste(var l1:T_LISTE; const l2:T_LISTE);
    begin
        l1^.suivant := l2;
    end;
    
    end.
    

    还有一个小测试程序:

    program testeliste;
    
    uses U_ELEMENT,U_LISTE;
    
    procedure afficherListe(const l:T_LISTE);
    var l1: T_LISTE;
        vide: BOOLEAN;
    begin
        write('(');
        l1 := l;
        vide := estListeVide(l1);
        while not(vide) do
        begin
            ecrireElement(tete(l1));
            l1 := reste(l1);
            vide := estListeVide(l1);
            if not(vide) then
                write(',');
        end;
        write(')');
        writeln;
    end;
    
    var res:T_ELEMENT;
        code:WORD;
        ch:STRING;
        i:INTEGER;
        l:T_LISTE;
    
    Begin
        l:=LISTEVIDE;
        for i:=0 to 9 do
        begin
            lireElement(res,code,ch);
            l := ajouteEnTete(res,l);
        end;
        afficherListe(l);
    
        afficherListe(reste(l));
        afficherListe(reste(reste(reste(l))));
        afficherListe(ajouteEnTete(tete(l),l));
    
    End.
    

    ,但我认为它有助于语法和全局思想。

        2
  •  1
  •   SamGX3 StefanE    7 年前