java数据结构经典问题
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数据结构经典问题的更多相关文章
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
- Java数据结构和算法(七)--AVL树
在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树 ...
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- java 数据结构 图
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示 ...
随机推荐
- laravel连sql server报invalid handle returned问题解决方案
https://github.com/Microsoft/msphpsql/issues/116 4.1.1驱动下载地址 https://github.com/Microsoft/msphpsql/r ...
- LeetCode 12 Integer to Roman (整数转罗马数字)
题目链接: https://leetcode.com/problems/integer-to-roman/?tab=Description String M[] = {"", ...
- nginx+memcache实现页面缓存应用
一.前言 nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm.django,大大的提升动态页面的速度. ...
- Android服务开发——WebService
我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到 ...
- 【BZOJ3691】游行 费用流
[BZOJ3691]游行 Description 每年春季,在某岛屿上都会举行游行活动.在这个岛屿上有N个城市,M条连接着城市的有向道路.你要安排英雄们的巡游.英雄从城市si出发,经过若干个城市,到城 ...
- [工具] Sublime Text 使用指南
http://bbs.it-home.org/thread-46291-1-1.html 摘要(Abstract) 更新记录 更正打开控制台的快捷键为Ctrl + ` 更正全局替换的快捷键为Ctrl ...
- mysql概要(十四)(二)索引(补充:外键级联操作)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ ON UPDATE { NO ACTION | CASCADE | S ...
- Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出
第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...
- Qt Package Project 打包发布程序
在Qt项目开发完成后,我们想将项目打包发布成一个可执行文件,需要做如下步骤: 首先,将项目中的release文件中的可执行文件拷到一个新建的文件夹中,例如project.exe,用Qt自带的生成必备的 ...
- background-size:100% 100% 时 background-position: % 失效
背景知识: background-size background-position 难题: background-size 为 100% 100% 时,background-position 部分失效 ...