intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Cấu trúc dữ liệu 1: Chương 3D - Huỳnh Cao Thế Cường

Chia sẻ: BDBC BDBC | Ngày: | Loại File: PPT | Số trang:57

49
lượt xem
3
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Các nội dung chính được trình bày trong chương này gồm có: Ngăn xếp (stack), minh họa thao tác, cài đặt ngăn xếp bằng mảng, cài đặt ngăn xếp bằng con trỏ, hàng đợi (queue), cài đặt hàng bằng mảng theo phương pháp tịnh tiến, cài đặt hàng với mảng xoay vòng,... Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Cấu trúc dữ liệu 1: Chương 3D - Huỳnh Cao Thế Cường

  1. TRƯỜNG ĐẠI HỌC AN GIANG KHOA KỸ THUẬT­ CÔNG NGHỆ ­ MÔI TRƯỜNG CẤU TRÚC DỮ LIỆU 1 Giảng viên phụ trách: HUỲNH CAO THẾ CƯỜNG Bộ môn Tin học email: hctcuong@agu.edu.vn 1 1
  2. NGĂN XẾP (STACK) Ngăn xếp (Stack): là một danh sách mà 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. Stack là một cấu trúc có tính chất “vào sau - ra trước” hay “vào trước – ra sau“ (LIFO (last in - first out ) hay FILO (first in – last out)). 2
  3. NGĂN XẾP (STACK) Đỉnh  ngăn  Push Pop xếp 3
  4. Minh họa thao tác PUSH Data Top 4
  5. Minh họa thao tác POP Data Top 5
  6. Minh họa thao tác TOP Data ? Top ? 6
  7. NGĂN XẾP (STACK) Các phép toán trên ngăn xếp  MAKENULL_STACK(S): tạo một ngăn xếp rỗng.  TOP(S) hàm trả về phần tử tại đỉnh ngăn xếp.  POP(S) xoá một phần tử tại đỉnh ngăn xếp.  PUSH(x,S) thêm một phần tử x vào đầu ngăn xếp.  EMPTY_STACK(S) kiểm tra ngăn xếp 7
  8. Cài đặt ngăn xếp bằng mảng 8
  9. Cài đặt ngăn xếp bằng mảng Khai báo ngăn xếp #define MaxLength ... //độ dài của mảng typedef ... ElementType; //kiểu các phần tử trong ngăn xếp typedef struct { ElementType Elements[MaxLength]; //Lưu nội dung của các phần tử int Top; //giữ vị trí đỉnh ngăn xếp } Stack; 9
  10. Cài đặt ngăn xếp bằng mảng Tạo ngăn xếp rỗng  Ngăn xếp rỗng là ngăn xếp không chứa bất kỳ một phần tử nào, do đó đỉnh của ngăn xếp không được phép chỉ đến bất kỳ vị trí nào trong mảng. void Makenull_Stack(Stack *S) { S->Top=MaxLength; } 10
  11. Cài đặt ngăn xếp bằng mảng Kiểm tra ngăn xếp rỗng int IsEmpty_Stack(Stack S) { return S.Top==MaxLength; } Kiểm tra ngăn xếp đầy int IsFull_Stack(Stack S) { return S.Top==0; } 11
  12. Cài đặt ngăn xếp bằng mảng Lấy nội dung phần tử tại đỉnh của ngăn xếp ElementType Top(Stack S) { if (!IsEmpty_Stack(S)) return S.Elements[S.Top]; else printf("Loi! Ngan xep rong"); } 12
  13. Cài đặt ngăn xếp bằng mảng Chú ý Nếu ElementType không thể là kiểu kết quả trả về của một hàm thì ta có thể viết Hàm Top như sau: void Top2(Stack S, Elementtype *X) { //Trong đó x sẽ lưu trữ nội dung phần tử //tại đỉnh của ngăn xếp if (!IsEmpty_Stack(S)) *X = S.Elements[S.Top]; else printf(“Loi: Ngan xep rong “); } 13
  14. Cài đặt ngăn xếp bằng mảng xóa phần tử ra khỏi ngăn xếp void Pop(Stack *S) { if (!IsEmpty_Stack(*S)) S->Top=S->Top+1; else printf("Loi! Ngan xep rong!"); } 14
  15. Cài đặt ngăn xếp bằng mảng Thêm phần tử vào ngăn xếp void Push(ElementType X, Stack *S) { if (IsFull_Stack(*S)) printf("Loi! Ngan xep day!"); else { S->Top=S->Top-1; S->Elements[S->Top]=X; } } 15
  16. Cài đặt ngăn xếp bằng con trỏ Khai báo ngăn xếp typedef … ElementType; struct Node { ElementType Element; Node *Next; }; typedef struct Node *PtrToNode; typedef PtrToNode Position; typedef PtrToNode Stack; 16
  17. Cài đặt ngăn xếp bằng con trỏ Tạo ngăn xếp rỗng void Makenull_Stack( Stack &S ) { S = new Node; S->Next = NULL; } Kiểm tra ngăn xếp rỗng int IsEmpty_Stack( Stack S ) { return S->Next == NULL; } 17
  18. Cài đặt ngăn xếp bằng con trỏ Lấy nội dung phần tử tại đỉnh của ngăn xếp ElementType Top( Stack S ) { return S->Next->Element; } 18
  19. Cài đặt ngăn xếp bằng con trỏ xóa phần tử ra khỏi ngăn xếp void Pop(Stack S ) { Position P, TmpCell; P = Header(S); if( P->Next!=NULL ) { TmpCell = P->Next; P->Next = TmpCell->Next; free( TmpCell ); } } 19
  20. Cài đặt ngăn xếp bằng con trỏ Thêm phần tử vào ngăn xếp void Push( ElementType X, Stack S ) { Position TmpCell, P; P = Header(S); TmpCell = new Node; if( TmpCell == NULL ) printf( "Out of space!!!" ); TmpCell->Element = X; TmpCell->Next = P->Next; P->Next = TmpCell; } 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2