1. Trang chủ
  2. » Giáo Dục - Đào Tạo

tài liệu về stack và queue

45 1,2K 2

Đ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 45
Dung lượng 432 KB

Nội dung

MỤC TIÊUSau chương này bạn có thể: Giải thích cấu trúc và cách làm việc của stack Biết sử dụng cấu trúc stack để giải một số bài toán Giải thích cấu trúc và cách làm việc của queue Biết

Trang 1

CHƯƠNG 4 STACK và QUEUE

(6 tiết)

Trang 2

MỤC TIÊU

Sau chương này bạn có thể:

Giải thích cấu trúc và cách làm việc của stack Biết sử dụng cấu trúc stack để giải một số bài toán

Giải thích cấu trúc và cách làm việc của queue Biết sử dụng cấu trúc queue để giải một số bài toán

Trang 4

Ôn tập

Tìm kiếm là qua trình dựa trên một chút thông tin

(khoá tìm kiếm) đã có để xác định vị trí có thông tin cần tìm trong một nhóm trị.

Hai giải thuật tìm kiếm: Tìm kiếm tuyến tính và tìm kiếm nhị phân.

Tìm kiếm tuần tự có thể dùng cho một nhóm trị

bất kỳ.

Tìm kiếm nhị phân chỉ dùng cho nhóm trị đã có

thứ tự.

Trang 5

Ôn tập

Sắp xếp là qúa trình tái bố trí các phần tử trong một nhóm trị theo một cơ chế so sánh nào đó.

Cơ chế selection sort: tìm 1 trị nhỏ nhất trong

nhóm trị còn phải sắp xếp để đưa về đầu nhóm

này.

Cơ chế Bubble sort: Hoán chuyển dần các trị nhỏ

ở dưới lên phía trên.

Cơ chế Insertion sort: Lấy 1 trị phía sau chèn vào

vị trí thích hợp trong nhóm trị đã có thứ tự ở phía trước

Trang 6

4.1- Giới thiệu

Mảng thông thường cho phép truy xuất bất

kỳ phần tử nào  Không hạn chế truy cập.

Có những danh sách hạn chế cách truy cập Chồng(stack) đĩa chỉ cho phép truy cập 1

chiều

Hàng đợi khi mua vé là một danh sách hạn chế cách truy cập.

Trang 8

Giới thiệu

Queue- Hàng đợi

Trang 9

Giới thiệu

Queue- Hàng đợi

Cơ chế: Vào trước ra trước

First In First Out- FIFO

Hàng đầy

Trang 10

4.2- Stack

Mô tả stack

Khởi tạo 1 stack

Kiểm tra stack trống

Kiểm tra stack đầy

Thêm 1 phần tử vào stack

Lấy phần tử đỉnh stack ra

Trang 11

2

5 1000

3 31

0

Stack chứa một nhóm phần tử kiểu nào đó (T)

mảng

Mảng chiếm dụng bộ nhớ bao nhiêu?

Tại 1 thời điểm, vị trí trên cùng là vị trí nào?

Kỹ thuật template cho phép định nghĩa

1 tên gọi cho 1 kiểu

dữ liệu trừu tượng Khi

sử dụng sẽ

ấn định kiểu cụ thể

Bộ nhớ

template <class T> struct STACK

{ int maxSize;

T* ar;

int top;

};

Trang 12

4.2.2- Tác vụ khởi tạo (Init) 1 stack với MazSize phần tử

int maxSize 32

T* ar 1000 int top -1

1000

1

31

0

int maxSize

T* ar int top

Khởi tạo stack bao nhiêu phần tử ? Thí dụ: 32

Chưa có phần tử nào và 0 là vị trí hợp lệ (chỉ số đầu của mảng) nên chon -1

Trang 13

4.2.3- Kiểm tra stack trống (Empty)?

Stack trống là stack không

1000

1 31

0

St

Trang 14

4.2.4- Kiểm tra stack đầy (Full)?

Stack đầy khi chỉ số đỉnh

B

T

A 1000

1 31

0

X

Full

St

