#include <stdio.h>
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef int Type;
typedef struct
{
Type *pBase;
Type *pTop;
int iStackSize;
}SqStack;
bool InitStack(SqStack& S);
bool DestroyStack(SqStack& S);
bool StackEmpty(SqStack& S);
int StackLength(SqStack& S);
bool GetTop(SqStack& S,Type& e);
bool Push(SqStack& S,Type e);
bool Pop(SqStack& S,Type& e);
int main(int argc, char* argv[])
{
SqStack S;
InitStack(S);
int value = 36;
while (value)
{
Push(S,value%2);
value/=2;
}
int i = 0;
while (!StackEmpty(S))
{
Type e;
Pop(S,e);
cout<<e;
}
cout<<endl;
DestroyStack(S);
return 0;
}
bool InitStack(SqStack& S)
{
S.pBase = (Type*)malloc(STACK_INIT_SIZE*sizeof(Type));
if (!S.pBase)
{
return false;
}
S.pTop = S.pBase;
S.iStackSize = 0;
return true;
}
bool DestroyStack(SqStack& S)
{
free(S.pBase);
S.pBase=S.pTop = NULL;
S.iStackSize = 0;
return true;
}
bool StackEmpty(SqStack& S)
{
if (S.pTop==S.pBase
||S.iStackSize == 0)
{
return true;
}
return false;
}
int StackLength(SqStack& S)
{
return S.pTop-S.pBase;
}
bool GetTop(SqStack& S,Type& e)
{
if (S.iStackSize==0
||S.pBase==S.pTop)
{
return true;
}
else
{
e = *(S.pTop-1);
}
return true;
}
bool Push(SqStack& S,Type e)
{
if (S.pTop-S.pBase>=S.iStackSize)
{
Type *pNewBase = (Type*)realloc(S.pBase,(S.iStackSize+STACK_INCREMENT)*sizeof(Type));
if (!pNewBase)
{
return false;
}
S.pBase = pNewBase;
S.pTop = S.pBase+S.iStackSize;
}
*S.pTop = e;
S.pTop++;
S.iStackSize++;
return true;
}
bool Pop(SqStack& S,Type& e)
{
if (S.iStackSize==0
||S.pTop == S.pBase)
{
return true;
}
else
{
e = *(--S.pTop);
S.iStackSize--;
}
return true;
}
进制转换的思想:
N = (N / d) * d +(N % d) ;
以上是栈和具体的实现: