數制轉換(基於鏈棧)

2021-07-02 07:57:18 字數 1957 閱讀 1388

只需在鏈棧的基礎上加上數制轉換函式:

void coversion(stack *st)。

具體**如下:

void coversion(stack *st)//數制轉換

while(!stackempty(st))

node,*pnode;

typedef struct stack

stack;

int stackempty(stack *st);

void initstack(stack *st);//初始化

bool push(stack *st,elemtype x);//尾插

bool pop(stack *st);//頭刪

void showstack(stack *st);//列印

void clear(stack *st);//清除

void destroy(stack *st);//摧毀

int length(stack *st);//長度

elemtype gettop(stack *st);//棧頂元素

void coversion(stack *st);//數制轉換

#endif

函式定義檔案

#include "stack.h"

int stackempty(stack *st)

return 0;

}void initstack(stack *list)//初始化

bool push(stack *st, elemtype x)//尾插

void showstack(stack *st)//列印

}bool pop(stack *st)//頭刪

else

st->size--;

return true;

}elemtype gettop(stack *st)//棧頂元素

return st->top->next->data;

}void clear(stack *st)//清除

st->rear = st->top ;

st->size = 0;

}void destroy(stack *st)//摧毀

int length(stack *st)//長度

void coversion(stack *st)//數制轉換

while(!stackempty(st))

此數制可以講十進位制數轉換為任意進製,測試方法簡單故不進行結果截圖。望大家提出建議,謝謝。

在後期的測試中發現此程式**有乙個致命的錯誤,他無法正確的實現向16進製制的轉換,改進的專門對十進位制向十六進製制轉換的函式如下:

方法一

char* convert_16_1(unsigned long value)//用陣列儲存

return buffer;

}

其中buffer[i] = "0123456789abcdef"[value%16]即指的是指向求模後餘數所指向的下標代表的數。

相關知識點如下:

"xyz"+1   字串常量實際是個指標,此表示式的意思是「指標值加上1」的值,仍為指標,指向y

*"xyz"    對指標執行簡介訪問操作,其結果就是指標所指向的內容。字串常量的型別是「指向

字元的指標」,所以這個間接訪問的結果是它所指向的字元:x

"xyz"[2]  指向下標2,即為z

*("xyz"+4)錯誤。偏移量4超出字串的範圍,所以表示式的結果是乙個不可**的數字。

方法二

char* convert_16_2(unsigned long value)

else

value /= 16;

} return buffer;

}

用棧轉換數制

有了前面的基礎,這個就變得比較簡單了,這裡就不做細說 include using namespace std define stack init size 100 define stackincrement 10 typedef int elemtype typedef struct sqstack...

順序棧實現數制轉換

include include define stacksize 100 假定預分配的棧空間最多為100個元素 typedef int datatype 應將順序棧的datatype定義改為整型 typedef struct seqstack void main void initstack seq...

棧的應用(數制轉換)

程式功能 對於輸入的任意乙個非負十進位制整數,列印輸出與其等值的八進位制數。標頭檔案 c3 1.h ifndef c 3 1 h define c 3 1 h include include include define true 1 define false 0 endif algorithm.h...