Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
363,76 KB
Nội dung
Cấu trúc liệu giải thuật Đỗ Tuấn Anh anhdt@it-hut.edu.vn Nội dung Chương – Thiết kế phân tích (5 tiết) Chương – Giải thuật đệ quy (10 tiết) Chương – Mảng danh sách (5 tiết) Chương – Ngăn xếp hàng đợi (10 tiết) Chương – Cấu trúc (10 tiết) Chương – Tìm kiếm (5 tiết) Chương – Sắp xếp (10 tiết) Chương – Đồ thị (5 tiết) Chương – Ngăn xếp hàng đợi Định nghĩa Stack Lưu trữ với Stack (sử dụng mảng) Ứng dụng Stack Định nghĩa Queue Lưu trữ với Queue (sử dụng mảng) Ứng dụng Queue (not yet) Lưu trữ móc nối với Stack Lưu trữ móc nối với Queue (bài tập) Stack cài đặt đệ quy (not neccesary) Định nghĩa Stack Hai danh sách tuyến tính đặc biệt: Ngăn xếp – Stack Hàng đợi – Queue Stack: danh sách mà xóa thêm phần tử bắt buộc phải thực đầu (đỉnh) Push Pop top top top Pop top Ví dụ Stack thực tế Ví dụ Stack thực tế • Stack cấu trúc LIFO: Last In First Out Các thao tác Stack Push Thêm phần tử Tràn (overflow) Pop Xóa phần tử Underflow Top Phần tử đỉnh stack rỗng Kiểm tra rỗng/đầy Push Thêm phần tử vào đỉnh stack Pop Rút phần tử khỏi đỉnh stack Top Kiểm tra phần tử đỉnh Stack không thay đổi Push/Pop Stack Stack rỗng thêm phần tử Thêm phần tử khác top top top A Lấy phần tử khỏi Stack top A B A Lưu trữ Stack cách lưu trữ: Lưu trữ kế tiếp: sử dụng mảng Lưu trữ móc nối: sử dụng danh sách móc nối Lưu trữ Stack Mảng Stack lưu trữ mảng Số phần tử giới hạn Figure 4-20 Cấu trúc liệu /* Stack số nguyên: intstack */ typedef struct intstack { int *stackAry;/* mảng lưu trữ phần tử */ int count; /* số ptử có stack */ int stackMax; /* giới hạn Max số ptử */ int top; /* số phần tử đỉnh */ }IntStack; Tràn Cạn Cạn (underflow) xảy cố gắng rút phần tử từ stack rỗng Pop Tràn (overflow) xảy đẩy thêm phần tử vào stack đầy 18 … 11 Push int PushStack(IntStack *stack, int dataIn) { /* Kiểm tra tràn */ if (stack->count == stack->stackMax) return 0; /* Thêm phần tử vào stack */ (stack->count)++; (stack->top)++; /* Tăng đỉnh */ stack->stackAry[stack->top] =dataIn; return 1; } /* pushStack */ Pop int PopStack (IntStack *stack, int *dataOut) { /* Kiểm tra stack rỗng */ if (stack->count == 0) return 0; /* Lấy giá trị phần tử bị loại*/ *dataOut=stack->stackAry[stack->top]; (stack->count) ; (stack->top) ; /* Giảm đỉnh */ return 1; } /* popStack */ Top /* Lấy phần tử đỉnh stack Trả lại thành công; stack rỗng dataOut chứa kết */ int TopStack (IntStack *stack, int* dataOut) { if (stack->count == 0) // Stack rỗng return 0; *dataOut = stack->stackAry[stack->top]; return 1; } /* stackTop */ Kiểm tra rỗng? /* Kiểm tra stack rỗng Trả lại rỗng không rỗng */ int IsEmptyStack (IntStack *stack) { return (stack->count == 0); } /* emptyStack */ Kiểm tra đầy? /* Kiểm tra stack đầy Trả lại đầy không đầy */ int IsFullStack (IntStack *stack) { return(stack->count==stack->stackMax); } /* fullStack */