十進位制轉二進位制(順序棧設計和應用)
阿新 • • 發佈:2021-10-09
設計一個順序棧,並利用該順序棧將給定的十進位制整整數轉換為二進位制並輸出。
函式介面定義:
#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--;//其他情況只要棧頂指標減一即可 };