1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật: Stack and Queue - TS. Ngô Hữu Dũng

61 6 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 61
Dung lượng 554,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật: Stack and Queue trình bày các nội dung sau: Khái niệm Stack, applications, thao tác trên Stack, tổ chức dữ liệu, thao tác Push vào Stack, thao tác Pop khỏi stack, Stack – Sử dụng mảng,... Đây là tài liệu học tập và giảng dạy dành cho sinh viên ngành tham khảo!

Trang 1

Data structures and algorithms

Stack and Queue

INDUSTRIAL UNIVERSITY OF HO CHI MINH CITY

Trang 2

Stack (LIFO – last in, first

out: a collection of items

in which only the most

recently added item may

be removed

Queue (FIFO – first in,

first out): a collection of items in which first items entered are the first ones to

be removed

Trang 3

Push

Trang 4

StackNgăn xếp

34 56 45 37

Push

Stack – Last in, first out

Trang 5

Khái niệm Stack

 Lưu trữ một tập các phần tử theo một trật tự nhất định

 Nguyên tắc: Last in, first out

 Vào sau cùng, ra trước tiên

Push

Trang 6

 Balancing of symbols

 Infix to Postfix /Prefix conversion

 Redo-undo features at many places like editors,

Photoshop

 Forward and backward feature in web browsers

 Used in many algorithms like Tower of Hanoi, tree traversals, stock span problem, histogram problem

 Other applications can be Backtracking, Knight tour problem, rat in a maze, N queen problem and Sudoku solver

Trang 7

Thao tác trên Stack

 Push: Thêm một phần tử vào stack

 Nếu stack chưa đầy thì thêm phần tử ở top

 Pop: Xoá một phần tử từ stack

 Nếu stack không rỗng thì xoá phần tử ở top

 Top: Lấy phần tử ở top

 initStack: khởi tạo Stack

 isEmpty: Kiểm tra stack rỗng?

 Trả về true nếu stack rỗng

 isFull: Kiểm tra stack đầy?

Trang 9

Thao tác Push vào Stack

Trang 10

Thao tác Pop khỏi stack

Top

Trang 11

Stack – Sử dụng mảng

9 3 6

Stack

Top

Trang 12

Stack số nguyên – Sử dụng mảng

struct ttStack

{

int* StkArray; // mảng chứa các phần tử

int StkMax; // số phần tử tối đa

int StkTop; // vị trí đỉnh Stack

};

typedef struct ttStack STACK;

Trang 13

s.StkTop = -1;

return true;

}

Trang 14

}

Trang 16

s.StkArray[s.StkTop] = newitem;

return true;

}

Trang 17

return true;

}

Trang 18

Bài tập

 Viết hàm nhập và xuất Stack số nguyên

 Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký tựstr (mỗi phần tử Stack là ký tự)

 Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký tựstr (mỗi phần tử Stack là một từ - từ cách nhau bởi

khoảng trắng)

Trang 19

Stack – Ví dụ ứng dụng

 Kiểm tra sự tương ứng của các cặp ngoặc đơn trong mộtbiểu thức

 ( ( A + B ) / C ( A + B ) / C)

 Đảo ngược một chuỗi ký tự

Trang 20

Stack – Sử dụng DSLK

9 7

Trang 30

Stack – Quick Sort

 Để khử đệ quy cho Quick Sort, ta sử dụng một stack đểlưu lại các partition (phân hoạch) cần tiến hành sắp xếp

Ý tưởng:

 Push phân hoạch đầu tiên (0, n-1) vào stack

 Trong khi stack chưa rỗng

 Pop một phân hoạch từ stack

 Chọn phần tử trục trên phân hoạch này

 Điều chỉnh phân hoạch tương ứng với trục

 Push 2 phân hoạch bên trái và phải trục vào stack

Trang 31

Stack – Quick Sort

 Push phân hoạch đầu tiên (0, n-1) vào stack

 Trong khi stack chưa rỗng

 Pop một phân hoạch từ stack

 Chọn phần tử trục trên phân hoạch này

 Điều chỉnh phân hoạch tương ứng với trục

 Push 2 phân hoạch bên trái và phải trục vào stack

t

Stack rỗng

Stop

Trang 32

QueueHàng đợi

Trang 33

Phòng vé

Trang 35

Queue – Định nghĩa

 Các thao tác cơ bản trên hàng đợi:

InitQueue : khởi tạo hàng đợi rỗng

IsEmpty : kiểm tra hàng đợi rỗng?

IsFull : kiểm tra hàng đợi đầy?

EnQueue : thêm 1 phần tử vào cuối hàng đợi, có thể làm hàng đợi đầy

DeQueue : lấy ra 1 phần tử từ đầu Queue,

có thể làm Queue rỗng

Trang 36

 Minh họa thao tác EnQueue

 Minh họa thao tác DeQueue

Trang 37

Cách xây dựng Queue

Trang 38

Queue – Sử dụng mảng

 Dùng 1 mảng ( QArray ) để chứa các phần tử.

 Dùng 1 số nguyên ( QMax )để lưu số phần tử tối

đa trong hàng đợi

 Dùng 2 số nguyên ( QFront , QRear ) để xác định

vị trí đầu, cuối hàng đợi

 Dùng 1 số nguyên ( QNumItems ) để lưu số phần

tử hiện có trong hàng đợi

Trang 41

QRear = 6

Trang 42

QRear = 6

Trang 44

1 Thêm giá trị 123 vào hàng đợi

Trang 45

2 Lấy một phần tử khỏi hàng đợi

Trang 46

3 Thêm giá trị 456 vào hàng đợi

Trang 56

Queue – Sử dụng DSLK

 Các thao tác cơ bản

bool InitQueue(QUEUE &q);

bool IsEmpty(const QUEUE &q);

bool IsFull(const QUEUE &q);

bool EnQueue(QUEUE &q, int newitem);

bool DeQueue(QUEUE &q, int& itemout);

Trang 58

Queue – Sử dụng DSLK

bool IsEmpty(const QUEUE& q){

return (q.NumItems==0);}

Trang 60

q.pRear->pNext = p;

q.pRear = p;

} q.NumItems++;

return true;

Ngày đăng: 10/05/2021, 23:17

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm