用棧實現進制轉換

在本例中,用棧實現二進制到十進制的轉換,其他進制轉換類似:

本例使用的棧的結構如下:


代碼如下:

#include <iostream>
#include <cmath>
using namespace std;

typedef struct node
{
    char c;
    struct node *next;
}Node, *pNode;             //棧中每個元素都是節點,這裏定義節點

typedef struct stack
{
    pNode pTop;
    pNode pBottom;
}Stack, *pStack;           //定義棧

void InitStack(pStack pS);
void PushStack(pStack pS, char c);
char PopStack(pStack pS);
bool IsEmpty(pStack pS);
int StackNodeNumber(pStack pS);

int main()
{
    char c;  //用於輸入
    char popC;
    int nodeNum;
    int result = 0;
    Stack S;
    InitStack(&S);
    cout << "請輸入一串二進制數, 以#結束:" << endl;
    cin >> c;
    while(c != '#')
    {
        PushStack(&S, c);
        cin >> c;
    }
    cin.get();

    nodeNum = StackNodeNumber(&S);
    for(int i=0; i<nodeNum; i++)
    {
        popC = PopStack(&S);
        result += (popC - 48) * pow(2, i);
    }
    cout << "result is " << result << endl;
}

void InitStack(pStack pS)         //初始化一個棧
{
    pS->pBottom = new Node;
    if(pS->pBottom == NULL)
        cout << "內存分配失敗" << endl;
    else
    {
        pS->pTop = pS->pBottom;
        pS->pTop->next = NULL;
    }
}

void PushStack(pStack pS, char c)   //將c壓入棧中
{
    pNode pNew = new Node;
    pNew->c = c;
    pNew->next = pS->pTop;
    pS->pTop = pNew;
}

char PopStack(pStack pS)
{
    char c;   //c作爲返回值
    pNode temp = NULL;
    if(IsEmpty(pS))
    {
        cout << "棧爲空,不能彈出元素." << endl;
        return 0;
    }
    else
    {
        c = pS->pTop->c;
        temp = pS->pTop;
        pS->pTop = pS->pTop->next;
        delete temp;
        return c;
    }
}

bool IsEmpty(pStack pS)          //判斷棧中是否有元素
{
    return pS->pTop == pS->pBottom;
}

int StackNodeNumber(pStack pS)
{
    int num = 0;
    pNode temp = pS->pTop;
    while(temp != pS->pBottom)
    {
        temp = temp->next;
        num++;
    }
    return num;
}
運行結果:



發佈了71 篇原創文章 · 獲贊 16 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章