用鏈棧實現十進位制到二進位制的轉換
阿新 • • 發佈:2018-11-27
#include <iostream> using namespace std; typedef struct Stack{ int data; int length; Stack *next; } StackNode, *LinkStack; bool StackInit(LinkStack &S) // 初始化函式,初始為空 { S = NULL; return true; } bool StackPush(LinkStack &S, int e) // 入棧 { LinkStack p = new StackNode; // 生成新節點 p->data = e; // 生成資料域 if(S == NULL) // 棧的長度加一 p->length = 1; else p->length = S->length + 1; p->next = S; // 插入在棧頂 S = p; // 修改棧頂, S 始終指向棧頂 return true; } bool StackPop(LinkStack &S) // 出棧 { LinkStack p = S; if(S == NULL) return false; else { S = S->next; // 棧頂指標後移 delete p; return true; } } int StackTop(const LinkStack &S) // 取出棧頂元素 { if(S == NULL) return false; else return S->data; } int StackLength(const LinkStack &S) // 求棧的長度 { if(S == NULL) return 0; else return S->length; } bool StackClear(LinkStack &S) // 清空棧 { LinkStack p; while(S) { p = S; S = S->next; delete p; } return true; } void change(LinkStack &S, int n) // 十進位制到二進位制轉換函式 { int e; do{ e = n % 2; n = n / 2; StackPush(S, e); }while(n); } int main() { int n; LinkStack S; // 定義 StackInit(S); // 初始化 while(cin >> n) { cout << "十進位制數:" << n << endl; cout << "對應二進位制:"; change(S, n); int len = StackLength(S); // 求出棧的長度 for(int i = 0; i<len; i++) { cout << StackTop(S); // 輸出棧頂元素 StackPop(S); // 彈出 } cout << endl; StackClear(S); // 清空 } return 0; }