http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Cấu trúc liệu ngăn xếp (Stack) Ngăn xếp (Stack) ? Một ngăn xếp cấu trúc liệu trừu tượng (Abstract Data Type – viết tắt ADT), sử dụng hầu hết ngơn ngữ lập trình Đặt tên ngăn xếp hoạt động ngăn xếp đời sống thực, ví dụ cỗ hay chồng đĩa, … Trong đời sống thực, ngăn xếp cho phép hoạt động vị trí ngăn xếp Ví dụ, đặt thêm hay đĩa vào ngăn xếp Do đó, cấu trúc liệu trừu tượng ngăn xếp cho phép thao tác liệu vị trí Tại thời điểm nào, truy cập phần tử ngăn xếp Đặc điểm làm cho ngăn xếp trở thành cấu trúc liệu dạng LIFO LIFO viết tắt Last-In-First-Out Ở đây, phần tử đặt vào (được chèn, thêm vào) cuối truy cập Trong thuật ngữ ngăn xếp, hoạt động chèn gọi hoạt độngPUSH hoạt động xóa gọi hoạt động POP Biểu diễn cấu trúc liệu ngăn xếp (Stack) Dưới sơ đồ minh họa ngăn xếp hoạt động diễn ngăn xếp http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Một ngăn xếp triển khai theo phương thức Mảng (Array), Cấu trúc (Struct), Con trỏ (Pointer) Danh sách liên kết (Linked List) Ngăn xếp dạng kích cỡ cố định ngăn xếp thay đổi kích cỡ Phần triển khai ngăn xếp sử dụng mảng với việc triển khai ngăn xếp cố định Các hoạt động cấu trúc liệu ngăn xếp Các hoạt động ngăn xếp liên quan tới việc khởi tạo ngăn xếp, sử dụng sau xóa Ngồi hoạt động này, ngăn xếp có hai hoạt động nguyên sơ liên quan tới khái niệm, là: • Hoạt động push(): lưu giữ phần tử ngăn xếp • Hoạt động pop(): xóa phần tử từ ngăn xếp Khi liệu PUSH lên ngăn xếp: Để sử dụng ngăn xếp cách hiệu quả, cần kiểm tra trạng thái ngăn xếp Để phục vụ cho mục đích này, số tính hỗ trợ khác ngăn xếp: http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright â vietjack.com Hot động peek(): lấy phần tử liệu ngăn xếp, mà khơng xóa phần tử • Hoạt động isFull(): kiểm tra xem ngăn xếp đầy hay chưa • Hoạt động isEmpty(): kiểm tra xem ngăn xếp trống hay không Tại thời điểm, trì trỏ tới phần tử liệu vừa PUSH cuối vào ngăn xếp Vì trỏ ln biểu diễn vị trí ngăn xếp đặt tên top Con trỏ top cung cấp cho giá trị phần tử ngăn xếp mà khơng cần phải thực hoạt động xóa (hoạt động pop) Phần tìm hiểu phương thức để hỗ trợ tính ngăn xếp Phương thức peek() cấu trúc liệu ngăn xếp Giải thuật hàm peek(): Bắt đầu hàm peek return stack[top] kết thúc hàm Sự triển khai hàm peek() ngôn ngữ C: int peek() { return stack[top]; } Phương thức isFull() cấu trúc liệu ngăn xếp Giải thuật hàm isFull(): Bắt đầu hàm isfull if top MAXSIZE return false kết thúc if kết thúc hàm return true else Sự triển khai hàm isFull() ngôn ngữ C: bool isfull() { false; } if(top == MAXSIZE) return true; else return Phương thức isEmpty() cấu trúc liệu ngăn xếp Giải thuật hàm isEmpty(): bắt đầu hàm isempty false kết thúc if if top nhỏ kết thúc hàm return true else return http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Sự triển khai hàm isEmpty() ngôn ngữ C khác chút Chúng ta khởi tạo top -1, giống mục mảng Vì kiểm tra top -1 ngăn xếp trống Dưới phần code: bool isempty() { false; } if(top == -1) return true; else return Hoạt động PUSH cấu trúc liệu ngăn xếp Tiến trình đặt (thêm) phần tử liệu vào ngăn xếp biết đến với tên Hoạt động PUSH Hoạt động push bao gồm bước sau: • Bước 1: kiểm tra xem ngăn xếp đầy hay chưa • Bước 2: ngăn xếp đầy, tiến trình bị lỗi • Bước 3: ngăn xếp chưa đầy, tăng top để trỏ tới phần nhớ trống • Bước 4: thêm phần tử liệu vào vị trí nơi mà top trỏ đến ngăn xếp • Bước 5: trả success Nếu Danh sách liên kết sử dụng để triển khai ngăn xếp, bước cần cấp phát không gian động http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật cho hoạt động PUSH cấu trúc liệu ngăn xếp Từ suy giải thuật đơn giản cho hoạt động PUSH cấu trúc liệu ngăn xếp sau: bắt đầu hoạt động push: stack, data kết thúc if top ← top + if stack đầy stack[top] ← data return null kết thúc hàm Sự triển khai giải thuật ngôn ngữ C là: void push(int data) { if(!isFull()) { top = top + 1; stack[top] = data; }else { printf("Khong the chen them du lieu vi Stack da day.\n"); } } Để tìm hiểu chương trình C minh họa đầy đủ hoạt động ngăn xếp, mời bạn click chuột vào chương: Ngăn xếp (Stack) C Hoạt động POP cấu trúc liệu ngăn xếp Việc truy cập nội dung phần tử xóa từ ngăn xếp gọi Hoạt động POP Trong triển khai Mảng hoạt động pop(), phần tử liệu khơng thực bị xóa, thay vào top bị giảm vị trí thấp ngăn xếp để trỏ tới giá trị Nhưng triển khai Danh sách liên kết, hoạt động pop() thực sụ xóa phần tử xữ liệu xóa khỏi khơng gian nhớ Hoạt động POP bao gồm bước sau: • Bước 1: kiểm tra xem ngăn xếp trống hay không • Bước 2: ngăn xếp trống, tiến trình bị lỗi • Bước 3: ngăn xếp không trống, truy cập phần tử liệu top trỏ tới • Bước 4: giảm giá trị top • Bước 5: trả success http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật cho hoạt động POP Từ ta suy giải thuật cho hoạt động POP cấu trúc liệu ngăn xếp sau: bắt đầu hàm pop: stack data ← stack[top] if stack trống top ← top - return null kết thúc if return data kết thúc hàm Sự triển khai giải thuật ngôn ngữ C sau: int pop(int data) { if(!isempty()) { top - 1; return data; }else { Stack la trong.\n"); } } data = stack[top]; top = printf("Khong the lay du lieu, Để tìm hiểu chương trình C minh họa đầy đủ hoạt động ngăn xếp, mời bạn click chuột vào chương: Ngăn xếp (Stack) C http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ...http://vietjack.com /cau- truc- du- lieu- ‐va-‐giai-‐thuat/index.jsp ... Trang chia sẻ các bài học online miễn phí http://vietjack.com /cau- truc- du- lieu- ‐va-‐giai-‐thuat/index.jsp ... Trang chia sẻ các bài học online miễn phí http://vietjack.com /cau- truc- du- lieu- ‐va-‐giai-‐thuat/index.jsp