DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI (tt)
Số trang: 31
Loại file: ppt
Dung lượng: 1.29 MB
Lượt xem: 20
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Ngăn x p (Stack) là m t danh sách mà ta gi i h n vi c thế ộ ớ ạ ệ êmvào hoặc loại bỏ một phần tử chỉ thực hiện tại một đầu của danhsách, đầu này gọi là đỉnh (TOP) của ngăn xếp.
Nội dung trích xuất từ tài liệu:
DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI (tt)CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GI ẢICHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾPCHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢICHƯƠNG IV : CÂYI. NGĂN XẾP ( STACK )1. Giới Thiệu Top LIFO: Last In First Out - Vào Sau Ra Trước.I. NGĂN XẾP ( STACK )1. Định Nghĩa Ngăn xếp (Stack) là một danh sách mà ta giới hạn việc thêm vào hoặc loại bỏ một phần tử chỉ thực hiện tại một đầu của danh sách, đầu này gọi là đỉnh (TOP) của ngăn xếp. LIFO: Last In First Out - vào sau ra trước. Các thao tác trong stack: Push: chèn phần tử mới vào stack Pop: lấy phần tử đầu stack ra khỏi stack Top: kiểm tra phần tử đầu stackI. NGĂN XẾP ( STACK )2. Khai báo cấu trúc dữ liệu cho stack pFirst NULL 4 14 22 38 19 0 1 2 3 4 5 6 8 7I. NGĂN XẾP ( STACK )2. Khai báo cấu trúc dữ liệu cho stack Khai báo ngăn xếp dạng mảng Khai báo ngăn xếp dạng DSLK # define size 200 struct stack struct stack { { int info; int n; stack *pNext; e [size]; }; int Top_idx; //giữ vị trí đỉnh ngăn xếp };I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp Tạo một ngăn xếp rỗng. Hàm trả về phần tử tại đỉnh ngăn xếp. Nếu ngăn xếp rỗng thì hàm không xác định. Chương trình con xoá một phần tử tại đỉnh ngăn xếp. Chương trình con thêm một phần tử x vào đầu ngăn xếp. Hàm kiểm tra ngăn xếp rỗng. Hàm cho kết quả 1 (true) nếu ngăn xếp rỗng và 0 (false) trong trường hợp ngược lại.I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK InitializeStack: Khởi động một Stack. Ban đầu Stack chưa có phần tử. void InitializeStack (stack* &Top) { Top = NULL; } EmptyStack( ): Kiểm tra Stack rỗng. int EmptyStack (stack *Top) { return (Top == NULL ? 1 : 0); }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK Push( ): thêm một phần tử có nội dung x vào đầu Stack. void Push (stack* &Top, int x) { stack *p; p = new stack; p->info = x; p->pNext = Top; Top = p; }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK Pop( ): Lấy phần tử đầu danh sách. void Pop (stack* &Top) { stack *p; if (Empty (Top)) cout pNext; delete p; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK GetTop( ): Lấy thông tin về phần tử đầu danh sách. int GetTop (stack* Top) { stack *p; p = Top; if (p != NULL ) return (p->info); else { cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK DeleteAllStack( ): Xoá toàn bộ stack. void DeleteAllStack (stack* &Top) { stack *p; while (Top != NULL) // reach to end ? { p = Top; Top = p->pNext; delete p; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng 14 38 19 22 4 8 13 42 1 2 0 1 2 3 4 5 6 7 8# define size 200struct stack{ int n; e [size ]; int Top_idx; //giữ vị trí đỉnh ngăn xếp};I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Khởi tạo một Stack. Ban đầu Stack chưa có phần tử. void InitializeStack(stack &S) { S.Top_idx = size; } Kiểm tra Stack rỗng. Kiểm tra Stack đầy. int EmptyStack (stack S) int FullStack (stack S) { { return S.Top_idx == size; return S.Top_idx == 0; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Thêm một phần tử có nội dung x vào đầu Stack. void PushStack(int X, stack &S) { if (FullStack(S)) cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Lấy ra phần tử đầu Stack . void PopStack(stack &S) { if (!EmptyStack(S)) S.Top_idx = S.Top_idx + 1; else cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Lấy giá trị phần tử đầu Stack. int TopStack(stack S) { if (!Empty_Stack(S)) return S.e[S.Top_idx]; else { cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Xoá toàn bộ stack. Gọi Hàm khởi tạo vì dãy không cần phải xóa phần tửI. NGĂN XẾP ( STACK )3. Ứng dụng Giải bài toán tháp HN Có ba cọc A,B,C. Khởi đầu cọc A có một số đĩa xếp theo thứ tự nhỏ dần lên trên đỉnh. Bài toán đặt ra là phải chuyển toàn bộ chồng đĩa từ A sang B. Mỗi lần thực hiện chuyển một đĩa từ một cọc sang một cọc khác và không được đặt đĩa lớn nằm trên đĩa nhỏI. NGĂN XẾP ( STACK )3. Ứng dụng void Move(int N, int A, int B, int C) //n: so dia, A,B,C: nguon , dich va trung gian { if (N == 1) cout I. NGĂN XẾP ( STACK ) ...
Nội dung trích xuất từ tài liệu:
DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI (tt)CHƯƠNG I : TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU VÀ THUẬT GI ẢICHƯƠNG II : MỘT SỐ THUẬT TOÁN TÌM KIẾM VÀ SẮP XẾPCHƯƠNG III : DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢICHƯƠNG IV : CÂYI. NGĂN XẾP ( STACK )1. Giới Thiệu Top LIFO: Last In First Out - Vào Sau Ra Trước.I. NGĂN XẾP ( STACK )1. Định Nghĩa Ngăn xếp (Stack) là một danh sách mà ta giới hạn việc thêm vào hoặc loại bỏ một phần tử chỉ thực hiện tại một đầu của danh sách, đầu này gọi là đỉnh (TOP) của ngăn xếp. LIFO: Last In First Out - vào sau ra trước. Các thao tác trong stack: Push: chèn phần tử mới vào stack Pop: lấy phần tử đầu stack ra khỏi stack Top: kiểm tra phần tử đầu stackI. NGĂN XẾP ( STACK )2. Khai báo cấu trúc dữ liệu cho stack pFirst NULL 4 14 22 38 19 0 1 2 3 4 5 6 8 7I. NGĂN XẾP ( STACK )2. Khai báo cấu trúc dữ liệu cho stack Khai báo ngăn xếp dạng mảng Khai báo ngăn xếp dạng DSLK # define size 200 struct stack struct stack { { int info; int n; stack *pNext; e [size]; }; int Top_idx; //giữ vị trí đỉnh ngăn xếp };I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp Tạo một ngăn xếp rỗng. Hàm trả về phần tử tại đỉnh ngăn xếp. Nếu ngăn xếp rỗng thì hàm không xác định. Chương trình con xoá một phần tử tại đỉnh ngăn xếp. Chương trình con thêm một phần tử x vào đầu ngăn xếp. Hàm kiểm tra ngăn xếp rỗng. Hàm cho kết quả 1 (true) nếu ngăn xếp rỗng và 0 (false) trong trường hợp ngược lại.I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK InitializeStack: Khởi động một Stack. Ban đầu Stack chưa có phần tử. void InitializeStack (stack* &Top) { Top = NULL; } EmptyStack( ): Kiểm tra Stack rỗng. int EmptyStack (stack *Top) { return (Top == NULL ? 1 : 0); }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK Push( ): thêm một phần tử có nội dung x vào đầu Stack. void Push (stack* &Top, int x) { stack *p; p = new stack; p->info = x; p->pNext = Top; Top = p; }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK Pop( ): Lấy phần tử đầu danh sách. void Pop (stack* &Top) { stack *p; if (Empty (Top)) cout pNext; delete p; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK GetTop( ): Lấy thông tin về phần tử đầu danh sách. int GetTop (stack* Top) { stack *p; p = Top; if (p != NULL ) return (p->info); else { cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.1 Cài đặt bằng DSLK DeleteAllStack( ): Xoá toàn bộ stack. void DeleteAllStack (stack* &Top) { stack *p; while (Top != NULL) // reach to end ? { p = Top; Top = p->pNext; delete p; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng 14 38 19 22 4 8 13 42 1 2 0 1 2 3 4 5 6 7 8# define size 200struct stack{ int n; e [size ]; int Top_idx; //giữ vị trí đỉnh ngăn xếp};I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Khởi tạo một Stack. Ban đầu Stack chưa có phần tử. void InitializeStack(stack &S) { S.Top_idx = size; } Kiểm tra Stack rỗng. Kiểm tra Stack đầy. int EmptyStack (stack S) int FullStack (stack S) { { return S.Top_idx == size; return S.Top_idx == 0; } }I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Thêm một phần tử có nội dung x vào đầu Stack. void PushStack(int X, stack &S) { if (FullStack(S)) cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Lấy ra phần tử đầu Stack . void PopStack(stack &S) { if (!EmptyStack(S)) S.Top_idx = S.Top_idx + 1; else cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Lấy giá trị phần tử đầu Stack. int TopStack(stack S) { if (!Empty_Stack(S)) return S.e[S.Top_idx]; else { cout I. NGĂN XẾP ( STACK )2. Các phép toán trên ngăn xếp2.2 Cài đặt bằng mảng Xoá toàn bộ stack. Gọi Hàm khởi tạo vì dãy không cần phải xóa phần tửI. NGĂN XẾP ( STACK )3. Ứng dụng Giải bài toán tháp HN Có ba cọc A,B,C. Khởi đầu cọc A có một số đĩa xếp theo thứ tự nhỏ dần lên trên đỉnh. Bài toán đặt ra là phải chuyển toàn bộ chồng đĩa từ A sang B. Mỗi lần thực hiện chuyển một đĩa từ một cọc sang một cọc khác và không được đặt đĩa lớn nằm trên đĩa nhỏI. NGĂN XẾP ( STACK )3. Ứng dụng void Move(int N, int A, int B, int C) //n: so dia, A,B,C: nguon , dich va trung gian { if (N == 1) cout I. NGĂN XẾP ( STACK ) ...
Tìm kiếm theo từ khóa liên quan:
lập trình mạng kỹ thuật lập trình tài liệu lập trình tự học lập trình chuyên ngành công nghệ thông tinTài liệu có liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 309 0 0 -
Đề tài Xây dựng hệ thống quản lý nhân sự đại học Dân Lập
46 trang 279 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 248 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 222 0 0 -
Đề cương chi tiết học phần: Mạng máy tính và lập trình mạng
4 trang 194 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 188 0 0 -
Bài giảng Công nghệ phần mềm - Chương 2: Quy trình xây dựng phần mềm
36 trang 187 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 159 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 143 0 0 -
Báo cáo bài tập lớn môn Mạng máy tính và Lập trình mạng: Tìm hiểu về Soap
32 trang 139 0 0