数组栈的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] 题目描 ...
随机推荐
- SpringMVC操作指南-MVC-搭建SpringMVC项目结构(基于Java API和注解)
- 添加APNS通知
1.进入苹果开发者官网developer.apple.com,点击member center,进入登录界面. 2.输入你的开发者账号和密码,登录后会跳转到“Select your team”这个界面. ...
- oracle指令
删除用户和用户下所有的表: drop user user_name cascade; 导入数据库: cd /home/oracle/app/admin/orcl/dpdump impdp dire ...
- ora-02292
select table_name from all_constraints where constraint_name = '约束的名称'
- leetcode 419
题目说明: Given an 2D board, count how many different battleships are in it. The battleships are represe ...
- 在Sublime中编辑批处理并运行
在Sublime->Tool->Build System -> New Build System 复制如下代码名保存为 CMD.sublime-build { "cmd&q ...
- ftl 问题
取不到后台数据,这里是因为 page 已经是关键字
- opencv 抠图联通块(c接口)
#include "stdio.h" #include "iostream" #include "opencv/cv.h" #include ...
- Python调用C++
/***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> ...
- 常用git命令总结
这些命令是最常用的,一般的提交代码.拉取代码.合并代码.分支切换等等操作用这些命令就足够了. 1.git init 把一个目录初始化成git仓库 2.git add test.txt 把文 ...