Tải bản đầy đủ (.doc) (23 trang)

CÁC KIỂU DỮ DIỆU TRỪU TƯỢNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (101.22 KB, 23 trang )

1
CÁC KIỂU DỮ DIỆU TRỪU TƯỢNG
I. DANH SÁCH
{------------ THUC THI DANH SACH BANG MANG (DS DAC) ------------}
Uses CRT;
Const max=100;
Type
Datatype=integer;
List=record
data:array[1..max] of DataType;
Last:integer;
End;
Var L : List;i,n,x:integer;
{--------- TAO DANH SACH RONG --------}
Procedure Makenull(Var L: List);
Begin
L.Last:=0;
End;
{---------- KIEM TRA DANH SACH RONG --------}
Function Empty(L:List):boolean;
Begin
empty:=L.Last=0;
End;
{---------- KIEM TRA DANH SACH DAY ----------}
Function Full(L:List):boolean;
Begin
Full:=L.Last>max;
End;
{----------- TRA VE VI TRI PHAN TU SAU PT CUOI CUNG ------}
Function End_List(L:List): integer;
Begin


End_List:=L.Last+1;
End;
{---------- TRA VE VI TRI PHAN TU DAU TIEN -----------}
Function First(L:List):integer;
Begin
First:=1;
End;
{----------- TRA VE VI TRI PHAN TU SAU PHAN TU P ---------}
Function Next(P:integer;L:List):integer;
Begin
Next:=P+1;
End;
{----------- TRA VE VI TRI PHAN TU TRUOC PHAN TU P ---------}
Function Previous(P:integer;L:List):integer;
Begin
Previous:=P-1;
End;
{----------- TRA VE VI TRI PHAN TU CUOI CUNG ---------}
2
Function Last(L:List):integer;
Begin
Last:=L.Last;
End;
{---------- TIM PHAN TU CO GIA TRI LA X -----------}
Function Local(x:datatype;L:List):integer;
Var i,tim:integer;
Begin
tim:=0;
for i:=1 to L.Last do
if L.data[i]=x then tim:=i;

Local:=tim;
End;
{---------- THEM PHAN TU VAO DANH SACH TAI VI TRI P ----------}
Procedure Insert(x:integer;P:integer; Var L:List);
Var q:integer;
Begin
if Full(L) then writeln('Danh sach day!')
else
if (P<1) and (p>L.Last) then writeln('P is out position!')
else
begin
For q:=L.Last+1 downto p+1 do
L.data[q]:=L.data[q-1];
L.Last:=L.Last+1;
L.data[p]:=x;
end;
End;
{------------ XOA PHAN TU TAI VI TRI P ----------}
Procedure Delete(p:integer;Var L:List);
Var i: integer;
Begin
if Full(L) then writeln('Danh sach day!')
else
if (P<1) and (p>L.Last) then writeln('P is out position!')
else
begin
For i:=L.Last-1 downto p do
L.data[i]:=L.data[i+1];
L.Last:=L.Last-1;
end;

End;
{------------ LAY GIA TRI PHAN TU TAI VI TRI P -----------}
Function Retrieve(P: integer;L:List):integer;
Var i:integer;
Begin
if empty(L) then writeln('Danh sach rong!')
else
if (P<1) and (p>L.Last) then writeln('P is out position!')
else
3
retrieve:=L.data[p];
End;
{----------------- THUC THI DANH SACH LIEN KET DON ----------- }
Uses CRT;
Type
datatype=integer;
List=^Cell;
Cell= Record
data:datatype;
next:List;
end;
Var L: List; x,n:integer;
{---------- TAO DANH SACH RONG ---------}
Procedure Makenull(Var L: List);
Begin
L^.next:=nil;
End;
{----------- KIEM TRA DANH SACH RONG --------}
Function Empty(L:List):Boolean;
Begin

empty:=L^.next=nil;
End;
{----------- TRA VE PHAN TU SAU PHAN TU P -----------}
Function Next(P:List;L:List):List;
Begin
Next:=P^.next;
End;
{------------ TRA VE PHAN TU DAU DANH SACH --------------}
Function First(L:List):List;
Var P: List;
Begin
if not empty(L) then
P:=L;
End;
{----------- TRA VE PHAN TU SAU PHAN TU CUOI DANH SACH ----------}
Function End_List(L:List):List;
Var P: List;
Begin
P:=L;
While P^.next<>nil do P:=P^.next;
End_List:=P;
End;
{------------ TRA VE VI TRI PHAN TU TIM THAY --------}
Function Local(x:datatype;L:List):List;
Var P: List;
Begin
if empty(L) then Local:=nil
else
begin
4

