You are on page 1of 15

GII THIU MN HC

Tm tt ni dung: Bi 1: Danh sch lin kt Bi 2: Mt s phng php sp xp Bi 3: Hm bm Bi 4: Cy, cy nh phn, cy nh phn tm kim, cy cn bng Bi 5: Cy en Bi 6: B-cy, cy 2-3-4 Bi 7: Cc ng nh thc Bi 8: Cc ng Fibonaci Bi 9: Cc tp ri nhau Bi 10: Cc thut ton so khp chui Ti liu tham kho: 1) Data Structures, Algorithms, and Object-Oriented Programming. NXB McGraw Hill; Tc gi Gregory Heilleman -1996 2) Advanced Data Structures. NXB McGraw Hill - 1990; Tc gi Thomas H. C., Charles E.L., and Ronald L.R. 3) Gio trnh thut ton. NXB Thng k 2002. Nhm Ngc Anh Th dch 4) Algorithms and Data Structures in C++; Tc gi Alan Parker

Bi 1: Danh sch lin kt


I) Danh sch lin kt n 1. T chc danh sch n Danh sch lin kt bao gm cc phn t. Mi phn t ca danh sch n l mt cu trc cha 2 thng tin : - Thnh phn d liu: lu tr cc thng tin v bn thn phn t . - Thnh phn mi lin kt: lu tr a ch ca phn t k tip trong danh sch, hoc lu tr gi tr NULL nu l phn t cui danh sch. Ta c nh ngha tng qut typedef struct tagNode { Data Info; // Data l kiu nh ngha trc Struct tagNode* pNext; // con tr ch n cu trc node }NODE; V d : nh ngha danh sch n lu tr h s sinh vin: typedef struct SinhVien //Data { char Ten[30]; int MaSV; }SV; typedef struct SinhvienNode 2

SV Info; struct SinhvienNode* pNext; }SVNode; Cc phn t trong danh sch s c cp pht ng. Bit phn t u tin ta s truy xut c cc phn t tip theo. Thng s dng con tr Head lu tr a ch u tin ca danh sch. Ta c khai bo: NODE *pHead; qun l a ch cui cng trong danh sch ta dng con tr TAIL. Khai bo nh sau: NODE VD: *pTail;

II. Cc thao tc c bn trn danh sch n Gi s c cc nh ngha: typedef struct tagNode { Data Info; struct tagNode* pNext; }NODE; typedef struct tagList { 3

NODE* pHead; NODE* pTail; }LIST; NODE *new_ele // gi a ch ca mt phn t mi c to Data x; // lu thng tin v mt phn t s c to LIST lst; // lu tr a ch u, a ch cui ca danh sch lin kt 1.Chn mt phn t vo danh sch: C 3 loi thao tc chn new_ele vo xu: Cch 1: Chn vo u danh sch

Thut ton : Bt u: Nu Danh sch rng Th B11 : pHead = new_ele; B12 : pTail = pHead; Ngc li B21 : new_ele ->pNext = pHead; B22 : pHead = new_ele ; Ci t: Cch 2: Chn vo cui danh sch 4

Thut ton : Bt u : Nu Danh sch rng th B11 : pHead = new_elelment; B12 : pTail = pHead; Ngc li B21 : pTail ->pNext = new_ele; B22 : pTail = new_ele ; Cch 3 : Chn vo danh sch sau mt phn t q

Thut ton : Bt u : Nu ( q != NULL) th B1 : new_ele -> pNext = q->pNext; B2 : q->pNext = new_ele ; Ci t : 2. Tm mt phn t trong danh sch n Thut ton :

Bc 1: p = pHead; //Cho p tr n phn t u danh sch Bc 2: Trong khi (p != NULL) v (p->Info != k ) thc hin: p:=p->pNext;// Cho p tr ti phn t k Bc 3: Nu p != NULL th p tr ti phn t cn tm Ngc li: khng c phn t cn tm. Ci t :

3. Hy mt phn t khi danh sch Hy phn t u xu:

Thut ton : Bt u: Nu (pHead != NULL) th B1: p = pHead; // p l phn t cn hy B2: B21 : pHead = pHead->pNext; // tch p ra khi xu B22 : free(p); // Hy bin ng do p tr n B3: Nu pHead=NULL th pTail = NULL; //Xu rng

Hy mt phn t ng sau phn t q

Thut ton : Bt u: Nu (q!= NULL) th B1: p = q->Next; // p l phn t cn hy B2: Nu (p != NULL) th // q khng phi l cui xu B21 : q->Next = p->Next; // tch p ra khi xu B22 : free(p); // Hy bin ng do p tr n

Hy 1 phn t c kho k Thut ton : Bc 1: Tm phn t p c kha k v phn t q ng trc n Bc 2: Nu (p!= NULL) th // tm thy k Hy p ra khi xu tng t hy phn t sau q; Ngc li Bo khng c k; 4. Thm cc nt trn danh sch - m cc phn t ca danh sch, - Tm tt c cc phn t tho iu kin, - Hu ton b danh sch (v gii phng b nh) Thut ton x l cc nt trn danh sch: Bc 1: 7

p = pHead; //Cho p tr n phn t u danh sch Bc 2: Trong khi (Danh sch cha ht) thc hin B21 : X l phn t p; B22 : p:=p->pNext; // Cho p tr ti phn t k Thut ton hy ton b danh sch: Bc 1: Trong khi (Danh sch cha ht) thc hin B11: p = pHead; pHead:=pHead->pNext; // Cho p tr ti phn t k B12: Hy p; Bc 2: Tail = NULL; //Bo m tnh nht qun khi xu rng

