C語言棧隊列實現二-十/二-八進位轉換

來源:互聯網
上載者:User

標籤:

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語言棧隊列實現二-十/二-八進位轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.