在本例中,用棧實現二進制到十進制的轉換,其他進制轉換類似:
本例使用的棧的結構如下:
代碼如下:
#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;
}
運行結果: