Ngăn xếp Stack - Kiểu cài 4: Cài dựa trên danh sách liên kết
Tạo 1 file tên thuvien_list.cpp với nội dung như sau:
Tạo 1 file tên thuvien_list.cpp với nội dung như sau:
#include <stdio.h>
#include <malloc.h>
typedef int ElementType;
typedef struct Node{
ElementType Element;
Node* Next;
};
typedef Node* Position;
typedef Position List;
void MakeNullList(List &L){
L =(Node*)malloc(sizeof(Node));
L->Next = NULL;
}
int EmptyList(List L){
return (L->Next==NULL);
}
Position i2p(int i, List L){
Position P = L;
for(int k=1;k<i;k++)
P=P->Next;
return P;
}
void InsertList(ElementType X, int p, List &L){
Node* T = (Node*)malloc(sizeof(Node));
Position P = i2p(p,L);
T->Element = X;
T->Next = P->Next;
P->Next = T;
}
void DeleteList(int p, List &L){
if (L->Next!=NULL){
Position P = i2p(p,L);
Position T=P->Next;
P->Next = T->Next;
free (T);
}
}
ElementType Retrieve(int P, List L){
return i2p(P,L)->Next->Element;
}
Tiếp tục tạo file tên ngan_xep.cpp cùng thư mục với file thuvien_list.cpp với nội dung sau:#include "thuvien_list.cpp"
typedef List Stack;
void MakeNullStack(Stack &S){
MakeNullList(S);
}
int EmptyStack(Stack S){
return EmptyList(S);
}
void Push(ElementType X, Stack &S){
InsertList(X,1,S);
}
void Pop(Stack &S){
DeleteList(1,S);
}
ElementType Peek(Stack S){
return Retrieve(1,S);
}
void NhiPhan(int n){
Stack S;
MakeNullStack(S);
while(n!=0){
int sodu = n % 2;
Push(sodu,S);
n = n / 2;
}
while(!EmptyStack(S)){
printf("%d",Peek(S));
Pop(S);
}
printf("\n");
}
int main(){
int n;
printf("Nhap so nguyen n = ");
scanf("%d",&n);
for(int i=2;i<=n;i++){
printf("%d = ",i);
NhiPhan(i);
}
return 0;
}