栈是一种线性表,特点在于它只能在一个位置上进行插入和删除,该位置是表的末端,叫做栈的顶(top)。因此栈是后进先出的(FIFO)。栈的基本操作有push、peek、pop。

栈的示意图

进栈和出栈都只能在一个位置进行操作。

基于数组的栈实现

/**
* 基于数组的栈实现
*/
public class MyArrayStack<T> {
// 栈顶
private int top = -1;
// 保存元素的数组
private T[] items;
// 默认栈大小
private int DEFAULT_CAPACITY = 10; public MyArrayStack() {
items = (T[]) new Object[DEFAULT_CAPACITY];
} public MyArrayStack(int size) {
if (size <= 0) {
throw new IllegalArgumentException();
}
items = (T[]) new Object[size];
} public boolean isEmpty() {
return top == -1;
} public void push(T x) {
if (top == items.length) {
throw new FullStackException();
}
items[++top] = x;
} public T peek() {
if (isEmpty()) {
throw new EmptyStackException();
}
return items[top];
} public T pop() {
if (isEmpty()) {
throw new EmptyStackException();
}
return items[top--];
}
}

基于链表的栈实现

package org.zhugc.ds;

/**
* 基于链表的栈实现
*
* @param <T>
*/
public class MyLinkedStack<T> { private Node<T> top;
private int size; private class Node<T> {
private T data;
private Node<T> next; public Node(T data) {
this.data = data;
}
} public boolean isEmpty() {
return top == null;
} public void push(T x) {
Node<T> newNode = new Node<>(x);
newNode.next = top;
top = newNode;
size++;
} public T pop() {
Node<T> delNode = top;
top = top.next;
size--;
return delNode.data;
} public int size() {
return size;
}
}

Java数据结构与算法(2):栈的更多相关文章

  1. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  2. java数据结构与算法之栈(Stack)设计与实现

    本篇是java数据结构与算法的第4篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是一种用于 ...

  3. Java数据结构和算法(一)--栈

    栈: 英文名stack,特点是只允许访问最后插入的那个元素,也就是LIFO(后进先出) jdk中的stack源码: public class Stack<E> extends Vector ...

  4. Java数据结构和算法(四)——栈

    stack,中文翻译为堆栈,事实上指的是栈,heap,堆. 这里讲的是数据结构的栈,不是内存分配里面的堆和栈. 栈是先进后出的数据的结构,好比你碟子一个一个堆起来.最后放的那个是堆在最上面的. 队列就 ...

  5. Java数据结构和算法之栈与队列

    二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为 ...

  6. Java数据结构和算法(五)——队列

    队列.queue,就是现实生活中的排队. 1.简单队列: public class Queqe { private int array[]; private int front; private in ...

  7. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  8. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  9. Java数据结构和算法 - 二叉树

    前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...

随机推荐

  1. window环境rabbitMQ安装和php扩展安装

    下面的安装步骤,已经在2018-11-27试验通过. 1.安装前的准备 phpinfo查看php的版本.系统是多少位的,php版本是否是线程安全,php.ini文件的路径 2.安装rabbitMQ 安 ...

  2. 使用certbot 为nginx或openresty启用https

    certbot 使用letsencrypt 生成免费https证书 以下内容网上整理,原文地址 https://segmentfault.com/a/1190000005797776 -------- ...

  3. 数据分析 - 缺失值、异常值、一致性分析方法及Python实现

    1.数据质量分析 数据质量分析主要任务:检查原始数据是否存在脏数据. 脏数据: 缺失值 异常值 不一致的值 重复数据及含有特殊符号(如:#.¥.*)的数据 1.1 缺失值分析 数据缺失主要包括:记录的 ...

  4. 本地代码推送到远程git仓库

    # 1. 在远程新建一个代码仓库(如码云,github..) # 2. 将本地代码提交 git init git add * git commit -am "first init" ...

  5. C#人民币金额大写转换

    人民币金额大小写转换,三行代码 //完善了一下查询到的方法,支持小数,保留2位小数 public string NumGetStr(double Num) { string[] DX_SZ = { & ...

  6. MongoDB的使用学习之(五)Spring集成MongoDB以及简单的CRUD

    这篇文章不错:Spring Data - MongoDB 教程 (1.0.0.M1)http://miller-cn.iteye.com/blog/1258859 1.介绍 之前在很多地方一直见到这个 ...

  7. 使用量产工具合并U盘空间一例

      1.问题提出: 朋友拿到一只别人赠送的广告U盘,上面印刷有产品广告.插入电脑后,在系统的磁盘管理中,显示为两块“硬盘”,其中一块“硬盘”中有广告视频.产品介绍等,占用大概6GB,这块“硬盘”中的这 ...

  8. 牛客练习赛33 B tokitsukaze and RPG (类埃筛)

    链接:https://ac.nowcoder.com/acm/contest/308/B 来源:牛客网 tokitsukaze and RPG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/ ...

  9. thymeleaf常用模板方法收集

    判断是不是为空1.th:if="${xxx} != null" th:if="${xxx != null}" 是不是为空字符串 1.th:if="${ ...

  10. DevExpress v18.2版本亮点——Office File API 篇

    行业领先的.NET界面控件——DevExpress v18.2版本亮点详解,本文将介绍了DevExpress Office File API v18.2 的版本亮点,新版30天免费试用!点击下载> ...