Là một dạng danh sách ñặc biệt mà việc
thêm vào hay xóa phần tử chỉ thực hiện tại
một ñầu, gọi làñỉnh của ngăn xếp.
Làm việc theo nguyên tắc FILO(First In Last
Out) hay LIFO (Last In First Out)
10 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1374 | Lượt tải: 0
Nội dung tài liệu Công nghệ phần mềm - Cấu trúc ngăn xếp (stack), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CẤU TRÚC NGĂN XẾP
(STACK)
Bộ môn Công nghệ phần mềm
Khoa Công nghệ thông tin & Truyền thông
Đại học Cần Thơ
KHÁI NIỆM NGĂN XẾP
Là một dạng danh sách ñặc biệt mà việc
thêm vào hay xóa phần tử chỉ thực hiện tại
một ñầu, gọi là ñỉnh của ngăn xếp.
Làm việc theo nguyên tắc FILO(First In Last
Out) hay LIFO (Last In First Out)
PHÉP TOÁN TRÊN NGĂN XẾP
MAKENULL_STACK(S): khởi tạo ngăn xếp
rỗng.
EMPTY_STACK(S): kiểm tra ngăn xếp rỗng.
TOP(S): phần tử ñầu tiên trên ñỉnh ngăn xếp.
POP(S): xóa phần tử ở ñỉnh ngăn xếp.
PUSH(X,S): thêm phần tử X vào ñỉnh ngăn
xếp S.
FULL_STACK(S): kiểm tra ngăn xếp ñầy.
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Mô hình lưu trữ:
Khai báo:
#define MaxLength
typedef ElementType;
typedef struct {
ElementType Elements[MaxLength];
int top_index;
} Stack;
Stack S;
elements
top_index
0
1
.
.
.
maxlength - 1
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Khởi tạo ngăn xếp rỗng:
void MakeNull_Stack(Stack *S){
S->top_index = MaxLength;
}
elements
top_index
0
1
.
.
.
maxlength - 1
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Kiểm tra ngăn xếp rỗng ?
int Empty_Stack(stack S){
return S.top_index == MaxLength;
}
Kiểm tra ngăn xếp ñầy ?
int Full_Stack(Stack S){
return S.top_index == 0;
}
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Nếu ngăn xếp rỗng thì thông báo lỗi
Ngược lại, trả về nội dung phần tử mảng có
chỉ số top_index.
ElementType Top(stack S){
if (Empty_Stack(S))
printf("Loi! Ngan xep rong");
else
return S.Elements[S.top_index];
}
Trả về phần tử ở ñỉnh ngăn xếp
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Nếu ngăn xếp rỗng thì báo lỗi
Ngược lại: tăng top_index lên 1 ñơn vị
void Pop(Stack *S){
if (Empty_Stack(*S))
printf("Loi! Ngan xep rong!");
else
S->top_index = S->top_index+1;
}
Xóa phần tử ở ñỉnh ngăn xếp
CÀI ĐẶT NGĂN XẾP BẰNG MẢNG
Nếu ngăn xếp ñầy thì báo lỗi
Ngược lại: giảm top_index 1 ñơn vị, ñặt X
vào phần tử mảng có chỉ số top_index.
void Push(ElementType X, Stack *S){
if (Full_Stack(*S))
printf("Loi! Ngan xep day!");
else{
S->top_index = S->top_index-1;
S->Elements[S->top_idx] = X;
}
Thêm phần tử vào ñỉnh ngăn xếp
CÀI ĐẶT NGĂN XẾP BẰNG DSÁCH
Khai báo: typedef List Stack;
Tạo ngăn xếp rỗng: MakeNull_List
Kiểm tra ngăn xếp rỗng: Empty_List
Thêm phần tử: Insert_List tại First
Xóa phần tử: Delete_List tại First
Các file đính kèm theo tài liệu này:
- nganxep_8977.pdf