STACK
Phương pháp cài đặt:
- Minh họa bằng con trỏ có đầu (Header).
- Chèn đầu.
- Xóa đầu.
CẤU TRÚC DỮ LIỆU ĐỀ NGHỊ CHO STACK
Code:
typedef ... ElementType;
typedef struct Node {
ElementType Element;
Node *Next;
};
typedef Node *Stack;
XÂY DỰNG SỐ HÀM CƠ BẢN
- Khởi tạo Stack rỗng
Code:
Stack MakeNull_Stack(){
Stack Header = (Node*)malloc(sizeof(Node));
(Header)->Next = NULL;
return Header;
}
- Kiểm tra Stack rỗng
Code:
char Empty_Stack(Stack S) {
return S->Next == NULL;
}
- Thêm một phần tử vào stack
Code:
void Push(ElementType X, Stack P) {
Node *Temp = Make_Node(X);
Temp->Next = P->Next;
P->Next = Temp;
}
- Xóa phần tử khỏi Stack
Code:
void Pop(Stack P){
Stack Temp;
if (!Empty_Stack(P)){
Temp = P->Next;
P->Next = Temp->Next;
free(Temp);
}
}
- Nhập Stack
Code:
Stack Input_Stack(int n) {
Stack L = MakeNull_Stack();
ElementType x;
for(int i = 1; i<=n; i++) {
printf("Phan tu %d = ",i);
scanf("%d",&x);
Push(x,L);
}
return L;
}
- Xuất Stack
Code:
void Out_Stack(Stack L) {
Stack temp = L;
while(!Empty_Stack(temp)) {
printf("%d\t",temp->Next->Element);
temp = temp->Next;
}
}
CHƯƠNG TRÌNH MẪU
Code:
#include "conio.h"
#include "stdio.h"
#include "alloc.h"
typedef int ElementType;
typedef struct Node {
ElementType Element;
Node *Next;
};
typedef Node *Stack;
//khoi tao danh sach rong
Stack MakeNull_Stack(){
Stack Header = (Node*)malloc(sizeof(Node));
(Header)->Next = NULL;
return Header;
}
//kiem tra danh sach rong
char Empty_Stack(Stack S) {
return S->Next == NULL;
}
//Khoi tao 1 node
Node *Make_Node(ElementType X) {
Node *temp = (Node*)malloc(sizeof(Node));
temp->Element = X;
return temp;
}
//xem mot phan tu vao stack
void Push(ElementType X, Stack P) {
Node *Temp = Make_Node(X);
Temp->Next = P->Next;
P->Next = Temp;
}
//day 1 phan tu ra khoi stack
void Pop(Stack P){
Stack Temp;
if (!Empty_Stack(P)){
Temp = P->Next;
P->Next = Temp->Next;
free(Temp);
}
}
Stack Input_Stack(int n) {
Stack L = MakeNull_Stack();
ElementType x;
for(int i = 1; i<=n; i++) {
printf("Phan tu %d = ",i);
scanf("%d",&x);
Push(x,L);
}
return L;
}
void Out_Stack(Stack L) {
Stack temp = L;
while(!Empty_Stack(temp)) {
printf("%d\t",temp->Next->Element);
temp = temp->Next;
}
}
void main() {
clrscr();
int n = 3;
Stack L = Input_Stack(n);
Out_Stack(L);
printf("\n Pop :\t");
Pop(L);
Out_Stack(L);
printf("\n Pop :\t");
Pop(L);
Out_Stack(L);
printf("\n Pop :\t");
Pop(L);
Out_Stack(L);
getch();
}