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

最新文章

  1. css3中变形函数(同样是对元素来说的)和元素通过改变自身属性达到动画效果
  2. 深入理解http/https协议
  3. tyvj1193 括号序列
  4. 提供在线制作icon的网站
  5. 计算机启动boot
  6. [C] tcharall(让所有平台支持TCHAR)v1.1。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释
  7. Hibernate常见错误整理
  8. RFID与射频卡电器特性
  9. HASH暴力破解工具-Hashcat
  10. 李洪强漫谈iOS开发[C语言-021]-运算符
  11. 【转】coco2d-x 纹理研究
  12. 使用方便 正则表达式grep,sed,awk(一)
  13. 平方根的C语言实现(三) ——最终程序实现
  14. C# 关键字--virtual(转)
  15. 不使用Math.random实现随机数
  16. linux系统命令学习系列-用户组管理
  17. Js有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  18. 基于linux下的krpano的使用
  19. python内置函数,匿名函数
  20. Get filename from URL using Javascript

热门文章

  1. VS2010中项目发布遇到的应用程序池问题(无法识别的属性“targetFramework”)
  2. 东软HIS切换输入法卡死的解决方法
  3. SQL汉字转拼音函数-支持首字母、全拼
  4. JSBinding / FAQ &amp; Trouble Shooting
  5. JS function document.onclick(){}报错Syntax error on token &quot;function&quot;, delete this token
  6. 选择排序---堆排序算法(Javascript版)
  7. MEF入门之不求甚解,但力求简单能讲明白(三)
  8. XML 文件解析
  9. Visual Studio中编写C程序
  10. HTML5基础-Mark标签高亮显示文本
  11. codevs 1133 表达式的值
  12. jersey REST的接口简述
  13. AppServ安装的一点小麻烦----
  14. 小哈学Python第二课:Hello Word
  15. docker - 设置HTTP/HTTPS 代理
  16. 弹性布局flex
  17. 电脑右键新建excel工作表,但是扩展名是.xls,而不是.xlsx
  18. js-day06-jQuery事件和DOM操作-练习题
  19. unique_ptr
  20. InputStream只能读取一次的解决办法 C# byte[] 和Stream转换