Giao Trinh Cau Truc Du Lieu
-
Upload
thanghenry -
Category
Documents
-
view
247 -
download
5
description
Transcript of Giao Trinh Cau Truc Du Lieu
Chng 1: DANH SCHTrong chng ny cc ni dung chnh c trnh by gm hai kiu danh sch: l danh sch c v danh sch lin kt. Trong phn trnh by ni dung ca mi kiu danh sch, s bao gm: nh ngha danh sch, khai bo cu trc danh sch, cc th tc trn danh sch. Cui chng l phn bi thc hnh.I. DANH SCH C1. nh nghaDanh sch c l mt danh sch m cc phn t ca n cng kiu d liu, v c cp pht lin tc trong b nh.2. Khai bo cu trc# define max 100int a[max];int n; //Tng s phn t hin c trong danh sch 3. Cc th tc trn danh scha. Nhp n phn t vo danh schvoid input(int a[], int n) { for (int i=0; ilink;Bc 3: Gn a ch b nh (p) ca phn t va cp pht cho vng link ca phn t cui danh sch.
q->link=p;Th tc thm mt phn t vo cui danh sch:void insert_last(int x) {node *p;p = new node;p->info=x;p->link=NULL;if(first==NULL) first=p;else {node *q=first;while(q->link!=NULL)q=q->link;q->link=p;}}f. Xa phn t u danh schBc 1: . Gn gi tr a ch b nh ca phn t u danh sch cho bin p.
node *p=first;. Gn a ch b nh ca phn t th 2 trong danh sch (nu c) cho bin first.
first=first->link; //hoc first = p->linkBc 2: Thu hi vng nh phn t u danh sch
delete p;Th tc xa phn t u danh schvoid delete_first() {if(first!=NULL) {node *p=first;first=first->link;delete p; } }
g. Xa phn t cui danh schBc 1: Tm a ch b nh ca phn t cui danh sch (p), v phn t p cui danh sch (q) (nu c)
node *p,*q;p=first;if(p!=NULL) while(p->link!=NULL) {q=p;p=p->link; }Bc 2: . Gn gi tr NULL cho vng link ca phn t p cui (c a ch b nh q). Thu hi vng nh ca phn t cui (c a ch b nh p)
q->link=NULL; delete p;Th tc xa phn t cui danh sch
void delete_last() {if(first!=NULL) {node *p,*q;p=first;while(p->link!=NULL) {q=p;p=p->link; }if(p!=first) //p khng l phn t u danh sch, tn ti phn t q. q->link=NULL;else first=NULL;delete p; } }
III. DANH SCH LIN KT C BIT1. Danh sch lin kt vnga. nh ngha: Danh sch lin kt vng l mt danh sch lin kt, m phn t cui danh sch tr vo phn t u danh sch (phn link ca phn t cui lu tr a ch phn t u danh sch)
b. Khai bo cu trcstruct node{ int info; node *link;}
node *first;
2. Danh sch lin kt kpa. nh ngha: Danh sch lin kt kp l mt danh sch lin kt m mi phn t trong danh sch bao gm vng cha thng tin (info) v hai vng lin kt, mt vng lin kt (next) tr n phn t ng lin sau n; mt vng lin kt (previous) tr n phn t ng lin trc n.
b. Khai bo cu trc
struct node { int info; node *previous, *next;}
node *first, *last;
III. DANH SCH HN CHA. Ngn xp (Stack)1. nh ngha: Ngn xp l mt danh sch cc phn t c qun l theo th t nh sau: Phn t c thm vo ngn xp trc, s c xa (ly ra) khi ngn xp sau (First In Last Out FILO) 2. Ngn xp danh sch c: a. Khai bo cu trc: #definemax 100int a[max];int sp; // nh stack
b. Khi to ngn xp rng:void init(int a[], int &sp) { sp=-1; } c. Thm phn t vo ngn xpvoid push(int a[], int &sp, int x) { if(spinfo=x;
Bc 3: Gn gi tr a ch b nh ca phn t u danh sch cho vng link ca phn t va cp pht.
p->link=sp;Bc 4: Gn gi tr a ch ca phn t va cp pht (p) cho bin sp
sp=p;
Th tc thm phn t vo ngn xp:void push(int x) { node *p = new node; p->info=x;p->link=sp;sp=p; }
d. Ly/xa mt phn t t ngn xpBc 1: .Gn gi tr a ch b nh ca phn t u danh sch cho bin p.Gn a ch b nh ca phn t th 2 trong danh sch (nu c) cho bin sp.Gn gi tr info ca phn t u cho bin x (gi tr bin x s c truyn ra ngoi)
node *p=sp;sp=p->link;x=p->info;
Bc 2: Thu hi vng nh phn t u danh sch
delete p;
Th tc xa/ly mt phn t t ngn xp:
void pop(int &x) {if(sp!=NULL) {node *p=sp;sp=p->link;x=p->info;delete p;} }
e. Xt ngn xp rngint isEmpty(){ if(sp==NULL) return 1; return 0;}
B. Hng i (queue)1. nh ngha: Hng i (Queue) l danh sch cha cc phn t c qun l theo th t sau: Phn t c thm vo trc s c ly ra (xa) trc (First In First Out - FIFO)2. Hng i danh sch c:a. Khai bo cu trc #definemax 100int a[max];int front, rear; //front: v tr ly ra //rear: vi tr thm vo
b. Khai bo hng i rngvoid init(int a[], int &front, int &rear) { front = -1; rear = -1; }
c. X l hng i b trn c.1 Dng phng php tnh tin c.1.1 Thm mt phn t vo hng iint insert_queue(int a[], int &front, int &rear, int x) { if(rear - front == max-1 ) //Hng i y return 0; else{ if (front == -1) //Hng i rng front=0; // rear=-1; if(rear == max-1) // Hng b trn. { for(int i=front;irear) //trng hp hng i c 1 phn t, sau khi xa hng rng { front=-1; rear=-1; } return 1; }}
c.2 X l hng i b trn dng phng php vngc.2.1 Thm phn t vo hng i
Hnh: Qu trnh vng gi tr rear khi hng b trn, v thm phn t mi
Hnh: Hai trng hp b y (dng phng php vng khi hng b trn)
int insert_queue(int a[], int &front, int &rear, int x){ if((rear-front==max-1 ) || (rear-front==-1) ) //hng b y return 0; else { if (front==-1) //hng rng front=0; // rear=-1; if(rear==max-1) rear =-1; // Hng b trn. Vng gi tr rear xung -1 a[++rear]=x; //Tng rear ln 1 gi tr, v thm phn t mi ti rear return 1; } }c.2.2 Ly/xa mt phn t t hng i
Delete_queue(int &x) { if(front!=-1) { x=a[front]; if(front==rear) { front=-1; rear=-1; } else { front++; if(front>max-1) front =0; } }3. Hng i danh sch lin kt a. Khai bo cu trc struct node {int info;node *link; }; node *front, *rear;//front v tri xa; rear v tr thm
b. Khi to hng i rngvoid init(){ front = NULL; rear = NULL; }
c. Thm phn t vo hng iQu trnh thc hin vic thm mt phn t vo hng i sch lin kt, c thc hin ging nh thm mt phn t vo cui danh sch lin kt. Cc bc c thc hin tun t:Bc 1: Cp pht phn t mi (c a ch p)
node *p = new node; Bc 2: Gn gi tr NULL cho vng link ca phn t mi va cp pht.
p->link=NULL;Bc 3: Gn gi tr bin x cho vng info ca phn t va cp pht.
p->info=x;
Bc 4: Gn gi tr a ch ca phn t va cp pht (p) cho vng link ca phn t cui (rear), nu danh sch khc rng.
rear->link=p;Bc 5: Gn a ch ca phn t va cp pht (p) cho bin rear
rear=p;
void push(int x) { node *p;p = new Node; p->info=x;p->link=NULL;if (rear==NULL) front= p;elserear->link=p;rear=p; } d.Xa/ly mt phn t t hng iBc 1: .Gn gi tr a ch b nh ca phn t u danh sch cho bin p.Gn a ch b nh ca phn t th 2 trong danh sch (nu c) cho bin sp.Gn gi tr info ca phn t u cho bin x (gi tr bin x s c truyn ra ngoi)
node *p=sp;front=p->link; //hoc front=front->linkx=p->info;
Bc 2: Thu hi vng nh phn t u danh sch
delete p;
Th tc xa/ly mt phn t t ngn xp:
void pop(int &x) {if(front!=NULL) {node *p=sp;front=p->link;x=p->info; if(front==NULL) //trc khi xa hng c 1 phn t, sau khi xa hng rng rear=NULL;
delete p;} }e. Xt hng i rngint isEmpty(){ if(front==NULL) return 1; return 0;}
IV. DANH SCH LIN KT HN CH1. Danh sch lin kt vnga. nh ngha: Danh sch lin kt vng l danh sch lin kt n, m con tr link ca phn t cui tr vo phn t u ca danh sch (thnh phn link ca phn t cui danh sch, lu tr gi tr l a ch ca phn t u ca danh sch)
Danh sch lin kt vng thng c s dng trong trng hp cn qun l mt danh sch m trong qu trnh lu tr, thng xuyn cn duyt vng t phn t cui quay v phn t u.b. Khai bo cu trcstruct node{ int info; node *link;} node *first;.
b. Duyt danh schvoid process_list() { if(frist!=NULL) { node *p; p=first; do {cout