数组栈的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;
}
数组栈的C语言实现的更多相关文章
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么
js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...
- ArrStack——数组栈(procedure)
//数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间.但是操作快,不需要额外的操作.而链表与此想法,可以动态分配内存,但是要增加额外的操作. #i ...
- 大数据全栈式开发语言 – Python
前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...
- 为什么说Python 是大数据全栈式开发语言
欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...
- 数据结构——栈(C语言实现)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...
- 二维数组和指针(C语言)
二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...
- java——数组栈 ArrayStack
栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...
- 3205: 数组做函数参数--数组元素求和1--C语言
3205: 数组做函数参数--数组元素求和1--C语言 时间限制: 1 Sec 内存限制: 128 MB提交: 178 解决: 139[提交][状态][讨论版][命题人:smallgyy] 题目描 ...
随机推荐
- kafka集群搭建和使用Java写kafka生产者消费者
1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...
- C#异常处理性能测试
异常处理性能测试 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq ...
- UIWebView中加载HTML的Table,td设置百分比宽度并且宽度不被里面的内容撑开
正常情况下,iOS使用WebView加载HTML的Table时,为了让Table适应屏幕宽度,会使用百分比设置td的宽度,但是由于td中的内容过多,td会被撑开,导致整个Table的宽度会变宽,超出屏 ...
- 给php添加ssl证书
composer下载时报错: The "https://packagist.org/packages.json" file could not be downloaded: SSL ...
- jquery+ajax实现分页
var curPage = 1; //当前页码 var total,pageSize,totalPage; //总记录数,每页显示数,总页数 getData(1); $("#pagecoun ...
- with CTE AS
CTE/表变量/Temp http://www.cnblogs.com/ziyeyimeng/articles/2366855.html
- struts---JSP界面验证码生成与验证
之前想做一个随机验证码的功能,自己也搜索了一下别人写的代码,然后自己重新用struts2实现了一下,现在将我自己实现代码贴出来!大家有什么意见都可以指出来! 首先是生成随机验证码图片的action: ...
- 字符串反转----将this is good 转化为good is this 输出。
思路:现将整个字符串反转,再将每个单词反转: #include "iostream" #include "cstring" using namespace st ...
- linux下JsonServer启动
1:进入到JsonServer run.sh目录下; 2:执行"export PATH=.:$PATH"; 3:执行"run.sh start"; 这样便把Js ...
- YbSoftwareFactory 代码生成插件【二十】:DynamicObject的序列化
DynamicObject 是 .NET 4.0以来才支持的一个类,但该类在.NET 4.0下未被标记为[Serializable] Attribute,而在.NET 4.5下则被标记了[Serial ...