Professional Documents
Culture Documents
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
di ca danh sch: s phn t ca danh sch Cc phn t trong danh sch c th t tuyn tnh theo v tr xut hin. Ta ni ai ng trc ai+1 (i=1..n-1)
4
PREVIOUS(P,L)
FIRST(L)
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;
11
XEN PHN T X VO V TR P (1) Xen phn t x=k vo v tr p=3 trong danh sch L (ch s 2 trong mng)
12
13
14
15
16
17
tm phn t x trong danh sch ta tin hnh tm t u danh sch cho n khi tm gp Nu gp th v tr ca phn t u tin tm thy c tr v Nu khng tm gp th tr v v tr Last+1(EndList)
18
TM KIM PHN T X TRONG DS(1) Position Locate(ElementType X, List L) { Position P; int Found = 0; P = First(L); //v tr phn t u tin /*trong khi cha tm thy v cha kt thc danh sch th xt phn t k tip*/ while ((P != EndList(L)) && (Found == 0)) if (Retrieve(P,L) == X) Found = 1; else P = Next(P, L); return P; } 19
20
21
22
BI TP
Vn dng cc php ton trn danh sch c vit chng trnh nhp vo mt danh sch cc s nguyn v hin th danh sch va nhp ra mn hnh. Thm phn t c ni dung x vo danh sch ti v tr p (trong x v p c nhp t bn phm). Xa phn t u tin c ni dung x (nhp t bn phm) ra khi danh sch.
23
24
25
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; //Cha ni dung ca phn t //con tr ch n phn t k tip //Kiu v tr
26
=>Cp pht vng nh cho Header v cho trng Next ca Header tr n NULL
void MakeNull_List(List *Header) { (*Header)=(NodeType)malloc(sizeof(struct Node)); (*Header)->Next= NULL;
}
27
28
void Insert_List(ElementType X, Position P, List *L) { Position T; T=(NodeType)malloc(sizeof(struct Node)); T->Element=X; T->Next=P->Next; P->Next=T; }
29
=>Mun xa phn t v tr p trong danh sch ta cn ni kt li cc con tr bng cch cho p tr ti phn t ng sau phn t th p void Delete_List(Position P, List *L) { Position Temp; if (P->Next!=NULL) {
/*gi cha phn t b xo thu hi vng nh*/
Temp=P->Next;
/*ni kt con tr tr ti phn t ke tiep*/
30
TM KIM MT PHN T TRONG DANH SCH tm phn t x trong danh sch ta tm t u danh sch:
Nu tm gp th v tr phn t u tin bng x c tr v (p) v ta c p->next->element = x Nu khng gp th v tr ENDLIST c tr v Position Locate(ElementType X, List L) { Position P; int Found = 0; P = L; while ((P->Next != NULL) && (Found == 0)) if (P->Next->Element == X) Found = 1; else P = P->Next; return P; }
31
C NI DUNG PHN T
ElementType Retrieve(Position P, List L) { if (P->Next!=NULL) return P->Next->Element; }
32
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; }
33
34
BI TP
Vn dng cc php ton trn danh sch lin kt vit chng trnh:
Nhp vo mt danh sch cc s nguyn Hin th danh sch va nhp ra mn hnh Thm phn t c ni dung x vo danh sch ti v tr p (trong x v p c nhp t bn phm) Xa phn t u tin c ni dung x (nhp t bn phm) ra khi danh sch
35
36
38
39
} }
40
void Delete_List(int p, int *L) { if (p==-1) {//Neu la o dau tien if (!Move(L,&Available)) printf("Loi trong khi xoa"); } else if (!Move(&Space[p].Next,&Available)) printf("Loi trong khi xoa"); }
41
NGN XP (STACK)
NH NGHA CC PHP TON CI T
42
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)
43
CC PHP TON
Php ton
MAKENULL(S) EMPTY(S) FULL(S) PUSH(X,S) POP(S) TOP(S)
Din gii
To mt ngn xp rng (S) Kim tra xem ngn xp S c rng hay khng Kim tra xem ngn xp S c y hay khng Thm phn t X vo nh ngn xp S. Tng ng: INSERT(X,FIRST(S),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)
44
Khai bo
typedef List Stack;
To ngn xp rng
void MakeNull_Stack(Stack *S) { MakeNull_List(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
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
Vit chng trnh nhp vo 1 s nguyn n Chuyn s nguyn n sang s nh phn (c s dng cc php ton trn ngn xp)
54
DNG MNG DI CHUYN TNH TIN DNG MNG VNG DNG DSLK
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
MAKENULL_QUEUE(Q) EMPTY_QUEUE(Q) FULL_QUEUE(Q) ENQUEUE(X,Q) DEQUEUE(Q) FRONT(Q)
Din gii
To mt hng i rng (Q) Kim tra xem hng i Q c rng khng
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
void DeQueue(Queue *Q) { if (!Empty_Queue(*Q)) { Q->Front=Q->Front+1; if (Q->Front>Q->Rear) MakeNull_Queue(Q); } else printf("Loi: Hang rong!"); }
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-1 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
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
xa 1 phn t khi hng ta ch cn cho Front tr ti v tr k tip ca n trong danh sch void DeQueue(Queue *Q) { if (!Empty_Queue(Q)) { Position Temp; Temp=Q->Front; Q->Front=Q->Front->Next; free(Temp); } else printf(Loi: Hang rong); }
84
Ngn xp Hng i
85
Trong mt phn t ca danh sch, ta dng hai con tr Next v Previous ch n phn t ng sau v phn t ng trc phn t ang xt
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;
86
87
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; }
88
p->Previous
p->Next
p->Previous
p->Next
89
90
void Delete_List (Position p, DoubleList *DL) { if (*DL == NULL) printf(Danh sach rong); else { if (p==*DL) (*DL)=(*DL)->Next; //Xa phn t u else p->Previous->Next=p->Next; if (p->Next!=NULL) p->Next->Previous=p->Previous; free(p); } }
91