数组栈的C语言实现

#ifndef _CONST_H_
#define _CONST_H_

#include <stdio.h>
#include <stdlib.h>

typedef enum
{
False = 0,
True,
}Bool;

typedef int ElemType;

#define QUEUE_MAX_SIZE 10

#define STACK_INIT_SIZE 10
#define STACK_INCREMENT_SIZE 2


#define Null ((void *)0)

typedef enum
{
NORMAL = 0,
ERROR,
UNDERFLOW,
OVERFLOW,
STATUSCOUNT,
}Status;

#endif

 

#ifndef _STATIC_STACK_H_
#define _STATIC_STACK_H_

#include "Const.h"

typedef struct staticstack
{
ElemType *pbase;
ElemType *ptop;
int stacksize;
}StaticStack, *pStaticStack;


Status InitStaticStack(pStaticStack pSStack);

Bool IsStaticStackFull(pStaticStack pSStack);

Bool IsStaticStackEmpty(pStaticStack pSStack);

Status PushStaticStack(pStaticStack pSStack, ElemType elme);

Bool PopStaticStack(pStaticStack pSStack, ElemType *e);

void DestoryStaticStack(pStaticStack pSStack);

ElemType GetStaticStackTop(pStaticStack pSStack);

int GetStaticStackLength(pStaticStack pSStack);

#endif

 

#include "StaticStack.h"

#include "Const.h"

Status InitStaticStack(pStaticStack pSStack)
{
pSStack->pbase = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (Null == pSStack->pbase)
{
printf("Can not malloc target size memory");
return ERROR;
}
pSStack->ptop = pSStack->pbase;
pSStack->stacksize = STACK_INIT_SIZE;
return NORMAL;
}

Bool IsStaticStackFull(pStaticStack pSStack)
{
if ((pSStack->ptop - pSStack->pbase) == pSStack->stacksize)
{
return True;
}
else
{
return False;
}
}

Bool IsStaticStackEmpty(pStaticStack pSStack)
{
if (pSStack->ptop == pSStack->pbase)
{
return True;
}
else
{
return False;
}
}

Status PushStaticStack(pStaticStack pSStack, ElemType elme)
{
if (IsStaticStackFull(pSStack))
{
printf("Static Stack is full\n");
pSStack->pbase = (ElemType *)realloc(pSStack->pbase, (pSStack->stacksize + STACK_INCREMENT_SIZE) * \
sizeof(ElemType));
if(pSStack->pbase == Null)
{
printf("Can not malloc target size memory");
return ERROR;
}
else
{
pSStack->ptop = pSStack->pbase + pSStack->stacksize;
pSStack->stacksize += STACK_INCREMENT_SIZE;
}
}

*(pSStack->ptop++) = elme;
return NORMAL;
}

Bool PopStaticStack(pStaticStack pSStack, ElemType *e)
{
if (IsStaticStackEmpty(pSStack))
{
printf("The StaticStack Is Empty.");
return False;
}
else
{
*e = *(--pSStack->ptop);
return True;
}
}

void DestoryStaticStack(pStaticStack pSStack)
{
if (pSStack->pbase != Null)
{
free(pSStack->pbase);
}
if (pSStack != Null)
{
free(pSStack);
}
}

ElemType GetStaticStackTop(pStaticStack pSStack)
{
if (IsStaticStackEmpty(pSStack))
{
printf("The StaticStack is empty.");
return 0;
}
return *(pSStack->ptop - 1);
}

int GetStaticStackLength(pStaticStack pSStack)
{
return pSStack->ptop - pSStack->pbase;
}

posted @ 2017-01-04 21:23  Technology小白  阅读(995)  评论(0编辑  收藏  举报