棧 利用棧實現進製轉換

2021-08-17 21:54:17 字數 3742 閱讀 9083

利用棧的資料結構特點,將二進位制轉換為十進位制數。

二進位制數是計算機資料的儲存形式,它是由一串0和1組成的,每個二進位制數轉換成相應的十進位制數方法如下:

(xnxn-1……x3x2x1)2 = x1*2^0+x2*2^1+…+xn*2^(n-1)

乙個二進位制數要轉換為相應的十進位制數,就是從最低位起用每一位去乘以對應位的積,也就是說用第n位去乘以2^(n-1),然後全部加起來。

由於棧具有後進先出的特性,

例如輸入11001001這樣的二進位制數,

如圖:

**實現:

#include #include #include #define stack_init_size 20   

#define stackincrement 10

typedef char elemtype;

typedef struct

sqstack;

void initstack(sqstack *s)

s->top = s->base;

s->stacksize = stack_init_size;

}void push(sqstack *s, elemtype e)

}*(s->top) = e;

s->top++;

}void pop(sqstack *s, elemtype *e)

*e = *--(s->top);

}int stacklen(sqstack s)

int main()

getchar(); // 把'\n'(回車)從緩衝區去掉

len = stacklen(s);

printf("棧的當前容量是: %d\n", len);

for( i=0; i < len; i++ )

printf("轉化為十進位制數是: %d\n", sum);

return 0;

}

二進位制是計算機唯一認識的,十進位制是人們通常使用的。

觀察二進位制跟十六進製制的對應關係:

可見乙個位元組(8bit)剛好用兩個十六進製制數可以表示完整,也大大的節省了顯示空間。

八進位制:因為早期的計算機系統都是三的倍數,所以用八進位制比較方便。

在進行二進位製到八進位制的轉換時,要將二進位制數的每三位轉換成乙個八進位制數來表示,然後按順序輸出即可。

**實現:

/**  二進位制/八進位制轉換器   **/

#include #include #include #define stack_init_size 20

#define stackincrement 10

typedef char elemtype;

typedef struct

sqstack;

// 函式功能:初始化棧

void initstack(sqstack *s)

s->top = s->base;

s->stacksize = stack_init_size;

}// 函式功能:入棧操作

// 引數e:待壓入棧的元素

void push(sqstack *s, elemtype e)

s->top = s->base + s->stacksize;

s->stacksize = s->stacksize + stackincrement;

}*(s->top) = e;

s->top++;

}// 函式功能:彈棧操作

// 引數e:存放從棧裡彈出的資料

void pop(sqstack *s, elemtype *e)

*e = *--(s->top);

}// 函式功能:計算棧s的當前長度

// 引數s:棧

int stacklen(sqstack s)

int main()

getchar(); // 把'\n'從緩衝區去掉

len = stacklen(s1);

initstack(&s2); // 初始化棧s2,用來存放轉換的八進位制

for( i=0; i < len; i+=3 )

}push( &s2, sum+48 );

sum = 0;

}printf("\n轉化為八進位制數是: ");

while( s2.base != s2.top )

printf("(o)\n");

return 0;

}

**實現:

/** 二進位制/十六進製制轉換器  **/

#include #include #include #define stack_init_size 20

#define stackincrement 10

typedef char elemtype;

typedef struct

sqstack;

// 函式功能:初始化棧

void initstack(sqstack *s)

s->top = s->base;

s->stacksize = stack_init_size;

}// 函式功能:入棧操作

// 引數e:待壓入棧的元素

void push(sqstack *s, elemtype e)

s->top = s->base + s->stacksize;

s->stacksize = s->stacksize + stackincrement;

}*(s->top) = e;

s->top++;

}// 函式功能:彈棧操作

// 引數e:存放從棧裡彈出的資料

void pop(sqstack *s, elemtype *e)

*e = *--(s->top);

}// 函式功能:計算棧s的當前長度

// 引數s:棧

int stacklen(sqstack s)

int main()

getchar(); // 把'\n'從緩衝區去掉

len = stacklen(s1);

initstack(&s2); // 初始化棧s2,用來存放轉換的八進位制

for( i=0; i < len; i+=4 )

}switch( sum )

push( &s2, sum );

sum = 0;

}printf("\n轉化為十六進製制數是: ");

while( s2.base != s2.top )

printf("(h)\n");

return 0;

}

利用棧實現整型多進製轉換

include include includeusing namespace std void multioutput int num,int b while st.empty return 0 關於棧中為什麼pop元素沒有返回值,而是使用top來返回元素的值,這裡要做一下說明,如果pop返回棧頂部...

用棧實現進製轉換

在本例中,用棧實現二進位製到十進位制的轉換,其他進製轉換類似 本例使用的棧的結構如下 如下 include include using namespace std typedef struct node node,pnode 棧中每個元素都是節點,這裡定義節點 typedef struct stac...

順序棧實現進製轉換

1.定義乙個順序棧的結構體。typedef struct sqstack 2.寫乙個建立空順序棧的函式 status init stack sqstack s 3.寫乙個輸出順序棧元素的函式 status exit stack sqstack s printf n 4.這裡進製轉換的方法就是,先把k...