ArrStack——数组栈(procedure)
//数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间。但是操作快,不需要额外的操作。而链表与此想法,可以动态分配内存,但是要增加额外的操作。
#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)的更多相关文章
- java——数组栈 ArrayStack
栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- java:数据结构复习(二)数组栈
import java.util.Arrays;import java.util.Scanner; /** * @author 李正阳 */public class MyArraysStack< ...
- c++如何解决大数组栈内存不够的问题
在c++中,我们可以直接通过下面的方式创建一个数组: ; ; ; double phi[N][Nx][Ny]; double phi_b[N][Nx][Ny]; 但是,如果上述的Nx和Ny比较小还好说 ...
- [js]数组栈和队列操作
写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...
- Java手写数组栈
public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...
- 数组栈的C语言实现
#ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- PHP数组常用函数
[官方]PHP Array 函数 一.数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值 array_keys($arr); 获得数组的键名 array_fl ...
随机推荐
- C++专题 - Qt是什么
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称 ...
- java_设计模式_状态模式_State Pattern(2016-08-16)
定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 类图: 状态模式所涉及到的角色有: ● 环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,同时维护一个 ...
- angularjs应用骨架(2)
时隔一个星期,接着上一篇的angularjs应用骨架继续聊聊angularjs其他的其他的内容. 区分UI和控制器的职责 在应用控制器中有三种职责: 1.为应用中模型设置初始状态 2.通过$scope ...
- easy UI demo 含数据库加载示例
easyUI 部分代码在Googlecode 托管时而被抢此文件包含了所有官方demo,作为备份 下载地址http://pan.baidu.com/s/1pJ9hS5H
- RHEL 7特性说明(六):集群
来自:Linux中国 2014-07-16 00:00:00 ed Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶 ...
- DataTable一些操作
DataTable ReturnDt = new DataTable("Tab_Result"); ReturnDt.Columns.AddRange(new DataColumn ...
- C# 数据结构 线性表(顺序表 链表 IList 数组)
线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...
- iOS NSDecimalNumber 货币计算 四舍五入
今天遇到一个问题 服务器返回货币数据 妈的 用string > floatvalue 不准确 去百度查查 妈的国人分享精神真差 真他妈的自私 一个破壁文章没几个字 还是从国外翻译过来的 全 ...
- 同步的HTTP请求
代码: #import <Foundation/Foundation.h> void request(NSString *urlString) { NSLog(@"BEGIN&q ...
- RestKit:iOS开发必备,告别众多无聊代码
http://www.csdn.net/article/2014-04-15/2819312-RestKit-frameworkRestKit是一款专为iOS设计的Objective-C框架,旨在与R ...