slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 4 stack và queue

29 604 0
slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 4 stack và queue

Đ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

Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 1 Cấutrúcdữ liệuvàGiảithuật Chương III: Stack và Queue Danh sách kiểungănxếp - Stack – Stack z Mộtkiểudanhsáchtuyến tính đặc biệt z Phép bổ sung và phép loạibỏ tuân thủ theo cơ chế “vào sau ra trước” (last in first out) , đượcthựchiện ở đầu đỉnh đỉnh đáy Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 2 Danh sách kiểungănxếp - Stack – Hai thao tác cơ bản đốivới danh sách kiểungăn xếp z push(Element e) : bổ sung phầntử vào Stack z Element pop(): Loạibỏ và trả ra giá trị củaphầntửở đỉnh Stack – Các thao tác khác z Int size(): Trả ra số các phầntử trong Stack z Boolean isEmpty(): KiểmtraxemStack córỗng không z Element top(): Trả ra giá trị củaphầntửởđỉnh Stack Các thao tác cơ bảncủa Stack Top Stack Top Push Data Stack Top Đẩymộtphầntử vào stack Stack Overflow Data Trường hợpStack đầy Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 3 Các thao tác cơ bảncủa Stack Pop Top Stack Top Stack Data Lấyraphầntửởđỉnh stack Top Stack Underflow Trường hợp Stack cạn Danh sách kiểungănxếp [9,8,7]3size() [9,8,7]-push(7) [9,8]-push(8) [9]-push(9) []trueisEmpty() []5pop() [5]7pop() [5,7]7top() [5,7]-push(7) [5]3pop() [5,3]-push(3) [5]-push(5) [ ]-create() StackOutputThao tác Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 4 Ứng dụng củaStack – Lưutrữ các trang web đãtừng được duyệttrên Web browser – Cài đặt thao tác Undo trong các phầnmềmsoạn thảo – Lưudanhsáchcáclờigọi hàm trong Java Virtual Machine Lưutrữ kế tiếpcủa Stack z Stack có thểđượclưutrữ bởimộtvector lưutrữ S, gồmn ô nhớ kế tiếp nhau z Đỉnh stack đượcxácđịnh bởimộtchỉ số T – T sẽ đượccậpnhậtnếucóthaotácbổ sung hay loạibỏ đượcthựchiệntrênstack S 123 t … N Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 5 Lưutrữ kế tiếpcủa Stack z Giảithuậtbổ sung mộtphầntử vào Stack đượclưutrữ kế tiếp Procedure PUSH(S,T,X) Begin {S: vector lưutrữ có n ô nhớ; T: chỉ số củaphầntửđỉnh stack hiệnthời; X là giá trị cần thêm vào } 1. if T >= n then begin write(‘STACK TRÀN’); return; end; 2. T:= T+1; S[T] := X; End Lưutrữ kế tiếpcủa Stack z Giảithuậtlấyraphầntửởđỉnh củaStack đượclưutrữ kế tiếp Procedure POP(S,T, Y) Begin {S: stack đang xét ; T: chỉ số củaphẩntử tại đỉnh stack hiệnthời; Phầntửđượclấyrasẽđượcbảolưusử dụng biếnY } 1. if T = 0 then begin write(‘STACK CẠN’); return; end; 2. Y:= S[T]; S[T] := null; T:= T-1; End Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 6 Hiệunăng và Hạnchế z Hiệunăng – n là số phầntử củastack – Không gian lưutrữ : O(n) – Cácthaotáccơ bảncóđộ phứctạpO(1) z Hạnchế – Kích thướctối đaphải đượcxácđịnh trướcvà không được thay đổi – Xảyratrànstack Lưutrữ móc nối đốivới Stack – Cách tiếpcận1 z Đỉnh của Stack được coi là phầntử nằm ởđầu danh sách z pop() : Lấyraphầntửđầu tiên trong danh sách móc nối z push(o) : Bổ sung mộtphầntử vào đầudanhsáchmócnối Đỉnh Stack L Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 7 Lưutrữ móc nối đốivới Stack Đỉnh Stack L •Cáchtiếpcận2 •Phầntử cuối cùng đượccoilàđỉnh stack •pop() : Lấyraphầntử cuối cùng trong danh sách móc nối •push(o): Bổ sung mộtphầntử vào cuối danh sách móc nối zCách lưutrữ móc nối nào phù hợphơn đốivớicấutrúcdữ liệu Stack? Lưutrữ móc nối đốivới Stack – Khai báo Stack móc nối trong C struct stacknode { int item; struct stacknode *next; } ; typedef struct stacknode STACKNODE; typedef STACKNODE * STACKNODEPTR; STACKNODEPTR top = NULL; Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 8 Lưutrữ móc nối đốivới Stack – Bổ sung vào Stack int push ( STACKNODEPTR *top , int value ) { STACKNODEPTR newnode; newnode = malloc sizeof (STACKNODE); if (nut == null) { printf(“\n No memory”); return 1; } else { newnode->item = value; newnode ->next = *top; *top = newnode; return 0; } } Lưutrữ móc nối đốivới Stack – Loạibỏ nút int pop ( STACKNODEPTR *top) { int item; STACKNODEPTR temp; temp = *top; item = (*top)->item; *top = (*top)->next; free (temp); return item; } Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 9 Danh sách kiểuhàngđợi-Queue z Queue z Queue (Hàng đợi) là mộtkiểu danh sách tuyến tính đặcbiệt z Phép bổ sung và loạibỏ hoạt động theo cơ chế “vào trước ra trước” (first in first out) ; bổ sung ở một đầuthìloạibỏở đầukia lốisau lối trước Danh sách kiểuhàngđợi-Queue – Hai hàm cơ bản đốivới danh sách kiểuhàngđợi z enqueue(Element e) z Element dequeue() – Các hàm khác z create(): z size() : z isEmpty(): z Element front() Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 10 Danh sách kiểuhàngđợi–Queue [9,8,7]3size() [9,8,7]-enqueue(7) [9,8]-enqueue(8) [9]-enqueue(9) []trueisEmpty() []7dequeue() [7]3dequeue() [3,7]3front() [3,7]-enqueue(7) [3]5dequeue() [5,3]-enqueue(3) [5]-enqueue(5) [ ]-create() QueueOutputThao tác Ứng dụng củaQueue – Hàng đợi trong các phòng bán vé – Truy nhập vào các thiếtbị dùng chung tạivăn phòng (ví dụ máy in) [...]... tác cơ bản của Queue Data D Enqueue A front B rear Queue Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội A front B D rear Queue 12 Cấu trúc dữ liệu và Giải thuật Các thao tác cơ bản của Queue Data A Dequeue A front B D rear Queue B front D rear Queue Lưu trữ kế tiếp đối với Queue Giải thuật bổ sung vào Queue được lưu trữ trong vector Q gồm n phần tử và được tổ chức dưới dạng thường Procedure ENQUEUE(Q,F,R,X)... 1 và 2 cho đến khi kết quả của phép chia là 0 4 Lần lượt lấy các chữ số ra khỏi Stack và in chúng ra kết quả Bài toán đổi cơ số sử dụng Stack 4 n= 356 Empty stack n%16 = 4 n = n/16 = 22 Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 6 4 n%16 = 6 n = n/16 = 1 1 6 4 n%16 = 1 n = n/16 = 0 20 Cấu trúc dữ liệu và Giải thuật Bài toán đổi cơ số sử dụng Stack Procedure CONVERT(n, b) Begin 1 m = N; 2 { Tính số dư và. .. 0; { Queue chỉ còn một phần tử} 4 else F:= F+ 1; End Lưu trữ kế tiếp đối với Queue Bài tập: Hãy viết giải thuật thực hiện bổ sung và loại bỏ trên Queue lưu trữ kế tiếp dưới dạng vòng Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 14 Cấu trúc dữ liệu và Giải thuật Lưu trữ móc nối đối với Queue – Cách tiếp cận 1: Sử dụng danh sách nối đơn Lối trước của Queue là đầu danh sách enqueue(o): bổ sung phần tử vào cuối... với DeQueue Giải thuật bổ sung phần tử vào đầu một DeQueue lưu trữ trong một danh sách nối kép Giải thuật loại bỏ phần tử đầu một DeQueue lưu trữ trong một danh sách nối kép Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 18 Cấu trúc dữ liệu và Giải thuật Bài toán đổi số cơ số – Bài toán: Viết một số trong hệ thập phân thành số trong hệ cơ số b bất kỳ Ví dụ: – – – (356)10 = (101100100)2 (356)10 = ( 544 )8 (356)10... (356)10 = (1 64) 16 Bài toán đổi cơ số sử dụng Stack Ví dụ: – (356)10 = (101100100)2 356 2 0 178 2 0 89 2 1 44 2 0 22 2 0 11 2 1 5 2 1 2 2 0 1 2 1 0 Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 19 Cấu trúc dữ liệu và Giải thuật Bài toán đổi cơ số sử dụng Stack – Thuật toán: Đầu vào: Số n trong hệ thập phân Đầu ra: Số tương ứng với n trong hệ đếm cơ số b Thực hiện 1 Lấy chữ số tạo bởi n%b Đẩy vào Stack 2 Thay... đỉnh và đó là phép toán ^, đẩy phép toán đang xét vào đỉnh stack Nếu không, đưa lần lượt phép toán ở đỉnh stack ra cho đến khi thấy một phép toán tại đỉnh stack có độ ưu tiên thấp hơn phép toán đang xét Đẩy phép toán đang xét vào đỉnh stack 5 Kết thúc biểu thức xếp ra Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội Đưa nốt các phép tóan trong ngăn 28 Cấu trúc dữ liệu và Giải thuật (A A B - + ( + + - ( ( ( B + Đỗ. .. B* C +A*BC ABC*+ (A + B ) / (C-D) /+AB–CD AB+CD-/ A+B/C–D -+ A/BCD A B C/ + D - Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 23 Cấu trúc dữ liệu và Giải thuật Bài toán tính giá trị của biểu thức dạng hậu tố Tính giá trị của một biểu thức dạng hậu tố sử dụng Stack – Đầu vào : Xâu ký tự biểu diễn biểu thức dạng hậu tố AB+C–DE*/ Các giá trị của các biến số Các bước chính trong giải thuật – – – – Đọc biểu thức... xâu ‘)’ ; 3 call POP (S,T, VAL); End Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 24 Cấu trúc dữ liệu và Giải thuật Bài toán tính giá trị của biểu thức dạng hậu tố Ký tự được đọc A Ví dụ: A B + C – D E * / với A = 5, B = 14, C = 1, D = 2, E = 3 B + 5+ 14 C 1 9-1 D E * 2*3 / 18/6 Stack 3 14 5 1 5 19 19 2 18 2 6 18 18 18 3 VAL Chuyển biểu thức dạng trung tố sang dạng hậu tố – Bài toán Xét biểu thức số học dạng... if (R >= n) then begin write( QUEUE TRÀN’); return; end; 2 {Q rỗng} if F = 0 then F:= R:= 1; 3 else R:= R+ 1; 4 Q[R] := X; End Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 13 Cấu trúc dữ liệu và Giải thuật Lưu trữ kế tiếp đối với Queue Giải thuật lấy ra (loại bỏ ) khỏi Queue Procedure DEQUEUE(Q,F,R, Y) Begin { Y là biến lưu trữ phần tử được lấy ra } 1 if F = 0 then begin write( QUEUE CẠN’); return; end; 2... insertFirst(8) insertLast(7) size() Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội Output 3 3 7 error true 3 DeQueue [] [5] [3,5] [5] [5,7] [7] [] [] [] [9] [8,9] [8,9,7] [8,9,7] 17 Cấu trúc dữ liệu và Giải thuật Lưu trữ móc nối với DeQueue DeQueue được lưu trữ sử dụng cấu trúc danh sách móc nối kép (Doubly Linked – List) – – – L Mỗi nút trong danh sách ngoài trường INFO chứa dữ liệu còn có 2 trường con trỏ PREV . Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 1 Cấutrúcdữ liệuvàGiảithuật Chương III: Stack và Queue Danh sách kiểungănxếp - Stack – Stack z Mộtkiểudanhsáchtuyến. ; End Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 17 Hàng đợihaiđầu-DEQueue z DeQueue – Hàng đợi hai đầulàmộtcấutrúcdữ liệudạng hàng đợi nhưng nó hỗ trợ phép bổ sung và. bảncủa Queue Queue Enqueue D Data A B front rear A B D front rear Queue Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp - Khoa CNTT - ĐHBK Hà nội 13 Các thao tác cơ bảncủa Queue Queue Dequeue A Data B

Ngày đăng: 24/10/2014, 15:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan