//数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间。但是操作快,不需要额外的操作。而链表与此想法,可以动态分配内存,但是要增加额外的操作。
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

int main()
{
 int i;
 Type x;
 STACK *s = NULL;
 Type arr[] = {3,1,2,5,7,9};

s = CreateStack(10);
 if(s == NULL)
  return -1;

for(i = 0; i < sizeof(arr)/sizeof(*arr); i++)
 {
  PushStack(s, arr + i);
 }
 TopAndPopStack(s, &x);
 printf("x = %d\n", x);
 PosStack(s);
 TopOfStack(s, &x);
 printf("x = %d\n", x);
 
 return 0;
}
--------------------------------------------------------------------------

#ifndef _STACK_H__
#define _STACK_H__

struct node;
typedef int Type;
typedef struct node STACK;

STACK *CreateStack(int);
void StackMakeEmpty(STACK *);
int StackIsEmpty(STACK *);
int StackIsFull(STACK *);
int PushStack(STACK *, const Type *);
int PosStack(STACK *);
int TopOfStack(STACK *, Type *);
int TopAndPopStack(STACK *, Type *);
int DisposeStack(STACK *);

struct node{
 Type *data;
 int capacity;
 int topofstack;
};

#endif
-----------------------------------------------------------------------------

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

STACK *CreateStack(int size)
{
 STACK *s = malloc(sizeof(*s));
 if(NULL == s)
  return NULL;
 s->data = malloc(sizeof(Type)*size);
 if(NULL == s->data)
 {
  free(s);
  return NULL;
 }
 s->capacity = size;
 StackMakeEmpty(s);
 return s;
}
void StackMakeEmpty(STACK *s)
{
 s->topofstack = -1;
}
int StackIsEmpty(STACK *s)
{
 return s->topofstack == -1;
}
int StackIsFull(STACK *s)
{
 return s->capacity == (s->topofstack + 1);
}
int PushStack(STACK *s, const Type *x)
{
 if(StackIsFull(s))
  return -1;
 s->data[++s->topofstack] = *x;
 return 0;
}
int PosStack(STACK *s)
{
 if(StackIsEmpty(s))
  return -1;
 s->topofstack--;
 return 0;
}
int TopOfStack(STACK *s, Type *x)
{
 if(StackIsEmpty(s))
  return -1;
 *x = s->data[s->topofstack];
 return 0;
}
int TopAndPopStack(STACK *s, Type *x)
{
 if(!TopOfStack(s, x))
  return PosStack(s);
 return -1;
}
int DisposeStack(STACK *s)
{
 free(s->data);
 free(s);
}

ArrStack——数组栈(procedure)的更多相关文章

  1. java——数组栈 ArrayStack

    栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...

  2. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  3. java:数据结构复习(二)数组栈

    import java.util.Arrays;import java.util.Scanner; /** * @author 李正阳 */public class MyArraysStack< ...

  4. c++如何解决大数组栈内存不够的问题

    在c++中,我们可以直接通过下面的方式创建一个数组: ; ; ; double phi[N][Nx][Ny]; double phi_b[N][Nx][Ny]; 但是,如果上述的Nx和Ny比较小还好说 ...

  5. [js]数组栈和队列操作

    写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...

  6. Java手写数组栈

    public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...

  7. 数组栈的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  8. 前端开发:Javascript中的数组,常用方法解析

    前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...

  9. PHP数组常用函数

    [官方]PHP Array 函数 一.数组操作的基本函数 数组的键名和值 array_values($arr);  获得数组的值 array_keys($arr);  获得数组的键名 array_fl ...

随机推荐

  1. LINQ 101——分区、Join、聚合

    一.Partitioning 分区 Take 例1:取前3个数 static void Linq1() { , , , , , , , , , }; ); Console.WriteLine(&quo ...

  2. Child&ElementChild

    关于firstChild&firstElementChild及其同类属性使用,同时分析不同浏览器下child的包含的节点差异 <head> <meta charset=&qu ...

  3. ecshop标签

    页面标题         {$page_title}页面关键字       {$keywords}     产品分类                 父分类列表 {foreach from=$cate ...

  4. php 接收 Android 传递的json 转 数组 问题

    过程:Android  拼接一个 json格式的数据 传值  ,php 接收 转为数组  json_decode   取值 json格式为:{"goods":{"1000 ...

  5. apache日志文件 accesslog

    因为想要看到apache的日志记录用户请求某个页面所花的时间,需要添加额外参数才会记录,所以临时查了下哦..记下来了 在httpd.conf里可以看到一行这样的配置 LogFormat "% ...

  6. MVC5 学习笔记1

    新装了vs2013 开始试着学习MVC5 首先用了2013的内置的框架 这里提三点 1. bootstrap (现已加入mvc5豪华套餐) 他的框架已经加入了bootstrap 3.0的版本(http ...

  7. [译]36 Days of Web Testing(五)

    Day 23 禁用CSS  Disable CSS 为什么 ? CSS,层叠样式表,是用来定义web页面布局和显示的机制.通过修改CSS样式,可以改变整个页面的外观. 但是有一些人,因为之前的选择或者 ...

  8. Java IO学习总结

    Java IO流学习总结 Io流的内容比较多 ,大致可以分为字节流和字符流,其中为了提高效率又用到了缓冲区. Java流操作有关的类或接口: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合, ...

  9. jx3dps开发日记

    2014.11.13 子级过滤 关于optgroup这个东西,一开始以为是个包裹元素,但是一般来说,包裹元素给一个class,那么让这个class show()应该它包裹的元素也跟随show,可结果是 ...

  10. bzoj 2818: Gcd 歐拉函數

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1633  Solved: 724[Submit][Status] Descript ...