II. Danh sch lin kt kp L danh sch m mi phn t trong danh sch c kt ni vi 1 phn t ng trc v 1 phn t ng sau n.

Khai bo: typedef struct tagDNode { Data Info; struct tagDNode* pPre; // tr n phn t ng trc struct tagDNode* pNext; // tr n phn t ng sau }DNODE; typedef struct tagDList { DNODE* pHead; // tr n phn t u danh sch DNODE* pTail; // tr n phn t cui danh sch }DLIST; 1. Chn mt phn t vo danh sch: C 4 loi thao tc chn new_ele vo danh sch: Cch 1: Chn vo u danh sch

Ci t : Cch 2: Chn vo cui danh sch

Ci t : Cch 3 : Chn vo danh sch sau mt phn t q

Ci t : Cch 4 : Chn vo danh sch trc mt phn t q

Ci t : 2. Hy mt phn t khi danh sch - Hy phn t u xu - Hy phn t cui xu - Hy mt phn t ng sau phn t q - Hy mt phn t ng trc phn t q - Hy 1 phn t c kho k 3. X l cc nt trn danh sch: - Tm nt c kha k - Hin th gi tr kha ca cc nt trong danh sch - Hy tan b danh sch 10

III. Ngn xp (stack) Stack cha cc i tng lm vic theo c ch LIFO (Last In First Out) ngha l vic thm mt i tng vo stack hoc ly mt i tng ra khi stack c thc hin theo c ch "Vo sau ra trc". Thao tc thm 1 i tng vo stack thng c gi l "Push". Thao tc ly 1 i tng ra khi stack gi l "Pop". Trong tin hc, CTDL stack c nhiu ng dng: kh qui, lu vt cc qu trnh tm kim theo chiu su v quay lui, ng dng trong cc bi ton tnh ton biu thc, .

Mt hnh nh mt stack Cc thao tc Push(o): Thm i tng o vo u stack Pop(): Ly i tng nh stack ra khi stack v tr v gi tr ca n. Nu stack rng th li s xy ra. isEmpty(): Kim tra xem stack c rng khng. Top(): Tr v gi tr ca phn t nm u stack m khng hy n khi stack. Nu stack rng th li s xy ra.

11

Biu din Stack dng mng Ta c th to mt stack bng cch khai bo mt mng 1 chiu vi kch thc ti a l N (v d, N c th bng 1000). VD:

To stack S v qun l nh stack bng bin t ch s ca phn t trn cng trong stack: Data S [N]; int t; Biu din Stack dng danh sch lin kt n VD: LIST S; Cc thao tc: To Stack S rng (S.pHead=l.pTail= NULL s to ra mt Stack S rng) Kim tra stack rng: int IsEmpty(LIST &S) Thm mt phn t p vo stack S:void Push(LIST &S, Data x) Trch hu phn t nh stack S: Data Pop(LIST &S) Xem thng tin ca phn t nh stack S: Data Top(LIST &S) ng dng ca Stack: Bin i biu thc: Dng trung t a+b a*b

Dng hu t ab+ ab*

12

a*(b+c)-d/e Tnh gi tr ca biu thc dng hu t.

abc+*de-/

IV. Hng i ( Queue) Hng i cha cc i tng lm vic theo c ch FIFO (First In First Out) ngha l vic thm mt i tng vo hng i hoc ly mt i tng ra khi hng i c thc hin theo c ch "Vo trc ra trc".

Hng i Cc thao tc: EnQueue(o): Thm i tng o vo cui hng i DeQueue(): Ly i tng u queue ra khi hng i v tr v gi tr ca n. Nu hng i rng th li s xy ra. IsEmpty(): Kim tra xem hng i c rng khng. Front(): Tr v gi tr ca phn t nm u hng i m khng hy n. Nu hng i rng th li s xy ra. Biu din dng mng: Ta c th to mt hng i bng cch s dng mt mng 1 chiu vi kch thc ti a l N (v d, N c th bng 1000) theo kiu xoay vng (coi phn t an-1 k vi phn t a0). Ta k hiu n l NULLDATA nh nhng phn trc. Trng thi hng i lc bnh thng: 13

Q bin hng i, f qun l u hng i, r qun l phn t cui hng i. Trng thi hng i lc xoay vng (mng rng gia):

Cu hi t ra: khi gi tr f=r cho ta iu g ? Ta thy rng, lc ny hng i ch c th mt trong hai trng thi l rng hoc y. Hng i c th c khai bo c th nh sau: Data Q[N] ; int f, r; Dng danh sch lin kt Ta c th to mt hng i bng cch s dng mt danh sch lin kt n. LIST Q;

Cc thao tc: To hng i rng: Lnh Q.pHead = Q.pTail = NULL s to ra mt hng i rng. -Kim tra hng i rng : int IsEmpty(LIST Q) - Thm mt phn t p vo cui hng i : void EnQueue(LIST Q, Data x) 14

- Trch/Hy phn t u hng i: Data DeQueue(LIST Q) - Xem thng tin ca phn t u hng i : Data Front(LIST Q) ng dng ca hng i - Bi ton qun l tn kho - Bi ton x l cc lnh trong my tnh in t. Bi tp:

15

You might also like