用棧實現十進位制到二進位制的轉換
阿新 • • 發佈:2019-02-09
/* 棧,先進後出 */ #include<stdio.h> #include<malloc.h> #define N 1 //初始化記憶體大小,以元素為單位 #define M 1 //記憶體擴增,以元素為單位 struct stack { int *base; int *top; int n; //記錄棧的記憶體大小,以元素為單位 }; struct stack S; void initStack(); void push(int e); void getTop(int &e); void delTop(int &e); int length(); void main() { int a, m, num, i; initStack(); for(i=1; i<=3; i++) { printf("請任意輸入一個十進位制數:\n"); scanf("%d", &num); while(num != 0) { m = num%2; push(m); num /= 2; } printf("對應得二進位制為:"); while(S.n != 0) { delTop(a); printf("%d", a); S.n --; } printf("\n"); } } /*初始化一個棧*/ void initStack() { //構造一個空棧S S.base = (int *)malloc(N*sizeof(int)); if(!S.base) { printf("error"); return; } S.top = S.base; S.n = N; //初始化棧記憶體大小 } /*插入新的棧頂元素*/ void push(int e) { //插入元素e為新的棧頂元素 if(S.top-S.base >= S.n) {//記憶體不足,自動追加 S.base = (int *)realloc(S.base, (S.n + M)*sizeof(int)); if(!S.base) { printf("error"); return; } S.top = S.base + S.n; // S.n += M; } *S.top++ = e;/*棧頂指標的內容為空(看書上圖),將e賦給它,然後top加1*/ } /*取出棧頂元素*/ void getTop(int &e) { //若棧不為空,用e返回大小 if(S.top == S.base) { printf("error"); return; } e = *(S.top - 1); } /*刪除棧頂元素*/ void delTop(int &e) { if(S.top == S.base) { printf("error"); return; } e = *--S.top;/*top指標先減1以指向棧頂元素(top指標實際並不是指向棧頂元素) 將棧頂元素返回後,top指標減1*/ } /*棧中的元素個數*/ int length() { if(S.top == S.base) return 0; return (S.top-S.base)/M - 1; }