設計一個順序棧,並利用該順序棧將給定的十進制整整數轉換為二進制並輸出。
函數接口定義:
#define MaxSize 100 /* 棧最大容量 */
int top; /* 棧頂指針 */
int mystack[MaxSize]; /* 順序棧 */
/*判棧是否為空,空返回true,非空返回false */
bool isEmpty();
/* 元素x入棧 */
void Push(int x);
/* 取棧頂元素 */
int getTop();
/* 刪除棧頂元素 */
void Pop();
其中 MaxSize
和 top
分別為棧的最大容量和棧頂指針。數組mystack
用來模擬順序棧。請實現給出的isEmpty
、Push
、getTop
和Pop
這四個函數。
裁判測試程序樣例:
#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--;//其他情況只要棧頂指針減一即可
};