P:=L;
while (P^.next<>nil) do
begin
if P^.next^.data=x then Local:=p;
P:=P^.next;
end;
end;
End;
{------------ LAY GIA TRI TAI PHAN TU P -----------}
Function Retrieve(P:List;L:list):datatype;
Begin
if P^.next<>nil then
Retrieve:=P^.next^.data;
End;
{------ THEM PHAN TU VAO VI TRI BAT KI TRONG DANH SACH ---------}
Procedure Insert_L(x:datatype;p:integer;Var L:List);
Var tam,Q:List;i:integer;
Begin
new(tam);tam^.data:=x;
tam^.next:=nil;Q:=L;
if P=1 then
begin
tam^.next:= Q^.next;
Q^.next:=tam
end
else
begin
For i:=2 to p do Q:=Q^.next;
tam^.next:=Q^.next;
Q^.next:=tam;

end;
End;
{------------ THEM 2 PHAN TU VAO DANH SACH DA DUOC SAP XEP --------}
Procedure Insert_L1(x:integer;Var L: List);
Var tam:integer;P,Q:List;
Begin
new(Q);
Q^.data:=x;
Q^.next:=nil;P:=L;
While (P^.next<>nil) and (x>P^.next^.data) do P:=P^.next;
Q^.next:=P^.next;
P^.next:=Q;
End;
{-------------- XOA PHAN TU TAI VI TRI n TRONG DANH SACH -----------}
Procedure Delete(n:integer;Var L:List);
Var i: integer; P,P1:List;
Begin
if n=1 then
begin
P:=L;
5
P^.next:=P^.next;
end
else
begin
P:=L;
For i:=2 to n do P:=P^.next;
P^.next:=P^.next;
end;
P^.next:=P^.next^.next;

End;
{------------ SAP XEP DANH SACH --------}
Procedure SapXep(Var L: List);
Var P,Q: List; tam:integer;
Begin
P:=L;
while P^.next<>nil do
begin
Q:=P^.next;
While Q<>nil do
begin
if P^.next^.data>Q^.next^.data then
begin
tam:=P^.next^.data;
P^.next^.data:=Q^.next^.data;
Q^.next^.data:=tam;
end;
Q:=Q^.next;
end;
P:=P^.next;
end;
End;
II- HÀNG ĐỢI
{---------------THUC THI HANG DOI BANG CON TRO ---------}
Uses CRT;
Type
elementype=integer;
Node=^Cell;
Cell= record
element:elementype;

next:Node;
end;
Queue=record
front,rear: Node;
end;
Var Q: Queue;x,m,n:integer;
{--------- TAO HANG RONG -----------}
Procedure Makenull(Var Q: Queue);
Begin
6
new(Q.front);
Q.front^.next:=nil;Q.front:=Q.rear;
End;
{-------- KIEM TRA HANG RONG--------}
Function Empty(Q:Queue):boolean;
Begin
empty:=Q.front=Q.rear;
End;
{---------- LAY NOI DUNG TAI VI TRI DAU HANG --------}
Function Front(Q:Queue):elementype;
Begin
if not empty(Q) then
front:=Q.front^.next^.element;
End;
{--------- XOA PHAN TU DAU HANG ------------}
Procedure DelQueue(Var Q: Queue);
Var T: node;
Begin
if not empty(Q) then
Q.front:=Q.front^.next;

End;
{---------- THEM PHAN TU VAO CUOI HANG -------- }
Procedure EndQueue(x:elementype;Var Q: Queue);
Begin
new(Q.rear^.next);
Q.rear:=Q.rear^.next;
Q.rear^.element:=x;
Q.rear^.next:=nil;
End;
{------------ THUC THI HANG DOI BANG MANG VONG ---------------}
Uses CRT;
Const max=100;
Type
elementype=integer;
Queue = Record
element:array[1..max-1] of elementype;
front,rear:integer;
end;
Var Q: Queue;x,m,n:integer;
{---------- TAO HANG RONG ----------}
Procedure Makenull(Var Q: Queue);
Begin
Q.front:=0;Q.rear:=0;
End;
{--------- KIEM TRA HANG RONG -------}
Function Empty(Q:Queue):Boolean;
Begin
empty:=Q.Front=Q.rear+1;
End;
{--------- KIEM TRA HANG DAY ---------}

