C++ 实现 栈的基本操作的实现

//base.h

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

 

//stack.h

#include "base.cpp"

#define INIT_SIZE 100  //存储空间初始分配量

#define INCREMENT 10   //存储空间分配增量

typedef struct{        //迷宫中r行c列的位置

 int r;
 
 int c;

}PostType;

typedef struct{

 int ord;        //当前位置在路径上的序号
 
 PostType seat;  //当前坐标
 
 int di;         //往下一坐标的方向

}SElemType;         //栈元素类型

typedef struct{
 
 SElemType* base;  //栈基址,构造前销毁后为空
 
 SElemType* top;   //栈顶
 
 int stackSize;   //栈容量

}Stack;              //栈类型

Status InitStack(Stack &S){  //构造空栈S
 
 S.base=(SElemType*)malloc(INIT_SIZE *sizeof(SElemType));
 
 if(!S.base)
  
  exit(OVERFLOW);   //存储分配失败
 
 S.top=S.base;
 
 S.stackSize=INIT_SIZE;
 
 return OK;

}//InitStack

Status StackEmpty(Stack S){   //若S为空返回TRUE,否则返回FALSE
 
 if(S.top==S.base)
  
  return TRUE;
 
 return FALSE;

}//StackEmpty

Status Push(Stack &S,SElemType e){   //插入元素e为新的栈顶元素
 
 if(S.top-S.base >=S.stackSize){  //栈满,追加空间
  
  S.base=(SElemType *)realloc(S.base,(S.stackSize+INCREMENT)*sizeof(SElemType));
  
  if(!S.base)
   
   exit(OVERFLOW);   //存储分配失败
  
  S.top=S.base+S.stackSize;
  
  S.stackSize+=INCREMENT;
 
 }
 
 *S.top++=e;
 
 return OK;

}//push

Status Pop(Stack &S,SElemType &e){   //若栈不空删除栈顶元素,用e返回并返回OK,否则返回ERROR
 
 if(S.top==S.base)
  
  return ERROR;
 
 e=*--S.top;
 
 return OK;

}//Pop

Status DestroyStack(Stack &S){  //销毁栈S
 
 free(S.base);
 
 S.top=S.base;
 
 return OK;

}//DestroyStack

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值