二进制转换为八进制-栈方式实现
生活随笔
收集整理的這篇文章主要介紹了
二进制转换为八进制-栈方式实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 二進制轉換為八進制
二進制轉換為八進制
? 二進制轉換為八進制,需要使用兩個棧,一個棧用于存儲二進制數據,另一個棧用于存儲八進制數據。
? 每三個二進制數據代表一個八進制數據。因此,需要彈出三個二進制數據并將其轉換為對應的八進制,然后在將八進制數據壓棧。
/*********************************************************** @ 二進制轉換為八進制 * 二進制轉換為八進制,需要兩個棧來實現,一個棧用于存儲二進制數,* 另一個用于存儲八進制數,二進制的每三位代表八進制的一位,彈出二進制* 的三位將其轉換為八進制放入到八進制的棧中*********************************************************/#include <stdio.h> #include <stdlib.h> #include <math.h>#define STACK_INIT_SIZE 20 #define STACKINCREMENT 10typedef char ElemType; typedef struct {ElemType *base;ElemType *top;int stackSize; }sqStack;/*** @brief 初始化棧* @note * @param *s: 棧的地址* @retval None*/ void InitStack(sqStack *s);/*** @brief 壓棧操作* @note * @param *s: 棧的地址* @param e: 壓棧的數據* @retval None*/ void Push(sqStack *s, ElemType e);/*** @brief 出棧操作* @note * @param *s: 棧的地址* @param *e: 出棧的元素* @retval None*/ void Pop(sqStack *s, ElemType *e);/*** @brief 計算棧的長度* @note * @param s: 棧* @retval */ int StackLen(sqStack s);// 函數功能:初始化棧 // 參數*s:棧的地址 void InitStack(sqStack *s) {s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if( !s->base ){exit(0);}s->top = s->base;s->stackSize = STACK_INIT_SIZE; }// 函數功能:入棧操作 // 參數*s:棧的地址 // 參數e:待壓入棧的元素 void Push(sqStack *s, ElemType e) {if( s->top - s->base >= s->stackSize ){s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));if( !s->base ){exit(0);}s->top = s->base + s->stackSize;s->stackSize = s->stackSize + STACKINCREMENT;}*(s->top) = e;s->top++; }// 函數功能:彈棧操作 // 參數*s:棧的地址 // 參數e:存放從棧里彈出的數據 void Pop(sqStack *s, ElemType *e) {if( s->top == s->base ){return;}*e = *--(s->top); }// 函數功能:計算棧s的當前長度 // 參數s:棧 int StackLen(sqStack s) {return (s.top - s.base); }int main() {ElemType c;sqStack s1;sqStack s2;int len, i, j, sum = 0;InitStack(&s1); // 初始化棧s1,用來存放二進制輸入printf("請輸入二進制數,輸入‘#’號表示結束!\n\n");scanf("%c", &c);while( c != '#' ){if( c=='0' || c=='1' ) // 檢查輸入是否二進制Push(&s1, c);scanf("%c", &c);}getchar(); // 把'\n'從緩沖區去掉len = StackLen(s1);printf("二進制棧的大小為: %d\n", len);InitStack(&s2); // 初始化棧s2,用來存放轉換的八進制for( i=0; i < len; i+=3 ){for( j=0; j < 3; j++ ){Pop( &s1, &c ); // 取出棧頂元素sum = sum + (c-48) * pow(2, j);if( s1.base == s1.top ){break;}}Push( &s2, sum+48 );sum = 0;}printf("\n轉化為八進制數是: ");while( s2.base != s2.top ){Pop( &s2, &c );printf("%c", c);}printf("(O)\n");return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的二进制转换为八进制-栈方式实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 专题导读:医学大数据
- 下一篇: 开源大数据平台的安全实践