A:栈抽象数据类型

1.栈的主要操作

  void push(int data);将data数据插入栈中。

  int pop();删除并返回最后一个插入栈的元素.

2.栈的辅助操作

  int top();返回最后一个插入栈的元素,但是不删除

  int size();返回存储在栈中元素的个数

  int isEmpty();判断栈中是否有元素

  int isStackFull();判断栈中是否存满元素

B:栈中的异常

在栈为空时pop操作和top操作都会抛出异常。在栈为满的时候执行push操作也会抛出异常。

C:栈的实现

1:基于简单数组的实现方法

2:基于动态数组的实现方法

3:基于链表的实现方法

1:简单数组实现

  如图所示:从左到右向数组中添加所有的元素,并且定义一个变量用来记录数组当前栈顶元素的下标

             

                                 s                                               |top(栈顶)

当数组中存满了栈元素的时候,执行入栈操作就会抛出栈满的异常,当对一个空栈执行删除元素的操作,就会抛出栈空异常。

代码如下:

package airycode;

public class ArrayStack {

	private int top;
private int capacity;
private int[] array; public ArrayStack(){
capacity = 1;
array = new int[capacity];
top = -1;
} public boolean isEmpty(){
return top == -1;
} public boolean isStackFull(){
return top == capacity-1;
} public void push(int data){
if(isStackFull()){
System.out.println("Stack Overflow");
} else {
array[++top] = data;
}
} public int pop(){
if (isEmpty()) {
System.out.println("Stack is Empty");
return 0;
} else {
return array[top--];
}
} public void deleteStack(){
top = -1;
} }

  性能和局限性

性能分析:假设n为栈中元素的个数。在基于简单数组的栈实现中。各种栈操作算法复杂度如下表所示:

简单数组实现栈性能分析
空间复杂度(用于n次push操作) O(n) isEmpty()的时间复杂度 O(1)
push()的时间复杂度 O(1) isStackFull()的时间复杂度 O(1)
pop()的时间复杂度   O(1) deleteStack()的时间复杂度 O(1)
size()时间复杂度 O(1)    

局限性:栈的最大空间必须预先声明且不能改变。试图对一个满栈执行入栈操作将产生一个针对简单数组这种特定实现栈方式的异常。

java数据结构经典问题的更多相关文章

  1. Java数据结构和算法 - 递归

    三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...

  2. Java数据结构和算法(七)--AVL树

    在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树 ...

  3. Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

    Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...

  4. JAVA数据结构系列 栈

    java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...

  5. Java数据结构之树和二叉树(2)

    从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...

  6. Java数据结构之树和二叉树

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  7. Java数据结构之线性表(2)

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  8. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  9. java 数据结构 图

    以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...

随机推荐

  1. Centos重新启动网络配置文件,/etc/resolv.conf被覆盖或清空问题解决

    Centos在执行命令 yum update时报错如下: Could not get metalink https://mirrors.fedoraproject.org/metalink?repo= ...

  2. ubuntu 加扩展网卡遇到网卡无法识别

    原创文章,如转载请注明出处 ============================ 今天在安装扩展网卡的时候出现了问题,ubuntu和Centos的网络配置是不一样的. ubuntu的配置:     ...

  3. Linux日志五大命令详解

    1.who 命令 who 命令查询 utmp 文件并报告当前登录的每个用户.Who 的缺省输出包括用户名.终端类型.登录日期及远程主机.使用该命令,系统管理员可以查看当前系统存在哪些不法用户,从而对其 ...

  4. Maven Assembly插件介绍

    转自:http://blueram.iteye.com/blog/1684070 已经写得挺好的,就不用重写了. 你是否想要创建一个包含脚本.配置文件以及所有运行时所依赖的元素(jar)Assembl ...

  5. 【LOJ6254】最优卡组 堆(模拟搜索)

    [LOJ6254]最优卡组 题面 题解:常用的用堆模拟搜索套路(当然也可以二分).先将每个卡包里的卡从大到小排序,然后将所有卡包按(最大值-次大值)从小到大排序,并提前处理掉只有一张卡的卡包. 我们将 ...

  6. 经典把妹桥段:Flower dance开头对话

    听到一首很赞的钢琴曲,Flower Dance,其开头有一段英文对话,如下: Lucy:"They serve the purpose of changing hydrogen into b ...

  7. centos7搭建docker私有仓库

    1.环境: [root@docker02 anchors]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@do ...

  8. 170815、redis3.0安装配置

    下载地址http://redis.io/download 安装步骤: 1 首先需要安装gcc,把下载好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local文件夹下 2 ...

  9. easyui_1

    --- easyui.css包括所有组件的css,

  10. PAT甲1005 Spell it right【字符串】

    1005 Spell It Right (20 分) Given a non-negative integer N, your task is to compute the sum of all th ...