java语言数组实现栈的操作_C语言描述栈的实现及操作(数组实现)

一.静态数组实现

1.堆栈接口

// 一个堆栈模块接口

// 命名为stack.h

#define STACK_YTPE int // 堆栈所存储值的类型

// push函数

// 把一个新值压入栈中

void push(STACK_YTPE value);

// pop函数

// 从堆栈中弹出一个值

STACK_YTPE pop(void);

// top函数

// 返回堆栈顶部元素的值

STACK_YTPE top(void);

// is_empty函数

// 如果堆栈为空,返回TRUE,否则返回FALSE

bool is_empty(void);

// is_full函数

// 如果堆栈已满,返回TRUE,否则返回FALSE

bool is_full(void);

2.静态数组堆栈

#include

#include

#include"stack.h"

#define STACK_SIZE 100 // 堆栈中值数量的最大限制

static STACK_TYPE stack[STACK_SIZE]; // 存储堆栈中值得数组

static int top_element = -; // 指向顶部元素的指针

void push(STACK_TYPE value){

assert(!is_full());

top_element += ;

stack[top_element] = value;

}

STACK_TYPE pop(void){

assert(!is_empty());

return stack[top_element--];

}

STACK_TYPE top(void){

assert(!is_empty());

return stack[top_element];

}

bool is_empty(void){

return top_element == -;

}

bool is_full(void){

return top_element == STACK_SIZE-;

}

二.动态数组实现

1.堆栈接口

只需要最原来的stack.h接口基础上加上添加以下两个定义即可。

// creat_stack函数

// 创建堆栈。参数指定可以保存多少元素

void creat_stack(size_t size);

// destroy_stack函数

// 销毁堆栈。释放堆栈所使用的内存

void destroy_stack(void);

2.动态数组堆栈

// 一个动态分配数组实现的堆栈

#include

#include

#include

#include

#include"stack.h"

// 用于存储堆栈元素的数组和指向堆栈顶部元素的指针

static STACK_TYPE *stack;

static size_t stack_size;

static int top_element = -;

//creat_stack

void creat_stack(size_t size){

assert(stack_size == );

stack_size = size;

stack = malloc(stack_size*sizeof(STACK_TYPE));

assert(stack != NULL);

}

//destroy_stack

void destroy_stack(void){

assert(stack_size>);

stack_size = ;

free(stack);

stack = NULL;

}

void push(STACK_TYPE value){

assert(!is_full());

top_element += ;

stack[top_element] = value;

}

STACK_TYPE pop(void){

assert(!is_empty());

return stack[top_element--];

}

STACK_TYPE top(void){

assert(!is_empty());

return stack[top_element];

}

bool is_empty(void){

return top_element == -;

}

bool is_full(void){

return top_element == stack_size-;

}

参考文献

《C和指针》

C语言描述栈的实现及操作(链表实现)

#include #include #include typedef int Elementtype; / ...

C语言描述二叉树的实现及操作(链表实现)

概述     二叉树为每个节点最多有两个儿子节点(左儿子节点和右儿子节点)的树. 前序遍历:根结点 ---> 左子树 ---> 右子树. 中序遍历:左子树---> 根结点 ---&g ...

C语言描述队列的实现及操作(链表实现)

// 队列的单链表实现 // 头节点:哨兵作用,不存放数据,用来初始化队列时使队头队尾指向的地方 // 首节点:头节点后第一个节点,存放数据 #include #incl ...

C语言描述链表的实现及操作

一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include #include

C语言描述队列的实现及操作(数组实现)

一.静态数组实现 1.队列接口 #include // 一个队列模块接口 // 命名为myqueue.h #define QUEUE_TYPE int // 定义队列类型 ...

【数据结构】之栈(C语言描述)

栈(Stack)是编程中最常用的数据结构之一. 栈的特点是“后进先出”,就像堆积木一样,堆的时候要一块一块堆到最上面,拆的时候需要从最上面一块一块往下拆.栈的原理也一样,只不过它的操作不叫堆和拆,而是 ...

利用栈实现算术表达式求值(Java语言描述)

利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

【数据结构】之栈(Java语言描述)

在前面的[这篇文章]中,我简单介绍了栈这种数据结构的操作功能,并使用C语言对其进行了代码的编写. Java的JDK中默认为我们提供了栈这种数据结构的API—— Stack . Java中的Stack类 ...

数据结构(java语言描述)

概念性描述与大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

随机推荐

事件驱动之Twsited异步网络框架

在这之前先了解下什么是事件驱动编程 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结 ...

JavaMail API 详细分解

在使用Spring框架的过程中,它的优势之一就是在于跟其他一些技术的整合,如JavaMail .任务调度.缓存策略等技术.今天就Java Mail详细阐述.JavaMail API是被设计为与协议无关 ...

UVa 11609 (计数 公式推导) Teams

n个人里选k个人有C(n, k)中方法,再从里面选一人当队长,有k中方法. 所以答案就是 第一步的变形只要按照组合数公式展开把n提出来即可. #include typed ...

JFinal之学习资源

JFinal官网: http://www.jfinal.com/ JFinal在线API: http://tool.oschina.net/apidocs/apidoc?api=jfinal JFin ...

实时音视频互动系列(上):又拍云UTUN网络详解

如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...

一起学Android之ToggleButton和Switch

本文以一个简单的小例子,简述在Android开发中ToggleButton(开关按钮)和Switch(开关)的简单使用,仅供学习分享使用. 概述 ToggleButton是一个有两种状态(checke ...

word个人信息的一种处理方式

下面是一种解决office文件更改作者的方法,步骤如下: 第一步:进入Word,Excel,或PowerPoint, 随便打开一个文件: 第二步:点击左上角的文件,进入文件功能界面: 第三步:点击选项 ...

cp -rf 提示覆盖解决办法

cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,当文件比较少的时候还可以按Y确认,当很多文件的时候就不好说了 方法一:vi ~/.bashrc # .bashrc # User specific ...

你可能感兴趣的:(java语言数组实现栈的操作)