Professional Documents
Culture Documents
Tuyentinh
Tuyentinh
Thanh Ngh
dtnghi@cit.ctu.edu.vn
NI DUNG
DANH SCH
NGN XP
HNG I
DANH SCH
KHI NIM V DANH SCH
CC PHP TON
CI T
Cng dng
Tr v v tr sau phn t cui trong ds L
MAKENULL_LIST(L)
EMPTY_LIST(L)
FULL_LIST(L)
INSERT_LIST(X,P,L)
DELETE_LIST(P,L)
LOCATE_LIST(X,L)
NEXT(P,L)
PREVIOUS(P,L)
FIRST(L)
Tr v kt qu l v tr ca phn t
u danh sch, ENDLIST(L) nu danh
sch rng
PRINT_LIST(L)
M HNH
1
2
V tr
KHAI BO
#define MaxLength // di ti a ds
typedef ... ElementType; //kiu ca pht
typedef int Position; //kiu v tr
typedef struct {
//mng cha cc phn t ca danh sch
ElementType Elements[MaxLength];
Position Last; //gi di danh sch
} List;
List L;
13
Nu mng y th thng bo li
Ngc li, nu v tr p khng hp l th bo
li
Ngc li:
Di cc phn t t v tr p n cui danh sch
ra sau mt v tr
a phn t mi x vo ti v tr p
di danh sch tng 1
14
15
16
17
18
21
22
23
BI TP
25
26
Khai bo
typedef ... ElementType; //kiu ca phn t trong danh sch
typedef struct Node* NodeType;
struct Node {
ElementType Element;
NodeType Next;
};
typedef NodeType Position;
typedef Position List;
27
28
29
30
Temp=P->Next;
/*ni kt con tr tr ti phn t ke tiep*/
P->Next=Temp->Next;
free(Temp); //thu hi vng nh
}
}
31
32
C NI DUNG PHN T
ElementType Retrieve(Position P, List L) {
if (P->Next!=NULL)
return P->Next->Element;
}
33
XC NH V TR PHN T
V tr phn t u tin
Position First(List L) {
return L;
}
V tr phn t k tip
Position Next(Position P, List L) {
return P->Next;
}
34
35
BI TP
Vn dng cc php ton trn danh sch lin kt vit
chng trnh:
36
Danh sch c
Danh sch lin kt
Bn nn chn pp ci t no cho ng dng ca mnh?
37
39
40
}
}
if (Move(&Available,&Space[P].Next))
// O nhan X la o tro boi Space[p].Next
Space[Space[P].Next].Elements=X;
else printf("Loi! Khong con vung nho trong");
41
42
NGN XP (STACK)
NH NGHA
CC PHP TON
CI T
43
NH NGHA
L mt dng danh sch c bit m vic thm vo
hay xa phn t ch thc hin ti mt u gi l nh
ca ngn xp
Cch lm vic theo dng FILO(First In Last Out) hay
LIFO (Last In First Out)
44
CC PHP TON
Php ton
Din gii
MAKENULL(S)
EMPTY(S)
FULL(S)
PUSH(X,S)
POP(S)
Xa phn t ti nh ngn xp S.
Tng ng: DELETE(FIRST(S),S)
Tr v phn t trn nh ngn xp S, tng
ng: RETRIEVE(FIRST(S),S)
TOP(S)
45
Khai bo
typedef List Stack;
To ngn xp rng
void MakeNull_Stack(Stack *S)
{ MakeNull_List(S);}
46
Khai bo
#define MaxLength // di ca mng
typedef ElementType;//kiu phn t ca ngn xp
typedef struct {
//Lu ni dung ca cc phn t
ElementType Elements[MaxLength];
int Top_idx; //gi v tr nh ngn xp
} Stack;
Stack S;
47
}
48
49
50
TR V PHN T U NGN XP
Gii thut :
Nu ngn xp rng th thng bo li
Ngc li, tr v gi tr c lu tr ti c ch s l Top_idx
ElementType Top(Stack S) {
if (!Empty_Stack(S))
return S.Elements[S.Top_idx];
else printf("Loi! Ngan xep rong");
}
51
XA PHN T TI NH NGN XP
Gii thut :
Nu ngn xp rng th thng bo li
Ngc li, tng Top_idx ln 1 n v
void Pop(Stack *S) {
if (!Empty_Stack(*S))
S->Top_idx=S->Top_idx+1;
else printf("Loi! Ngan xep rong!");
}
52
Gii thut :
Nu ngn xp y th thng bo li
Ngc li, gim Top_idx xung 1 n v ri a gi tr x vo
c ch s Top_idx
void Push(ElementType X, Stack *S) {
if (Full_Stack(*S))
printf("Loi! Ngan xep day!");
else{
S->Top_idx=S->Top_idx-1;
S->Elements[S->Top_idx]=X;
}
53
BI TP
54
HNG I (QUEUE)
NH NGHA
CC PHP TON
CI T HNG I
55
NH NGHA HNG I
L mt dng danh sch c bit, m php thm vo
ch thc hin 1 u, gi l cui hng(REAR), cn
php loi b th thc hin u kia ca danh sch,
gi l u hng(FRONT)
Cch lm vic theo dng FIFO (First In First Out)
56
CC PHP TON
Php ton
Din gii
MAKENULL_QUEUE(Q)
EMPTY_QUEUE(Q)
FULL_QUEUE(Q)
ENQUEUE(X,Q)
DEQUEUE(Q)
Xa phn t ti u hng i Q
FRONT(Q)
57
58
KHAI BO
#define MaxLength ...
//chiu di ti a
typedef ... ElementType; //Kiu d liu pht
typedef struct
{
ElementType Elements[MaxLength]; //ni dung
int Front, Rear; //ch s u v cui hng
} Queue;
Queue Q;
pht
59
60
61
62
TR V PHN T U HNG
63
=>Gii thut:
Nu hng Q rng th thng bo li
Ngc li, tng Front ln 1 n v
- Nu Front>Rear tc hng ch cn 1 phn t th khi to li
hng rng lun
64
65
66
67
=>Gii thut:
Nu hng y th thng bo li
Ngc li, nu hng trn th phi tnh tin
tt c phn t ln Front v tr
Tng Rear 1 n v v a gi tr x vo
c ch s Rear mi ny
68
69
M hnh
Khai bo
#define MaxLength ... //chiu di ti a ca mng
typedef ... ElementType; //Kiu d liu ca phn t
typedef struct {
ElementType Elements[MaxLength]; // phn t
int Front, Rear; //ch s u v ui hng
} Queue;
Queue Q;
70
71
int Empty_Queue(Queue Q) {
return Q.Front==-1;
}
72
73
LY GI TR PHN T U HNG
=>Gii thut
- Nu hng Q rng th thng bo li
- Ngc li, tr v gi tr c lu tr ti c ch
s l Front
ElementType Front(Queue Q) {
if (!Empty_Queue(Q))
return Q.Elements[Q.Front];
}
74
XA PHN T U HNG(1)
Cc trng hp c th:
75
XA PHN T U HNG(2)
Gii thut :
Nu hng Q rng th thng bo li
Ngc li:
Nu Front=Rear tc hng ch cn 1 phn t th khi to li
hng rng
Ngc li, thay i gi tr cho Front
void DeQueue(Queue *Q){
if (!Empty_Queue(*Q)){
if (Q->Front==Q->Rear) //Nu ch c 1 pht
MakeNull_Queue(Q);
else Q->Front=(Q->Front+1) % MaxLength;
}
else printf("Loi: Hang rong!");
}
76
77
Gii thut :
Nu hng y th thng bo li
Ngc li, thay i gi tr Rear v a gi tr x
vo c ch s Rear mi ny
void EnQueue(ElementType X,Queue *Q) {
if (!Full_Queue(*Q)){
if (Empty_Queue(*Q))
Q->Front=0;
Q->Rear=(Q->Rear+1) % MaxLength;
Q->Elements[Q->Rear]=X;
}
else printf("Loi: Hang day!");
}
78
BI TP
Vit chng trnh nhp vo mt ngn xp
cha cc s nguyn
Sau s dng mt hng i o ngc
th t ca cc phn t trong ngn xp
79
Khai bo
typedef ... ElementType; //kiu phn t ca hng
typedef struct Node* NodeType;
struct Node {
ElementType Element;
NodeType Next; //Con tr ch k tip
};
typedef NodeType Position;
typedef struct{
Position Front, Rear; //2 con tr u, cui hng i
} Queue;
Queue Q;
80
81
82
=>Gii thut:
Thm 1 phn t vo hng ta thm vo sau Rear 1 mi
Cho Rear tr n phn t mi ny
Cho trng next ca mi ny tr ti NULL
void EnQueue(ElementType X, Queue *Q) {
Q->Rear->Next=(NodeType)malloc(sizeof(struct Node));
Q->Rear=Q->Rear->Next;
Q->Rear->Element=X; //Dat gia tri vao Rear
Q->Rear->Next=NULL;
}
83
LY GI TR PHN T U HNG
=>Gii thut
- Nu hng Q rng th thng bo li
- Ngc li, tr v gi tr c lu tr ti sau Front
ElementType Front(Queue Q) {
if (!EmptyQueue(Q))
return Q.Front->Next->Element;
}
84
85
Ngn xp
Hng i
86
Khai bo
typedef ... ElementType; //kiu ni dung ca phn t
typedef struct Node* NodeType;
struct Node {
ElementType Element; //lu tr ni dung phn t
NodeType Prev; //Con tr trc
NodeType Next; //Con tr sau
};
typedef NodeType Position;
typedef Position DoubleList;
87
88
p
=>V tr ca mt phn t l con tr tr vo ngay chnh phn t
ElementType Retrieve (Position P, DoubleList DL) {
return P->Element;
}
89
p->Previous
p->Next
p->Previous
p->Next
90
91
92