標籤:
C語言棧隊列實現二-十/二-八進位轉換
2015-04-05 Lover雪兒
1 //利用棧來求取位元的十進位與八進位的結果 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 20 //初始棧大小 7 #define STACK_INCREMENT 10 //擴充棧時每次增加的記憶體 8 9 typedef char ElemType; //棧中的資料類型10 typedef struct {11 ElemType *base;12 ElemType *top;13 int stackSize;14 }sqStack;15 16 //初始化棧17 void init_stack(sqStack *s){18 s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));19 if(!s->base)20 exit(-1);21 s->top = s->base;22 s->stackSize = STACK_INIT_SIZE;23 }24 //入棧25 void push(sqStack *s,ElemType e){26 if(s->top - s->base >= s->stackSize){ //檢測棧是否已滿27 //若是已滿,則自動擴大棧空間28 s->base = (ElemType *)realloc(s->base, (s->stackSize + STACK_INCREMENT)*sizeof(ElemType));29 if(!s->base)30 exit(-1);31 }32 *(s->top) = e;33 s->top++;34 }35 //出棧36 void pop(sqStack *s, ElemType *e){37 if(s->top == s->base){38 return ;39 }40 *e = *(--(s->top));41 }42 //求棧資料的個數,由於我們不會對其修改,故此處不需傳指標43 int stack_len(sqStack s){44 return (s.top - s.base); //返回資料的個數 45 }46 47 int main(void){48 ElemType c;49 sqStack s;50 int len = 0, i = 0, sum_10 = 0;51 int j = 0, sum_8 = 0,tmp_8 = 0;52 53 init_stack(&s); //初始化棧54 while(1){55 printf("請輸入位元,輸入#符號表示結束,開頭輸入q/Q退出!\n");56 scanf("%c",&c); //按字元格式設定接收57 if(c == ‘q‘ || c == ‘Q‘)58 break;59 while(c != ‘#‘){60 push(&s,c); //入棧61 scanf("%c",&c);62 }63 getchar(); //將斷行符號從當前緩衝區去除,使用者按下斷行符號後結束64 65 len = stack_len(s); //擷取棧的當前容量66 printf("棧的當前容量是: %d\n",len);67 68 for(i = 0; i<len ; i++){69 pop(&s, &c); //傳值使用引用方式70 sum_10 =(int)( sum_10 + (c-48) * pow(2 , i)); //將ASCII轉換為整形71 72 tmp_8 =(int)( tmp_8 + (c-48) * pow(2 , i%3)); //將ASCII轉換為整形73 74 //printf("%d %d\n",i%4,tmp_8);75 if(i%3 == 2){ 76 sum_8 += (int)(tmp_8 * pow(10 , (j++)));77 tmp_8 = 0;78 } 79 }80 if(tmp_8 != 0){81 sum_8 += (int)(tmp_8 * pow(10 , (j++)));82 tmp_8 = 0;83 j = 0;84 }85 printf("轉換為十進位數是: %d 八位元: 0%d\n",sum_10,sum_8);86 sum_10 = 0;87 sum_8 = 0;88 j = 0;89 }90 return 0;91 }
C語言棧隊列實現二-十/二-八進位轉換