1. Trang chủ
  2. » Giáo án - Bài giảng

Cấu trúc dữ liệu và giải thuật

96 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 96
Dung lượng 2,58 MB

Nội dung

C Biên www.hutech.edu.vn tailieuhoctap@hutech.edu.vn I I DANH HÌNH IV V BÀI 1: 1.1 VAI TR C AC TRÚC D 1.2 CÁC TIÊU 1.3 GIÁ HOÁ 1.4 TRONG TRÚC N TIN H C 1.5 1.6 L CÓ TRÚC PH C T P C A GI I THU T 1.6.2 Cách TÓM CÂU ÔN BÀI 2: T M KI M 10 2.1 GI I THI U V B I TO N T M KI M 10 2.2 T M KI M TUY N T NH 11 2.3 TÌM PHÂN 12 TÓM 14 CÂU ÔN 14 BÀI 3: S P X P 15 3.1 GI I THI U V B I TO N S P X P 15 15 15 3.2 CÁC 16 16 18 19 Insertion Sort 21 22 3.2.6 Quick Sort 24 Merge Sort 26 27 TÓM 30 CÂU ÔN 30 BÀI 4: DANH SÁCH 31 4.1 KH I NI M 31 II 4.2 C U TR C DANH S CH 31 4.3 PH P C I T DANH S CH 34 4.4 HI N TH C DANH S CH K 35 4.4.1 35 4.4.2 Các t c v .36 4.5 HI N TH C DANH S CH LIÊN K T 4.5.1 40 40 40 4.5.3 41 4.6 C C LO I DANH S CH LIÊN K T KH C 45 45 45 TÓM 46 CÂU ÔN 46 C STACK 48 5.1 STACK 48 48 5.1 49 .49 5.2 STACK 50 50 51 5.3 M T S B I TO N NG D NG STACK 52 TÓM 53 CÂU ÔN 53 BÀI 6: C 54 6.1 QUEUE 54 6.2 QUEUE 56 6.2.1 Dùng 56 .58 6.3 H NG IC TIÊN 58 TÓM 59 CÂU ÔN 59 C CÂY - 7.1 TRÚC CÂY 7.2 CÂY 7.3 MÔ 60 QUÁT 60 PHÂN 61 CÂY PHÂN 63 7.3.1 63 63 7.3.3 Ba p 7.4 65 CÂY PHÂN QUÁT 66 III 7.4.1 66 7.4.2 67 TÓM 71 CÂU ÔN 71 - BST 72 8.1 72 8.2 CÀI CÂY PHÂN TÌM 73 TÓM T T 77 CÂU ÔN 77 - AVL 78 9.1 CÂY 9.2 CÁC TÁC PHÂN TÌM CÂN 78 XOAY 79 80 81 9.3 THÊM NÚT VÀO CÂY AVL 82 9.4 CÀI CÂY AVL 84 84 85 TÓM 87 CÂU ÔN TÀI THAM 87 88 IV Hình 3.1 27 34 35 Hình 4.3 Thêm n t 18 v o v tr danh s ch 37 Hình 4.4 X a n t 15 v tr danh s ch 38 Hình 4.5 Danh s ch liên k 40 Hình 4.6 Danh s ch liên k t v ng 45 Hình 4.7 M t n t c a danh s ch liên k t k p 45 Hình 4.8 45 Hình 5.1: Stack v thao t c push, pop n 48 54 sert remove Queue 55 Hình 6.3 C t Queue b ng danh s ch liên k t 58 Hình 7.1 60 Hình 7.2 62 Hình 7.3 62 Hình 7.4 63 Hình 7.5 66 Hình 8.1 72 Hình 8.2 vào BST 74 Hình 8.3 Xóa nút BST 75 Hình 8.4 75 Hình 8.5 Xóa nút có hai BST 75 Hình 9.1 79 Hình 9.2 80 Hình 9.3 80 Hình 9.4 81 Hình 9.5 81 Hình 9.6 83 Hình 9.7 83 Hình 9.8 Xoay kép 84 V Bài Bài Bài Bài Bài DANH SÁCH Bài tack Bài VI Bài Bài - BST Bài - AVL này, 5 liên qua BÀI 1: BÀI 1: - 1.1 VAI TR C A C N TIN H C Th c hi n m D án tin h c chuy n toán th c t quy t máy tính M t tốn th c t yêu c u x h c ph - T L b t k thành tốn có th u bao g lý nh ng d li u th c t ng, ng nh ng quan h hình tin h c c a toán, c n ph i t ch c xây d ng c u trúc thích h p nh t cho v a có th ph n ánh xác d x li u : ng th c t : Các thành ph n d ng ch gi i xây d ng m t mơ hình tin c tốn th c t c n tr ng hai v ch c bi u di TRONG lý Công vi li u th c t này, v a có th d dàng c g i xây d ng c u trúc d li u cho toán - Xây d ng thao tác x gi i thu cho k t qu mong mu lý d li u: T nh ng yêu c u x nh trình t lý th c t , c n tìm thao tác máy tính ph i thi hành c xây d ng gi i thu t cho toán BÀI 1: Tuy nhiên, gi i quy t m ng ch tr t ch c d n vi c xây d ng gi i thu li u, d hi n gi i thu li u ch s ng thông tin c n thi li y m li u có m i quan h ch t ch v V i m t c u trúc d li án tin h c, gi i thu t c u trúc d li u + Gi i thu n, s có nh ng gi i thu li n n ph i hi u rõ nh ng thao tác ng gi i thu nhiên m t c u trúc không phù h phát huy tác d ng t nhanh v a ti t ki m v hi u i thu 1.2 C : P : ng, phù h p Khi tránh vi c x li u t t s giúp gi i thu t x lý t nhanh th c c th hi n qua công th c: C u trúc d ng ép, thi u t ng x c gi i thu t phù h p c n ph i bi li u ch n l a c u trúc d c u trúc d m quan tr ng c a vi c li u toán Gi i thu t ph n ánh phép x lý c a gi i thu t l i d lo i d ng có khuynh lý a, m t c u trúc d ng 74 BÀI 8: - BST Hình 8.2 void Insert(NODEPTR &proot, int x) { if (isEmpty(proot) proot = CreateNode(x); else if (x==proot->info) return; if (xinfo) Insert(proot->left, x); else Insert(proot->right, x); } BÀI 8: - Hình 8.3 Xóa nút BST - Hình 8.4 - nút p Hình 8.5 Xóa nút có hai BST - BST 75 76 BÀI 8: - BST int Remove(NODEPTR &proot, int x) { if ( proot == NULL) return FALSE; if (proot->info >x) //tìm xóa bên trái return Remove(proot->left, x); if (proot->info right, x); ->info==x) Node* p, f, rp; p = proot; if ( proot->left == NULL) //có proot = proot->right; else if (proot->right == NULL) //có proot = proot->left; else { f = p; rp = p->right; ->right while ( rp->left != NULL) { f = rp; / rp = rp->left; //rp qua bên trái } p->info = rp->info; if ( f == p) f->right = rp->right; else //f != p f->left = rp->right; p = rp; } delete p; return TRUE; //xố nút p BÀI 8: TĨM T T n n m: Câu 1: a 5, 2, 20, 11, 30, 9, 18, b Câu 2: a b c d e f g h i j Tí - BST 77 78 BÀI 9: - AVL BÀI 9: - AVL - Hi c c u tr - thêm xóa nút làm - 9.1 dùng xoá nút thêm nút Adelson Velski L BÀI 9: lh(p) rh nút p lh(p)=rh(p) xoay trái balance factor) bf bf(p)=0: lh(p)=rh(p) bf(p)=1: lh(p)=rh(p) + bf(p)=-1: lh(p)=rh(p) Hình 9.1 9.2 phép xoay trái - AVL 79 80 BÀI 9: - AVL 9.2.1 quanh nút r Hình 9.2 r xoay trái quanh Hình 9.3 NODEPTR RotateLeft(NODEPTR proot){ NODEPTR p; p=proot; if(proot==NULL){ BÀI 9: - AVL printf("\n Khong the xoay trai vi cay rong"); }else{ if(proot->right==NULL) printf("\n Khong the xoay trai vi khong co node ben phai"); else{ p=proot->right; proot->right=p->left; p->left=proot; } } return p; } 9.2.2 Hình 9.4 H Hình 9.5 81 82 BÀI 9: - AVL quanh nút proot, NODEPTR RotateRight(NODEPTR proot){ NODEPTR p; p=proot; if(proot==NULL) printf("\n Khong the xoay phai vi cay bi rong"); else if(proot->left==NULL) printf("\n Khong the xoay phai vi khong co ben trai"); else{ p=proot->left; proot->left=p->right; p->right=proot; } return p; } 9.3 nút - g xét phép xoay : - - BÀI 9: - AVL 83 ya thêm nút x vào AVL, v xoay bf(ya)=1, nút thêm vào nút sau bên trái ya bf(ya)=-1, nút ya Hình 9.6 c ya: nh T1: Hình 9.7 quanh ya 84 BÀI 9: - AVL xoay kép Hình 9.8 Xoay kép 9.4 9.4.1 (balance factor) struct nodetype{ int info; int bf; //balance factor struct nodetype *left, *right; }; typedef struct nodetype *NODEPTR; BÀI 9: 9.4.2 void Insert(NODEPTR *pavltree, int x) { //fp la nut cha cua p, q la cua p //ya la nut truoc gan nhat co the mat can bang, fya la cha cua ya //s la nut cua ya theo huong mat can bang //imbal=1: lech trai; =-1 lech phai NODEPTR fp,p,q, fya,ya,s; int imbal; //khoi dong cac gia tri fp=NULL; p=*pavltree; fya=NULL; ya=p; while(p!=NULL){ if(x==p->info) return; if(xinfo) q=p->left; if(x>p->info) q=p->right; if(q!=NULL) if(q->bf !=0){ //neu bi mat can bang fya=p; ya=q; } fp=p; p=q; } q=makenode(x); //them vao mot node la cua fp if(xinfo) else fp->left=q; fp->right=q; //hieu chinh lai chi so can bang cua tac ca cac node giua ya va q if(xinfo) else p=ya->left; p=ya->right; s=p; while(p!=q){ if(xinfo){ p->bf=1; p=p->left; - AVL 85 86 BÀI 9: - AVL }else{ p->bf=-1; p=p->right; } } //xac dinh huong lech if(xinfo) imbal=1; else imbal=-1; if(ya->bf==0){ ya->bf=imbal; return; } if(ya->bf !=imbal){ ya->bf=0; return; } if(s->bf==imbal){ if(imbal==1){ p=RotateRight(ya); }else{ p=RotateLeft(ya); } ya->bf=0; s->bf=0; }else{ if(imbal==1){ ya->left=RotateLeft(s); p=RotateRight(ya); }else{ ya->right=RotateRight(s); p=RotateLeft(ya); } if(p->bf==0){ ya->bf=0; s->bf=0; }else if(p->bf==imbal){ ya->bf=-imbal; s->bf=0; }else{ BÀI 9: - AVL ya->bf=0; s->bf=imbal; } p->bf=0; } if(fya==NULL) *pavltree=p; else if(ya==fya->right) else fya->right=p; fya->left=p; } c n n m: - ko Câu 1: insert remove AVL a 5, 2, 20, 11, 30, 9, 18, b Câu 2: a b nút 20 87 88 TPHCM Lê Minh Hoàng (1999 - 2002) Richard Neapolitan and Kumarss (2004) Foundations of Algorithms Using C++ Pseudocode Jones and Bartlett Publishers T

Ngày đăng: 28/07/2023, 17:57

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w