常用数据结构---栈

// 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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值