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


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

函數接口定義:

#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--;//其他情況只要棧頂指針減一即可 
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM