danh sach don

//phan 1

Program Su_dung_danh_sach_tuyen_con_tro_don;

USES crt,LIST_D;

Var

p:Position;

l:List;

x:Data;

chon:Integer;

kt:Boolean;

n,dem:integer;

BEGIN

clrscr;

kt:=False;

Repeat

Writeln;

Writeln;

Writeln;

Writeln;

Writeln(' ****************************************');

Writeln(' * *');

Writeln(' * 1.Tao mot danh sach moi! *');

Writeln(' * 2.Xoa phan tu nao do cua danh sach! *');

Writeln(' * 3.Chen vao danh sach mot phan tu! *');

Writeln(' * 4.Tim kiem mot phan tu nao do! *');

Writeln(' * 5.In noi dung tai vi tri bat ky! *');

Writeln(' * 6.Xem danh sach! *');

Writeln(' * 7.Thoat! *');

Writeln(' * *');

Writeln(' ****************************************');

Writeln;

Writeln;

Writeln(' Hay chon mot trong cac chuc nang tren!');

Readln(chon);

Case chon Of

1:Begin

Creat(l);

Writeln('Danh sach vua nhap la:');

IN_LIST(l);

End;

2:Begin

Write('Nhap vi tri can xoa:');

Readln(n);

if ((n>0)and(n<=SIZE(L))) then

Begin

XOA(post(n,p,l),l);

Writeln('Danh sach sau khi xoa:');

IN_LIST(L);

End

Else Writeln('Khong xoa duoc!Yeu cau xoa lai!');

End;

3:Begin

Write('Nhap vi tri can chen:');

Readln(n);

if(n=size(l)+1) then

Begin

Write('Nhap gia tri can chen:');

Readln(x);

chen_sau(x,endl(l),l);

Writeln('Danh sach sau khi chen la:');

In_list(l)

End

Else

if ((n>0)and(n<=SIZE(L))) then

Begin

Write('Nhap gia tri can chen:');

Readln(x);

CHEN_truoc(X,post(n,p,l),L);

Writeln('Danh sach sau khi chen la:');

IN_LIST(L);

End

Else Writeln('Khong chen duoc!Yeu cau chen lai!');

End;

4:Begin

Writeln('Nhap gia tri can tim:');

Readln(x);

IF Locate(x,l)=nil then Writeln('Khong co gia tri nay trong danh sach!')

Else writeln('Gia tri nay o vi tri:',pst(x,p,l));

End;

5:Begin

Write('Nhap vi tri can xem gia tri:');

Readln(n);

if ((n>0)and(n<=SIZE(L))) then

Begin

WRITELN('Vi tri thu ',N,' co gia tri la:',Retrive(post(n,p,l),l));

End

Else Writeln('Khong co vi tri nay!Yeu cau nhap lai!');

End;

6:Begin

Writeln('Danh sach la:');

IN_LIST(L);

End;

7:kt:=true

End

until (kt);

END.

-------------------------------

//phan2

UNIT LIST_D;

INTERFACE

CONST NULL=NIL;

TYPE

DATA=INTEGER;

POINTER=^CELL;

CELL = RECORD

INFO:DATA;

NEXT:POINTER;

END;

LIST=POINTER;

POSITION=POINTER;

PROCEDURE IN_LIST(L:LIST);

FUNCTION ENDL(L:LIST):POSITION;

FUNCTION FIRST(L:LIST):POSITION;

FUNCTION NEXT(P:POSITION;L:LIST):POSITION;

FUNCTION PREVIOUS(P:POSITION;L:LIST):POSITION;

FUNCTION EMPTY(L:LIST):BOOLEAN;

FUNCTION RETRIVE(P:POSITION;L:LIST):DATA;

PROCEDURE CHEN_TRUOC(X:DATA;P:POSITION;VAR L:LIST);

PROCEDURE CHEN_SAU(X:DATA;P:POSITION;VAR L:LIST);

PROCEDURE XOA(P:POSITION;VAR L:LIST);

PROCEDURE MAKE_NULL(VAR L:LIST);

FUNCTION LOCATE(X:DATA;L:LIST):POSITION;

PROCEDURE CREAT(VAR L:LIST);

FUNCTION SIZE(L:LIST):INTEGER;

function POST(N:INTEGER;P:POSITION;L:LIST):position;

FUNCTION PST(X:DATA;P:POSITION;L:LIST):INTEGER;

IMPLEMENTATION

PROCEDURE MAKE_NULL(var l:list);

BEGIN L:=NIL END;

(*--------------------------------------------------------------------*)

PROCEDURE IN_LIST(L:LIST);

BEGIN

IF EMPTY(L) THEN WRITELN(CHR(7),'DANH SACH RONG')

ELSE

WHILE L<>NIL DO

BEGIN

WRITE(L^.INFO:6);

