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. web前端面试题(一)

    1  选择题 1.1   默认情况下,使用P标记会形成什么效果() A.在文字P所在位置中加入8个空格 B.P后面的文字会变成粗体 C.开始新的一行 D.P后面的文字会变成斜体 答案: C 1.2   ...

  2. sencha touch 开发环境搭建(视频)

    图文文章参见: http://www.cnblogs.com/mlzs/p/3420900.html 视频共享链接 百度:http://pan.baidu.com/s/1mg5DpS8

  3. ELK系列一:ELK的安装

    一.Elasticsearch.Kibana.Logstash.Elasticsearch-head的安装 ELK的安装 安装下载地址: https://www.elastic.co/cn/downl ...

  4. 23种设计模式之模板方法(Template Method)

    模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其缺点是对于不同的实现,都需要定义 ...

  5. Unity3D笔记 愤怒的小鸟<四> 实现Selelction界面

    一直跟着龚老师用js写,VS智能感应用习惯后发现这里用js对初学者比较蛋疼,MONO有提示但是还是无法和VS媲美就目前来看.所以这次还是换成熟悉的VS来开发. 目标:实现关卡页面 跑起来的效果如下: ...

  6. Java虚拟机六 堆溢出的处理

    在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...

  7. jQuery的下面是动态表格动态表单中的HTML代码

    动态表格动态表单中的Jquery代码 <script type="text/javascript" src="/include/jquery/jquery-1.1. ...

  8. js 字符中 带 函数 再传对象参数

    不替换 ( .replace(/\"/g, "\\\"") )则会有错误: Uncaught SyntaxError: missing ) after argu ...

  9. 为什么JS事件函数里面都有一个参数(ev)?

    因为ev是事件的参数啊!在ev中包含了事件触发时的参数,比如click事件的ev中包含着.e.pageX,e.pageY,keydown事件中包含着ev.keyCode等,在ie中,ev是全局的可以通 ...

  10. codeforces 892 - A/B/C

    题目链接:https://cn.vjudge.net/problem/CodeForces-892A Jafar has n cans of cola. Each can is described b ...