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