Trang 15

4.2.5- Thêm 1 phần tử vào stack (Push)?

Chỉ thêm vào được khi stack chưa

B A 1000

1 31

0

C

int top 2

ele St

Trang 16

4.2.6- Lấy phần tử đỉnh stack (Pop)?

Chỉ lấy ra được khi stack không

B A 1000

1 31

0

C

int top 1

ele St

Trang 17

Cài đặt mô hình cấu trúc stack và tác vụ trên stack

Định nghĩa cấu

trúc STACK cùng

với các thao tác

trên STACK trong

file.h Khi nào cần

trước MỖI hiện

thực hàm phải khai báo lại kiểu template

tham số phải chỉ định có kiểu template

// stack.h #ifndef _STACK_H_

Trang 18

int Full (STACK<T> St)

{ return St.top== (St.maxSize -1);

}

#endif

Dùng hàm memcpy

để sao chép trị thay vì phép gán để cho phép phần tử của stack có thể

là chuỗi

Trang 19

4.3- Một số bài toán dùng stack

Trang 20

4.3.1-Bài toán đổi số

Nhập 1 số long ( thí dụ nhập n=13) và cơ số (thí dụ CoSo=2) , xuất biểu diễn của số theo cơ số này.

0 1

1 0 1 1

0

1 0

1

1 0 1 1

Ngưng chia

Lấy ra

Trang 21

Chỉ biên dịch khi file.cpp đang hiện hành- Không biên dịch file.h

Trang 22

4.3.2- Bài toán đảo chuỗi S

Chuỗi nhập: qwert  Chuỗi xuất: trewq

Thư viện string.h có hàm strrev (string reverse) làm điều này.

Có thể tự xây dựng đảo chuỗi bằng stack các ký tự

q w e r t

q w e

q w e r t

Pop(St,c);

printf(“%c”,c); }

Trang 23

4.3.3-Bài toán tính trị biểu thức dạng hậu tố

Lewinski đã chứng minh rằng mọi biểu thức đều có thể viết dưới dạng hậu tố (postfix

notation, toán tử đặt sau toán hạng) và tính toán từ trái sang phải.

Thí dụ: (3+5)*2  3 5+2*  Lấy 3 với 5 cộng nhau rồi lấy 2 nhân vào.

Thí dụ ((3+5)*2)3  3 5+2*3$ với $ là ký

hiệu của toán tử lũy thừa (do ta chọn).

Thí dụ: ((3*4)+(5*6)+(7*8))*3

 3 4*5 6*+7 8*+3*

Trang 24

Bài toán tính trị biểu thức dạng hậu tố

Mô tả biểu thức hậu tố: Chuỗi ký số và toán tử

Để phân cách các toán hạng, nên dùng cặp

móc để dễ truy xuất 1 toán hạng trong chuỗi Nhờ vậy, có thể nhập biểu thức số thực và cả

số âm

Thí dụ: (-3.5)(4.7)+(7.2)*(-5.6)* để mô tả

cho

((-3.5)+(4.7))*(7.2)*(-5.6)

Đọc 1 toán hạng là đọc 1 chuỗi con từ móc

mở đến móc đóng, đổi chuỗi số này thành số: Thí dụ: “(-3.5)”  “-3.5”  -3.5

Trang 25

Bài toán tính trị biểu thức dạng hậu tố

12 30

Xong

Luôn luôn thực thi 1 phép toán với

2 toán hạng lấy

từ Stack

Trang 26

Bài toán tính trị biểu thức dạng hậu tố

Tác vụ kiểm tra 1 ký tự có là toán tử?

Khi duyệt biểu thức, nếu đó là toán tử thì

lậy 2 trị từ stack ra để tính toán Ngược lại

lấy toán hạng từ biểu thức rồi đưa vào stack.

Trang 27

Bài toán tính trị biểu thức dạng hậu tố

Tác vụ lấy 1 toán hạng từ vị trí thứ i trong biểu thức.

Trang 28

Bài toán tính trị biểu thức dạng hậu tố

Tác vụ tính trị 1 phép toán

