1. 程式人生 > 其它 >十進位制轉二進位制(順序棧設計和應用)

十進位制轉二進位制(順序棧設計和應用)

設計一個順序棧,並利用該順序棧將給定的十進位制整整數轉換為二進位制並輸出。

函式介面定義:

#define MaxSize 100    /* 棧最大容量 */
int top;        /* 棧頂指標 */
int mystack[MaxSize];    /* 順序棧 */

/*判棧是否為空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入棧 */
void Push(int x);

/* 取棧頂元素 */
int getTop();

/* 刪除棧頂元素 */
void Pop();

其中 MaxSizetop 分別為棧的最大容量和棧頂指標。陣列mystack

用來模擬順序棧。請實現給出的isEmptyPushgetTopPop這四個函式。

裁判測試程式樣例:

#include <bits/stdc++.h>
using namespace std;

#define MaxSize 100        /* 棧最大容量 */
int top;                /* 棧頂指標 */
int mystack[MaxSize];    /* 順序棧 */

/*判棧是否為空,空返回true,非空返回false */
bool isEmpty();

/* 元素x入棧 */
void Push(int x);

/* 取棧頂元素 */
int getTop();

/* 刪除棧頂元素 */
void Pop();

/* 十進位制正整數轉換為二進位制 */
void dec2bin(int x) {
    top = -1;            /* 初始化棧頂指標 */
    while (x) {
        Push(x % 2);
        x >>= 1;
    }
    while (!isEmpty()) {
        int t = getTop();
        Pop();
        printf("%d", t);
    }
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int n;
    while (scanf("%d", &n) != EOF) {
        dec2bin(n);
    }
    return 0;
}

/* 請在這裡填寫答案 */

輸入樣例:

10



結尾無空行

輸出樣例:

1010



結尾無空行

Answer

/*判棧是否為空,空返回true,非空返回false */
bool isEmpty() {
	if(top == -1)//如果棧頂指標是-1則沒有元素為空 
		return true;
	else
		return false;
};

/* 元素x入棧 */
void Push(int x) {
	if(top+1 > MaxSize) {//棧頂指標是指向棧頂元素上一個位置,則只要棧頂指標+1大於順序棧陣列最大數則棧滿 
		printf("棧已滿!");
		return; 
	}
	if(top == -1) {
		mystack[++top] = x;//如果是空棧,需要讓棧頂指標先加一指向0,再入棧 
		top++;//棧頂指標是指向棧頂元素上一個位置,則還需要再加一 
		
	}else{
		mystack[top++] = x;//其他情況則只用先入棧後,棧頂指標再加一即可 
	}
};

/* 取棧頂元素 */
int getTop() {
	return mystack[top-1];//棧頂指標減一的位置即為棧頂元素 
};

/* 刪除棧頂元素 */
void Pop() {
	if(top == 1)
		top = -1;//如果只剩一個元素,只用讓棧頂指標為-1即可 
	else
		top--;//其他情況只要棧頂指標減一即可 
};