Cấu trúc dữ liệu: Ngăn Xếp Stack - Kiểu cài 4


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:

#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;
}

Bài liên quan

Bài liên quan