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();
}