L:=L^.NEXT;

END;

END;

(*-----------------------------------------------------------------*)

function ENDL(L:LIST):POSITION;

VAR P:POINTER;

BEGIN

IF EMPTY(L) THEN P:=NIL

ELSE

BEGIN

P:=L;

WHILE P^.NEXT<>NIL DO

P:=P^.NEXT;

END;

ENDL:=P

END;

(*----------------------------------------------------------------*)

function FIRST(L:LIST):POSITION;

BEGIN

FIRST:=L

END;

(*----------------------------------------------------------------*)

function NEXT(P:POSITION;L:LIST):POSITION;

BEGIN

IF EMPTY(L) THEN NEXT^.NEXT:=NIL

ELSE

NEXT:=P^.NEXT

END;

(*-----------------------------------------------------------------*)

function PREVIOUS(P:POSITION;L:LIST):POSITION;

VAR Q:POSITION;

BEGIN

Q:=L;

IF EMPTY(L) THEN PREVIOUS:=L

ELSE

WHILE Q^.NEXT<>P DO Q:=Q^.NEXT;

PREVIOUS:=Q;

END;

(*----------------------------------------------------------------*)

function EMPTY(L:LIST):BOOLEAN;

BEGIN

EMPTY:=(L=NIL)

END;

(*----------------------------------------------------------------*)

function RETRIVE(P:POSITION;L:LIST):DATA;

BEGIN

RETRIVE:=P^.INFO

END;

(*-----------------------------------------------------------*)

procedure CHEN_TRUOC(X:DATA;P:POSITION;VAR L:LIST);

VAR Q:POSITION;

BEGIN

NEW(Q);

IF L=NIL THEN

BEGIN Q^.NEXT:=NIL;

Q^.INFO:=X;

L:=Q

END

ELSE

BEGIN

Q^.NEXT:=P^.NEXT;

Q^.INFO:=P^.INFO;

P^.NEXT:=Q;

P^.INFO:=X

END

END;

(*--------------------------------------------------------------------*)

procedure CHEN_SAU(X:DATA;P:POSITION;VAR L:LIST);

VAR Q:POSITION;

BEGIN

NEW(Q);

Q^.INFO:=X;

IF P=NIL THEN

BEGIN

Q^.NEXT:=L;

L:=Q

END

ELSE

BEGIN

Q^.NEXT:=P^.NEXT;

P^.NEXT:=Q

END

END;

(*------------------------------------------------------------*)

procedure XOA(P:POSITION;VAR L:LIST);

VAR Q:POSITION;

BEGIN

NEW(Q);

IF EMPTY(L) THEN WRITE('DANH SACH RONG')

ELSE

IF P=L THEN

BEGIN

Q:=L;

L:=L^.NEXT;

DISPOSE(Q)

END

ELSE

BEGIN

previous(p,l)^.next:=P^.NEXT;

DISPOSE(P);

END

END;

(*------------------------------------------------------------*)

FUNCTION LOCATE(X:DATA;L:LIST):POSITION;

VAR P:POSITION;

BEGIN

P:=L;

WHILE(P^.INFO<>X) AND (P^.NEXT<>NIL) DO

BEGIN

P:=P^.NEXT;

END;

IF P^.INFO=X THEN LOCATE:=P

ELSE LOCATE:=NIL;

END;

(*-----------------------------------------------------------------*)

Procedure Creat(Var l:List);

Var

tl:Char;

X:DATA;

p:position;

Begin

Make_null(l);

Repeat

Write('CO NHAP DU LIEU KHONG(C/K)?');

Readln(tl);

If(Upcase(tl)<>'K') then

Begin

Write('Nhap gia tri cho danh sach:');

Readln(x);

chen_sau(X,endl(l),L);

p:=p^.next;

End

Until (Upcase(tl)='K');

End;

{*------------------------------*}

FUNCTION Post(n:integer;p:position;l:List):position;

Var i:integer;

Begin

p:=l;

For i:=1 to n-1 do

p:=p^.next;

post:=p;

End;

(*-----------------------------------------------------------------*)

FUNCTION SIZE(L:LIST):INTEGER;

VAR DEM:INTEGER;

P:POSITION;

BEGIN

DEM:=0;

P:=L;

WHILE(P<>NIL)DO

BEGIN

DEM:=DEM+1;

P:=P^.NEXT;

END;

SIZE:=DEM;

END;

FUNCTION PST(X:DATA;P:POSITION;L:LIST):INTEGER;

VAR DEM:INTEGER;

BEGIN

DEM:=1;

P:=L;

WHILE(P^.INFO<>X) DO

BEGIN

DEM:=DEM+1;

P:=P^.NEXT;

END;

PST:=DEM;

END;

END.

Bạn đang đọc truyện trên: truyentop.pro

Tags: