数据结构,关于栈的实现

#include "stdio.h"
#include "alloc.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10   //存储空间分配增量
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define OVERFLOW -2
typedef int SElemType;//定义元素类型
typedef int Status;
typedef struct
{
 SElemType *base;
 SElemType *top;
 int stacksize;
}SqStack;
SqStack S;
SElemType e;

Status InitStack(SqStack *S)//栈的构造函数
{
 (*S).base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
 if(!(*S).base)
 {
  printf("分配地址失败!");
     exit(OVERFLOW);
 }
 (*S).top=(*S).base;
 (*S).stacksize=STACK_INIT_SIZE;
 return OK;
}

Status GetTop(SqStack S,SElemType *e)//用e返回栈顶
{
 if(S.top==S.base)
 return ERROR;
 *e=*(S.top-1);
 return OK;
}

Status Push(SqStack *S,SElemType e)//入栈
{
 if(!(*S).base)
 {
  printf("栈不存在");
  exit(OVERFLOW);
 }
 if((*S).top-(*S).base>=((*S).stacksize))
 {
  (*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT *sizeof(SElemType)));
  (*S).stacksize+=STACKINCREMENT;
 }
 *((*S).top)++=e;
 return OK;
}

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

Status StackEmpty(SqStack S)//判断是否为空栈
{
 if(!S.base)
 {
  printf("栈不存在");
  exit(OVERFLOW);
 }
 if(S.base==S.top)
 return TURE;
 else
 return FALSE;
}

int StackLength(SqStack S)//栈的长度
{
 if(!S.base)
 {
  printf("栈不存在");
  exit(OVERFLOW);
 }
 return S.top-S.base;
}

Status ClearStack(SqStack *S)//将栈置为空栈
{
 if(!(*S).base)
 {
  printf("栈不存在");
  exit(OVERFLOW);
 }
 while((*S).top!=(*S).base)
 Pop(&S,&e);
}

Status DestoryStack(SqStack *S)//销毁栈
{
 if(!(*S).base)
 {
  printf("栈不存在");
  exit(OVERFLOW);
 }

 (*S).base=NULL;
 free((*S).base);
 return OK;
}

 

欢迎大家指出错误,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值