Giao Trinh Cau Truc Du Lieu

61
Chương 1: DANH SÁCH Trong chương này các nội dung chính được trình bày gồm hai kiểu danh sách: Đó là danh sách đặc và danh sách liên kết. Trong phần trình bày nội dung của mỗi kiểu danh sách, sẽ bao gồm: Định nghĩa danh sách, khai báo cấu trúc danh sách, các thủ tục trên danh sách. Cuối chương là phần bài thực hành. I. DANH SÁCH ĐẶC 1. Định nghĩa Danh sách đặc là một danh sách mà các phần tử của nó cùng kiểu dữ liệu, và được cấp phát liên tục trong bộ nhớ. 2. Khai báo cấu trúc # define max 100 int a[max]; int n; //Tổng số phần tử hiện có trong danh sách 3. Các thủ tục trên danh sách a. Nhập n phần tử vào danh sách void input(int a[], int n) { for (int i=0; i<n; i++) { cout<<‘a[‘<<i<<‘]=‘; cin>>a[i]; } } b. Xuất danh sách void output(int a[], int n) { for(int i=0; i<n; i++) cout<<a[i]; } c. Tìm một phần tử trong danh sách int search(int a[], int n, int x)

description

Chương 1: DANH SÁCHTrong chương này các nội dung chính được trình bày gồm hai kiểu danh sách: Đó là danh sách đặc và danh sách liên kết. Trong phần trình bày nội dung của mỗi kiểu danh sách, sẽ bao gồm: Định nghĩa danh sách, khai báo cấu trúc danh sách, các thủ tục trên danh sách. Cuối chương là phần bài thực hành.I. DANH SÁCH ĐẶC1. Định nghĩaDanh sách đặc là một danh sách mà các phần tử của nó cùng kiểu dữ liệu, và được cấp phát liên tục trong bộ nhớ.2. Khai báo cấu trúc# define max 100int a[max];int n; //Tổng số phần tử hiện có trong danh sách 3. Các thủ tục trên danh sácha. Nhập n phần tử vào danh sáchvoid input(int a[], int n) { for (int i=0; i { cout cin>>a[i]; } }b. Xuất danh sáchvoid output(int a[], int n) { for(int i=0; i cout }c. Tìm một phần tử trong danh sáchint search(int a[], int n, int x) { int i=0; while ((i if(i==n) return -1; //tìm thấy x trong danh sách, return -1 else return i; // tìm thấy x trong danh sách, return i là vị trí tìm thấy x }

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