鏈棧表示

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章