Tải bản đầy đủ (.ppt) (13 trang)

CÂU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - NGĂN XẾP potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (112.57 KB, 13 trang )

NGĂN XẾP
STACK
KHÁI NIỆM NGĂN XẾP

Là một danh sách tuyến tính

Bổ sung một phần tử vào ngăn
xếp hoặc lấy một phần tử ra
khỏi ngăn xếp chỉ thực hiện ở
một đầu gọi là đỉnh ngăn xếp
A
B
C
D
Đỉnh
Đáy
Hình ảnh ngăn xếp
Item
BIỂU DIỄN CẤU TRÚC DỮ LIỆU

N là độ dài của ngăn xếp

Item là kiểu dữ liệu của các phần tử

Ngăn xếp là một cấu trúc gồm 2 thành phần

Biến top lưu chỉ số của phần tử mảng lưu phần tử ở
đỉnh ngăn xếp

Mảng E lưu các phần tử của ngăn xếp
#define Max N


//Định nghĩa kiểu Item
struct Stack{
Item E[Max] ;
int top ;
} ;
Stack S ; //Khai báo ngăn xếp S
BIỂU DIỄN CẤU TRÚC DỮ LIỆU
D
C
B
A
0
1
2
top=3
Max=7
E
Ngăn xếp
Chưa có
Mảng lưu trữ ngăn xếp
6
BIỂU DIỄN CẤU TRÚC DỮ LIỆU

N là độ dài của ngăn xếp

Item là kiểu dữ liệu của các phần tử

Ngăn xếp là một bản ghi gồm hai trường

Biến top lưu chỉ số của phần tử mảng lưu phần tử ở

đỉnh ngăn xếp

Mảng E lưu các phần tử của ngăn xếp
Const Max = N ;
Type Stack = Record
E : Array[1 Max] Of Item ;
top : 0 Max ;
End ;
Var S : Stack ; {Khai báo ngăn xếp S}
BIỂU DIỄN CẤU TRÚC DỮ LIỆU
#define Max 100
struct Hoc_sinh{
char ho_ten[25];
int tuoi;
float dtb;
};
struct Stack{
Hoc_sinh E[Max];
int top;
};
Stack S;
Ví dụ: Ngăn xếp chứa thông tin học sinh
CÁC PHÉP TOÁN TRÊN NX

Khởi tạo ngăn xếp rỗng
void Initialize (Stack &S)
{
S.top = -1;
}


Kiểm tra ngăn xếp rỗng
int Empty (Stack S)
{
return (S.top == -1);
}
0
1
2
3
Max=7
E
4
5
Ngăn xếp rỗng
top = -1
6
CÁC PHÉP TOÁN TRÊN NX

Kiểm tra ngăn xếp đầy
int Full (Stack S)
{
return (S.top == Max-1);
}
0
1
2
3
Max=7
E
G

F
E
D
C
B
A
4
5
Ngăn xếp đầy
top = Max-16
CÁC PHÉP TOÁN TRÊN NX

Bổ sung một phần tử X vào đỉnh ngăn xếp S
0
1
2
Max=7
E
D
C
B
A
4
5
top = 4
0
1
2
3
Max=7

E
D
C
B
A
5
top 3
X
top = 4
0
1
2
3
E
X
D
C
B
A
5
6
6
Max=7
6
CÁC PHÉP TOÁN TRÊN NX

Bổ sung một phần tử vào đỉnh ngăn xếp S
int PUSH (Stack &S, Item X)
{
if ( Full(S)) return 0;

else
{
S.top++;
S.E[S.top] = X;
return 1;
}
}
CÁC PHÉP TOÁN TRÊN NX

Lấy một phần tử ở đỉnh ngăn xếp S
0
1
2
Max=7
E
D
C
B
A
4
5
top = 2
0
1
4
3
Max=7
E
C
B

A
5
top = 3
D
6
6
CÁC PHÉP TOÁN TRÊN NX

Lấy một phần tử ở đỉnh ngăn xếp S
Int POP (Stack &S, Item &Y)
{
if (Empty(S))
return 0;
else
{
Y = S.E[S.top];
S.top ;
return 1;
}
}
CÁC PHÉP TOÁN TRÊN NX

Ví dụ ứng dụng
Viết chương trình:
- Nhập số nguyên dương N
- Đổi số N sang dạng mã nhị phân tương ứng của nó.
- In kết quả ra màn hình

×