Trang 29

Bài toán tính trị biểu thức dạng hậu tố

Tác vụ tính trị cả biểu thức

Toán hạng 2 ở trên, toán hạng 1 ở dưới trong stack

Trang 30

Bài toán tính trị biểu thức dạng hậu tố

Trang 31

Biểu thức tiền tố (prefix notation) được Jan Lukasiewicz, một nhà logic học người Balan giới thiệu năm 1929, nên còn gọi là dạng biểu diễn Balan của biểu thức : (a+b)*(c–d)  *+ab-cd Đây chính là dạng viết ngược của postfix notation

((3-5)*2)3  35-2*3$ (dạng hậu tố)

 $3*2-35 (dạng tiền tố)

Viết chương trình tính trị của biểu thức tiền tố.

Gợi ý: Tương tự bài toán tính trị

của biểu thức hậu tố, chỉ khác là

phải xét chuỗi từ sau ra trước.

Tự trả lời

4.3.4-Bài toán tính trị biểu thức dạng tiền tố

Trang 34

4.4.2- Khởi tạo hàng đợi với MaxSize phần tử

int maxSize

T* ar int rear Q

ar 1000 rear 0 Q

Khởi tạo với MaxSize =32 phần tử

0

maxSize-1

1000

maxSize 32

Trang 35

4.4.3- Kiểm tra hàng có trống?

ar 1000 rear 0 Q

0

maxSize-1

1000

maxSize 32

Trang 36

4.4.4- Kiểm tra hàng có đầy?

ar 1000 rear 32 Q

5

120

Trang 37

4.4.5- Thêm 1 phần tử vào hàng

ar 1000 rear 1 Q

1

9

Trang 38

4.4.6- Lấy 1 phần tử ra khỏi hàng

ar 1000 rear 32 Q

0 31

maxSize 32

1 2

ele rear 31

120

7 9

5

Trang 39

Sử dụng Queue

Quản lý in ấn.

Quản lý qúa trình của hệ điều hành.

Trang 40

Thí dụ 1: Queue các phần tử int

Trang 41

Thí dụ 2: Queue in ấn

Tên máy

Số trang cần in

Trang 42

Bài tập về queue.

Mỗi máy trong môi trường Internet được nhận diện bằng một địa chỉ IP (Internet Protocol Address) gồm 4 byte Mô tả 4

byte này theo dạng: 202.168.9.0 Ba byte đầu của IP address

dùng để nhận dạng mạng mà máy này có kết nối (vì Internet là mạng của các mạng), byte cuối cùng dùng để nhận dạng máy tính này trong mạng.

Một máy client có thể truy xuất từ server 1 tài nguyên (1 file) Một server nhận nhiều yêu cầu từ client.

Viết chương trình cho biết server sẽ lần lượt phục vụ client

theo thứ tự nào và tài nguyên nào.

Trang 43

Tóm tắt

Stack: Cấu trúc danh sách chứa 1 nhóm các phần

tử làm việc theo cơ chế vào sau ra trước (Last In

First Out).

Queue: Cấu trúc danh sách chứa 1 nhóm các phần

tử làm việc theo cơ chế vào trước ra trước (First In First Out).

Các tác vụ trên Stack và Queue: Khởi tạo, Kiểm tra trống, kiểm tra đầy, thêm 1 phần tử, Lấy 1 phần tử ra.

Có thể dùng mảng để mô tả danh sách các phần tử của stack và queue.

Trang 44

Tóm tắt

Dùng kỹ thuật template của C++ giúp hiện thực

cấu trúc mức khái quát với khai báo template

<class T>, T là tên gọi do ta tự đặt

Phải khai báo template <class T>lại trước mỗi hiện

thực hàm có dùng kiểu trừu tượng T này.

Khi giải bài toán cụ thể T sẽ là một kiểu dữ liệu

cụ thể Trình biên dịch sẽ áp dụng kiểu dữ liệu cụ thể cho template này.

Trang 45

Xin cám ơn

Ngày đăng: 19/01/2015, 08:53

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w