7
Function Full_Q(Q:Queue):Boolean;
Begin
Full_Q:=Q.rear=max;
End;
{--------- THEM PHAN TU VAO CUOI HANG ----------}
Procedure EndQueue(x:elementype;Var Q: Queue);
Begin
if Full_Q(Q) then writeln('Hang day!')
else
begin
if Q.front=0 then
Q.front:=Q.front+1;
Q.rear:=Q.rear+1;
Q.element[Q.rear]:=x;
end;
End;
{--------- XOA PHAN TU RA KHOI HANG ---------}
Procedure DelQueue(Var Q: Queue);
Begin
if empty(Q) then writeln('Hang doi rong!')
else
Q.front:= Q.front+1;
End;
III- NGĂN XẾP:
{------------- THUC THI NGAN XEP BANG MANG -------------}
Uses CRT;
Const max = 100;
Type
Elementype=integer;

STACK=Record
element:array[1..max] of elementype;
Top:integer;
end;
Var S:Stack;x,n,m:integer;
{----------- TAO NGAN XEP RONG ----------}
Procedure Makenull(Var S: Stack);
Begin
S.Top:=max;
End;
{--------- KIEM TRA NGAN XEP RONG --------}
Function Empty(S:Stack):boolean;
Begin
empty:=S.Top=max;
End;
{---------- KIEM TRA NGAN XEP DAY ----------}
Function Full_Stack(S:Stack):boolean;
Begin
Full_Stack:=S.Top=0;
End;
8
{---------- THEM PHAN TU X LEN DINH NGAN XEP ----------}
Procedure Push(x:elementype;Var S:Stack);
Begin
if full_Stack(S) then writeln('Ngan xep day!')
else
begin
S.Top:=S.Top-1;
S.element[S.top]:=x;
end;

End;
{-------- TRA VE PHAN TU TREN DINH NGAN XEP -------}
Function TOP(S:Stack):elementype;
Begin
if empty(S) then writeln('Ngan xep rong!')
else
Top:=S.element[S.top];
End;
{---------- XOA PHAN TU O DINH NGAN XEP ---------}
Procedure POP(Var S: stack);
Begin
if empty(S) then writeln('Ngan xep rong!')
else
S.Top:=S.Top+1;
End;
{------------- THUC THI NGAN XEP BANG CON TRO -------------}
Uses CRT;
Type
elementype=integer;
Stack=^Node;
Node=Record
element:elementype;
Link:Stack;
end;
Var S: Stack; x,m,n:integer;
{----------- TAO STACK RONG ----------}
Procedure Makenull(Var S: Stack);
Begin
S:=nil;
End;

{---------- KIEM TRA RONG ---------}
Function Empty(S:Stack):boolean;
Begin
empty:=S=nil;
End;
{--------- THEM PHAN TU ---------}
Procedure Push(x:elementype;Var S:Stack);
Var P: Stack;
Begin
9
new(P);P^.element:=x;
P^.link:=S;S:=P;
End;
{----------- XOA PHAN TU TAI DINH NGAN XEP --------}
Procedure POP(Var S: Stack);
Var P: Stack;
Begin
if empty(S) then writeln('ngan xep rong!')
else
begin
P:=S^.link;
dispose(S);
S:=P;
end;
End;
IV- CÂY TỔNG QUÁT:
{------------- THUC THI CAY TQ BANG MANG -------------}
Uses CRT;
Const max=100;
Type

elementype= char;
Node=integer;
Tree= record
parent:array[1..max] of node;
labell:array[1..max] of elementype;
max_node:node;
end;
Var T: Tree;i:node;
{--------- TAO CAY RONG --------}
Procedure Makenull(Var T:Tree);
Begin
T.max_node:=0;
End;
{-------- KIEM TRA CAY RONG -------}
Function Empty(T:Tree):boolean;
Begin
empty:=T.max_node=0;
End;
{--------- TIM CHA CUA NUT N --------}
Function Parent(n: node; T: Tree):node;
Begin
if empty(T) then writeln('Cay rong!')
else
parent:=T.parent[n];
End;
{-------- XAC DINH NUT GOC CUA CAY ---------}
Function ROOT(T:Tree):node;
Begin

×