数组栈的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] 题目描 ...
随机推荐
- Linux下查看Nginx安装目录、版本号信息?
Linux环境下,怎么确定Nginx是以那个config文件启动的? 输入命令行: ps -ef | grep nginx 摁回车,将出现如下图片: master process 后面的就是 ngi ...
- [Android Tips] 25. ADB Command Note
copy from https://github.com/operando/Android-Command-Note Android Command Note Logcat adb logcat -v ...
- Nodes “-1” are listed in ADOP_VALID_NODES table but not in FND_NODES table
While trying to apply patches to upgrade to 12.2.4, adop failed due to the below errors. Validating ...
- 编写第一个MapReduce程序—— 统计气温
摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...
- WebForm 常用控件
一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text=&quo ...
- spring4 离线doc和api(自制)
spring mvc api 文档(英文版) 链接: https://pan.baidu.com/s/1c25Ml4 密码: ufb9 spring MVC 学习文档(英文版) 链接: https:/ ...
- jQuery File Upload done函数没有返回
最近在使用jQuery File Upload 上传图片时发现一个问题,发现done函数没有callback,经过一番折腾,找到问题原因,是由于dataType: ‘json’造成的,改为autoUp ...
- OC的总结 ***希望对大家有帮助*** ---高小杰
1. NSLog 是Foundation提供的一个输出函数,它的功能非常强大,不仅可以输出字符串,还可以输出各种对象,到后面程序还会见到大量的使用NSLog()函数. 2. N ...
- 细数那些我们都习惯了的Java谣言
我是一个Java的反对者,至于为什么,我想最大的一个原因是它不实在,不管是当年sun所说的一些言论,还是如今Java用户的一些言论,都有蛊惑之嫌,甚至很多太假了,而这些言论层出不穷,其实就语言本身我不 ...
- Coursera台大机器学习课程笔记6 -- The VC Dimension
本章的思路在于揭示VC Dimension的意义,简单来说就是假设的自由度,或者假设包含的feature vector的个数(一般情况下),同时进一步说明了Dvc和,Eout,Ein以及Model C ...