Pascal中的链表

时间:2010-10-09 08:44:38

标签: delphi data-structures linked-list pascal

我在Pascal中寻找一个简单的链表实现。 作为一名Pascal初学者,它将帮助我作为一种学习材料。

感谢您的任何提示。

2 个答案:

答案 0 :(得分:4)

我在旧邮件中找到了我们已经完成的实施。代码是“法语”所以我不会碰它,以免忘记某个会破坏编译的函数: - )

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

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.

正如我所说的,这是一个旧的(非常古老的)程序,当我开始学习CS时,它可能不适合: - ),但我认为它有助于语法和全局想法。

答案 1 :(得分:1)

好文章:http://www.learn-programming.za.net/programming_pascal_learn14.html

网站似乎失败了。在这里你可以找到 - > Archived Version