栈的建立以及使用

stack.h

typedef int Status;
typedef int SElemType;


#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10


typedef struct 
{
   SElemType *base;
   SElemType *top;
   int stacksize;
}SqStack;


Status InitStack(SqStack &S);
Status DestroyStack(SqStack &S);
Status ClearStack(SqStack &S);
Status StackEmpty(SqStack S);
int StackLength(SqStack S);
Status GetTop(SqStack S,SElemType &e);
Status Push(SqStack S,SElemType e);
Status Pop(SqStack &S,SElemType &e);


stack.cpp

#include "StdAfx.h"
#include "stack.h"


Status InitStack(SqStack &S)
{
  S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
  if(!S.base) exit(OVERFLOw);
  S.top=S.base;
  S.stacksize=STACK_INIT_SIZE;
  return OK;
}


Status DestroyStack(SqStack &S)
{
   S.top=S.base=NULL;
   S.stacksize=0;
   free(S.base);
   return OK;
}


Status ClearStack(SqStack &S)
{
   S.top=S.base;
   S.stacksize=0;
   return OK;   
}


Status StackEmpty(SqStack S)
{
    if(S.base==S.top)
  return OK;


   else 
  return ERROR;  
}


int StackLength(SqStack S)
{
   SElemType sum;
   sum=S.stacksize;
   return sum;
}


Status GetTop(SqStack S,SElemType &e)
{
   if(S.top==S.base)
  return ERROR;
   e=*--S.top;
   return OK;
}


Status Push(SqStack S,SElemType e)
{
   if(S.top-S.base>=S.stacksize)
   {  
 S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(SElemType));
    if(!S.base)
exit(OVERFLOw);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
   }
   *(S.top)++=e;
   return OK;
}


Status Pop(SqStack &S,SElemType &e)
{
   if(S.top==S.base)
  return ERROR;
   e=*--S.top;
   return OK;
}

主文件:

// stack.cpp : Defines the entry point for the console application.
//


#include "StdAfx.h"
#include "stack.h"


int main()
{
//printf("Hello World!\n");
    SqStack S;
SElemType e,a,i,b;
a=InitStack(S);
printf("-----------------------------\n");
printf("输入数据:\n");
for(i=1;i<=5;i++)
{
        scanf("%d",&b);
        a=Push(S,b);
}
printf("\n");
printf("-----------------------------\n");
printf("输出结果为:\n");
    for(i=1;i<=5;i++)
{ a=Pop(S,e);
printf("%d ",e);
}


printf("\n");
printf("-----------------------------\n");


return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StriveZs

用爱发电

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值