#include <stdio.h>
#include <malloc.h>
#define ElemType int
//鏈棧類型
typedef struct Node{
ElemType data; //數據域
struct Node *next; //指針域
}SNode, *LinkStack;
//判斷存儲分配是否成功
int MallocOK(LinkStack P){
if(P) return 1;
return 0;
}//MallocOK
//建立一個帶頭結點的空鏈棧S
int InitStack(LinkStack &S){
S=(LinkStack) malloc(sizeof(SNode));
if(MallocOK(S)) S->next=NULL;
return MallocOK(S);
}//InitStack
//輸出鏈棧S中的所有數據元素
void Print(LinkStack S){
LinkStack p=S->next;
printf("/nS = ( ");
while(p){
printf("%d ",p->data);
p=p->next;
}//while
printf(")/n");
}//Print
//向鏈棧S的棧頂壓入一個新的數據元素x
int Push(LinkStack &S,ElemType x){
LinkStack p;
p=(LinkStack) malloc(sizeof(SNode));
if(MallocOK(p)==0) return 0; //存儲分配失敗
p->data=x;
p->next=S->next;
S->next=p;
return 1;
}//Push
// 銷燬鏈棧S
void ClearStack(LinkStack &S){
free(S);
S->next=NULL;
printf("/n鏈棧S已銷燬/n");
}//ClearStack
//對於輸入的任意一個非負十進制整數,打印輸出與其等值的八進制數
//void conversion (int Num)
void main(){
LinkStack S;
int n,Num1,Num2,flag=1;
while (flag==1){
printf("/n請輸入10進制數: ");
scanf("%d",&Num1);
printf("/n將10進制數轉換成(2~9)進制數: ");
scanf("%d",&Num2);
if(Num2<2 || Num2>9) Num2=2;
else{
if(Num1<Num2){n=Num1; Num1=Num2; Num2=n;}
InitStack(S); //構造空鏈棧S
while(Num1){
Push(S, Num1 % Num2);
Num1 = Num1/Num2;
}//while
printf("/n將10進制數%d轉換成%d進制數是",Num1,Num2);
Print(S);
}//if-else
printf("/nContinue conversion ? (1-Continue /0-Over) ");
scanf("%d",&flag);
}
ClearStack(S);
}//main