//数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间。但是操作快,不需要额外的操作。而链表与此想法,可以动态分配内存,但是要增加额外的操作。
#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. C++专题 - Qt是什么

    Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称 ...

  2. java_设计模式_状态模式_State Pattern(2016-08-16)

    定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 类图: 状态模式所涉及到的角色有: ● 环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,同时维护一个 ...

  3. angularjs应用骨架(2)

    时隔一个星期,接着上一篇的angularjs应用骨架继续聊聊angularjs其他的其他的内容. 区分UI和控制器的职责 在应用控制器中有三种职责: 1.为应用中模型设置初始状态 2.通过$scope ...

  4. easy UI demo 含数据库加载示例

    easyUI 部分代码在Googlecode 托管时而被抢此文件包含了所有官方demo,作为备份 下载地址http://pan.baidu.com/s/1pJ9hS5H

  5. RHEL 7特性说明(六):集群

    来自:Linux中国  2014-07-16 00:00:00  ed Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶 ...

  6. DataTable一些操作

    DataTable ReturnDt = new DataTable("Tab_Result"); ReturnDt.Columns.AddRange(new DataColumn ...

  7. C# 数据结构 线性表(顺序表 链表 IList 数组)

    线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...

  8. iOS NSDecimalNumber 货币计算 四舍五入

    今天遇到一个问题 服务器返回货币数据 妈的 用string > floatvalue   不准确 去百度查查 妈的国人分享精神真差  真他妈的自私 一个破壁文章没几个字 还是从国外翻译过来的 全 ...

  9. 同步的HTTP请求

    代码: #import <Foundation/Foundation.h> void request(NSString *urlString) { NSLog(@"BEGIN&q ...

  10. RestKit:iOS开发必备,告别众多无聊代码

    http://www.csdn.net/article/2014-04-15/2819312-RestKit-frameworkRestKit是一款专为iOS设计的Objective-C框架,旨在与R ...