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

Stack Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.1 Stack

25 155 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 25
Dung lượng 1,15 MB

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

Nội dung

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.1 Stack . Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI

Trang 1

Chương 4:

Stack, Queue

1

Trang 2

Phần 1: Ngăn xếp (Stack)

Trang 3

3

Khái niệm Stack

 LIFO: Last In First Out

 Thao tác Pop, Push chỉ diễn ra ở 1 đầu

Trang 4

Biếu diễn stack

Push / Pop hơi

phức tạp

Push/Pop khá dễ dàng

Trang 5

5

Biểu diễn Stack dùng mảng

 Có thể tạo một stack bằng cách khai báo một mảng 1 chiều với kích thước tối đa là N (ví dụ: N =1000)

 Stack có thể chứa tối đa N phần tử đánh số từ 0 đến N-1

 Phần tử nằm ở đầu stack sẽ có chỉ số Top (lúc đó

trong stack đang chứa Top +1 phần tử)

 Để khai báo một stack, ta cần một mảng 1 chiều S, biến nguyên t cho biết chỉ số của đầu stack và hằng

số N cho biết kích thước tối đa của stack

Data S [N];

int Top;

Trang 6

typedef struct item {

Trang 7

179/44

Các thao tác trên Stack

Các thao tác cơ bản trên stack

Khởi tạo stack: Init (S)

Kiểm tra stack rỗng: Empty (S)

Kiểm tra stack đầy: IsFull (S)

Lấy phần tử ra khỏi Stack: Pop (S, x)

7

Trang 8

Biểu diễn Stack dùng mảng

 Khởi tạo Stack:

 Lệnh Top = -1 sẽ tạo ra một stack S rỗng

 Đảm bảo các thao tác trên Stack thực hiện đúng đắn

Thuật toán:

+Vào: Stack đã cần khởi tạo

+ Ra: Stack sau khi khởi tao

B1) Đặt chỉ số top = -1

BKT) Kết thúc;

Trang 9

9

Biểu diễn Stack dùng mảng

Thuật toán:

+Vào: Stack cần kiểm tra

+ Ra: Giá trị 0 hoặc 1

B1) if top=-1 then return 1

else return 0

BKT) Kết thúc

 Kiểm tra stack rỗng

 Được gọi đến trước khi thực hiện thao tác lấy phần tử ra khỏi Stack

 Stack rỗng nếu chỉ số top = -1

Cài đặt:

int IsEmpty (stack s) {

if (s.top == -1) return 1;

return 0;

}

Trang 10

Biểu diễn Stack dùng mảng

 Được gọi đến trước khi thực hiện thao tác đưa một phần tử vào stack

 Stack đầy nếu top = N-1

Cài đặt:

int IsFull (stack s) {

if (s.top==N-1) return 1;

return 0;

Thuật toán:

+Vào: Stack cần kiểm tra

+ Ra: giá trị 0 hoặc 1

B1) if top = N-1 then return 1;

else return 0;

BKT) Kết thúc;

Trang 11

11

Biểu diễn Stack dùng mảng

 Vào: Stack S, phần tử dữ liệu x

 Ra: Stack với phần tử dữ liệu trên đỉnh Stack B1) Kiểm tra nếu stack chưa đầy thì:

B1.1) Tăng top lên 1;

B1.2) Giá trị phần tử trên đỉnh Stack = x;

B1.3) Thực hiện bước kết thúc;

B2) Nếu stack rỗng thì thực hiện BKT;

BKT) Kết thúc;

Trang 12

Biểu diễn Stack dùng mảng

Trang 13

13

Biểu diễn Stack dùng mảng

 Vào: Stack S;

 Ra: x lưu giá trị phần tử trên đỉnh Stack

B1) Kiểm tra nếu stack không rỗng thì:

B1.1) x = giá trị phần tử trên đỉnh Stack = x; B1.2) Giảm top đi 1 ;

B1.3) Thực hiện bước kết thúc;

B2) Nếu stack rỗng thì thực hiện BKT;

BKT) Kết thúc;

Trang 14

Biểu diễn Stack dùng mảng

node Pop(stack &s)

Trang 15

15

Biểu diễn Stack dùng mảng

Nhận xét:

• Các thao tác trên đều làm việc với chi phí O(1)

• Việc cài đặt stack thông qua mảng một chiều đơn giản và khá hiệu quả

• Giới hạn về kích thước của stack N

• Giá trị của N có thể quá nhỏ so với nhu cầu thực

tế hoặc quá lớn sẽ làm lãng phí bộ nhớ

Khắc phục: Sử dụng DSLK đơn để biểu diễn stack

Trang 16

typedef struct Node

Trang 17

179/44

Các thao tác cơ bản trên stack

Khởi tạo stack: Init (S)

Tạo mới 1 nút: CreateNode (x)

Kiểm tra stack rỗng: IsEmpty (S)

Đưa phần tử vào Stack: Push (S,x)

Lấy phần tử ra khỏi Stack: Pop (S, x)

17

Biểu diễn Stack dùng DSLK

Trang 18

Khởi tạo stack

 Lệnh top = NULL sẽ tạo ra một stack S rỗng

Biểu diễn Stack dùng DSLK

Cài đặt:

void Init ( stack &s) {

s.top = NULL; }

Thuật toán:

+Vào: Stack đã cần khởi tạo

+ Ra: Stack sau khi khởi tao

B1) Đặt top = NULL;

BKT) Kết thúc;

Trang 19

return 0; // stack rỗng

}

 Kiểm tra stack rỗng

 Stack rỗng nếu top = NULL

Thuật toán:

+Vào: Stack cần kiểm tra

+ Ra: Giá trị 0 hoặc 1

B1) if top = NULL then return 1;

else return 0

BKT) Kết thúc

Trang 21

21

Biểu diễn Stack dùng mảng

 Vào: Stack S, phần tử dữ liệu x

 Ra: Stack với phần tử dữ liệu trên đỉnh Stack

B2) Nếu không tạo được nút thì thực hiện BKT;

B3) Kiểm tra nếu danh sách rỗng thì

top = NewNode;

Ngược lại, chèn NewNode vào đầu danh sách BKT) Kết thúc;

Trang 22

Cài đặt:

void Push (stack &s, int x){

Node *NewNode = CreateNode (x);

Trang 23

23

Biểu diễn Stack dùng mảng

 Vào: Stack S;

 Ra: Phần tử trên đỉnh Stack

B1) Kiểm tra nếu stack không rỗng thì:

B1.1) p phần tử trên đỉnh Stack;

B1.3) Thực hiện bước kết thúc;

B2) Nếu stack rỗng thì thực hiện BKT; BKT) Kết thúc;

Trang 25

25

Ứng dụng của Stack

tự truy xuất ngược với trình tự lưu trữ

hiện các thủ tục, Stack được sử dụng để lưu môi trường của các thủ tục

thuyết đồ thị (như tìm đường đi)

Ngày đăng: 11/04/2019, 17:39

TỪ KHÓA LIÊN QUAN

w