// Stack.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
#define STACK_INIT_SIZE 100
#define STACKINCREASEMENT 10
enum Symbol
{
Success,
Failed
};
typedef int ElemType;
typedef struct tagStack
{
int nStackSize;
ElemType *pBase;
ElemType *pTop;
}Stack_S;
Stack_S g_Stack;
int InitStack(Stack_S &stack)
{
stack.pBase = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if (stack.pBase == NULL)
{
return Failed;
}
stack.pTop = stack.pBase; //空栈
stack.nStackSize = STACK_INIT_SIZE;
return Success;
}
int PushStack(Stack_S &stack, ElemType c)
{
if (stack.pTop - stack.pBase >= (stack.nStackSize - 1))
{
stack.pBase = (ElemType *)realloc(stack.pBase, (stack.nStackSize + STACKINCREASEMENT)*sizeof(ElemType));
stack.pTop = stack.pBase + stack.nStackSize;
stack.nStackSize += STACKINCREASEMENT;
}
*stack.pTop++ = c;
return Success;
}
int PopStack(Stack_S &stack, ElemType &c)
{
if (stack.pTop == stack.pBase) //empty
{
return Failed;
}
c = *--stack.pTop;
return Success;
}
//非空栈的栈顶指针始终在栈顶元素的下一个位置上。
int _tmain(int argc, _TCHAR* argv[])
{
InitStack(g_Stack);
int n = 16;
while (n != 0)
{
PushStack(g_Stack, n%2);
n = n/2;
}
while (g_Stack.pTop != g_Stack.pBase)
{
PopStack(g_Stack,n);
cout<<n;
}
if (g_Stack.pBase)
{
free(g_Stack.pBase);
g_Stack.pBase = NULL;
g_Stack.pTop = NULL;
}
system("pause");
return 0;
}