数据结构栈的java实现
近来复习数据结构,自己动手实现了栈。栈是一种限制插入和删除只能在一个位置上的表。最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表。
实现方式是这样的:首先定义了一个接口,然后通过这个接口实现了线性栈和链式栈,代码比较简单,如下:
- package com.peter.java.dsa.interfaces;
- /**
- * 栈操作定义
- *
- * @author Peter Pan
- */
- public interface Stack<T> {
- /* 判空 */
- boolean isEmpty();
- /* 清空栈 */
- void clear();
- /* 弹栈 */
- T pop();
- /* 入栈 */
- boolean push(T data);
- /* 栈的长度 */
- int length();
- /* 查看栈顶的元素,但不移除它 */
- T peek();
- /* 返回对象在栈中的位置 */
- int search(T data);
- }
线性栈:以数组的方式实现。
- package com.peter.java.dsa.common;
- import com.peter.java.dsa.interfaces.Stack;
- /**
- * 线性栈
- *
- * @author Peter Pan
- */
- public class LinearStack<T> implements Stack<T> {
- @SuppressWarnings("unchecked")
- private T[] t = (T[]) new Object[16];
- private int size = 0;
- @Override
- public boolean isEmpty() {
- // TODO Auto-generated method stub
- return size == 0;
- }
- @Override
- public void clear() {
- // TODO Auto-generated method stub
- for (int i = 0; i < t.length; i++) {
- t[i] = null;
- }
- size = 0;
- }
- @Override
- public T pop() {
- // TODO Auto-generated method stub
- if (size == 0) {
- return null;
- }
- T tmp = t[size - 1];
- t[size - 1] = null;
- size--;
- return tmp;
- }
- @Override
- public boolean push(T data) {
- // TODO Auto-generated method stub
- if (size >= t.length) {
- resize();
- }
- t[size++] = data;
- return true;
- }
- @Override
- public int length() {
- // TODO Auto-generated method stub
- return size;
- }
- @Override
- public T peek() {
- // TODO Auto-generated method stub
- if (size == 0) {
- return null;
- } else {
- return t[size - 1];
- }
- }
- /* return index of data, return -1 if no data */
- @Override
- public int search(T data) {
- // TODO Auto-generated method stub
- int index = -1;
- for (int i = 0; i < t.length; i++) {
- if (t[i].equals(data)) {
- index = i;
- break;
- }
- }
- return index;
- }
- @SuppressWarnings("unchecked")
- private void resize() {
- T[] tmp = (T[]) new Object[t.length * 2];
- for (int i = 0; i < t.length; i++) {
- tmp[i] = t[i];
- t[i] = null;
- }
- t = tmp;
- tmp = null;
- }
- /* from the left to the right is from the top to the bottom of the stack */
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- StringBuffer buffer = new StringBuffer();
- buffer.append("Linear Stack Content:[");
- for (int i = t.length - 1; i > -1; i--) {
- buffer.append(t[i].toString() + ",");
- }
- buffer.append("]");
- buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
- return buffer.toString();
- }
- }
链式栈:通过单链表进行实现。
- package com.peter.java.dsa.common;
- import com.peter.java.dsa.interfaces.Stack;
- public class LinkedStack<T> implements Stack<T> {
- private Node top;
- private int size;
- @Override
- public boolean isEmpty() {
- // TODO Auto-generated method stub
- return size == 0;
- }
- @Override
- public void clear() {
- // TODO Auto-generated method stub
- top = null;
- size = 0;
- }
- @Override
- public T pop() {
- // TODO Auto-generated method stub
- T topValue = null;
- if (top != null) {
- topValue = top.data;
- Node oldTop = top;
- top = top.prev;
- oldTop.prev = null;
- size--;
- }
- return topValue;
- }
- @Override
- public boolean push(T data) {
- // TODO Auto-generated method stub
- Node oldTop = top;
- top = new Node(data);
- top.prev = oldTop;
- size++;
- return true;
- }
- @Override
- public int length() {
- // TODO Auto-generated method stub
- return size;
- }
- @Override
- public T peek() {
- // TODO Auto-generated method stub
- T topValue = null;
- if (top != null) {
- topValue = top.data;
- }
- return topValue;
- }
- @Override
- public int search(T data) {
- // TODO Auto-generated method stub
- int index = -1;
- Node tmp = top;
- for (int i = size - 1; i > -1; i--) {
- if (tmp.data.equals(data)) {
- index = i;
- break;
- } else {
- tmp = tmp.prev;
- }
- }
- tmp = null;
- return index;
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- StringBuffer buffer = new StringBuffer();
- buffer.append("Linked Stack Content:[");
- Node tmp = top;
- for (int i = 0; i < size - 1; i++) {
- buffer.append(tmp.toString() + ",");
- tmp = tmp.prev;
- }
- tmp = null;
- buffer.append("]");
- buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
- return super.toString();
- }
- private class Node {
- T data;
- Node prev;
- public Node(T data) {
- // TODO Auto-generated constructor stub
- this.data = data;
- }
- }
- }
学习还在进行中,以后会继续更新代码。
数据结构栈的java实现的更多相关文章
- 数据结构——栈的实现(数组、Java)
巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...
- java数据结构——栈(Stack)
学习数据结构与算法是枯燥的,但只有坚持不懈的积累,才会有硕果累累的明天. /** * 继续学习Java数据结构 ————栈 * 栈的实现其实还是使用数组,只不过我们不能直接访问数组下标,而是通过一个指 ...
- 剑指Offer——栈的java实现和栈的应用举例
剑指Offer--栈的java实现和栈的应用举例 栈是一种先进后出的数据结构, 栈的实现如下: 首先定义了栈需要实现的接口: public interface MyStack<T> { / ...
- 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)
数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...
- 数据结构 -- 栈(Stack)
一.栈的简介 定义 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据 ...
- 数据结构--队列(Java实现)
数据结构--队列(Java实现) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 队列是一种特殊的线性表,特殊之处在于它只 ...
- “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- “全栈2019”Java多线程第三十六章:如何设置线程的等待截止时间
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 下一章 "全栈2019"J ...
随机推荐
- CURL重试发送请求
$url1 = 'http://mk.2000tuan.com/coupon4/apiv2/getMcoupon.php; function curlGet($url) { $handle = cur ...
- Android变化如何破解几场金
我们在玩游戏的总会遇到一些东西需要购买,但是,我们可能要花钱,那么我们应该怎么办呢?这与游戏的插.我们在这里谈论的Android游戏,搜索互联网上的移动端游戏插件,您可能会发现一个叫段:八门神器.ap ...
- Jquery基础教程第二版学习记录
本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(六)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(六) 简化使用 Session 和安全理论说得够多了! 现在让我们开始写我们自己的应用. 在这一章里,我们将会大致描述一下我们要建立的一 ...
- 在ASP.net中的UpdatePanel,弹窗失败解决办法
原文:在ASP.net中的UpdatePanel,弹窗失败解决办法 最开始我用: Response.Write("<script>alert('和哈呵呵呵呵呵呵!')</s ...
- uva10827-Maximum sum on a torus(矩阵最大和的变形)
题目;uva10827-Maximum sum on a torus(矩阵最大和的变形) 题目大意:就是uva108的变形,矩阵能够连通,就是能够从后面连到前面.这里把矩阵复制三遍,然后又一次生成一个 ...
- Python学习笔记21:数据库操作(sqlite3)
Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言. SQLite作为后端数据库,能够搭配Python建站点,或者制作有数据存储需求的工具. SQLite还在其他领域有广泛 ...
- Swift中文教程(四)--函数与闭包
原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...
- jsp的<%%>
于jsp于 可以使用<% %> 嵌入java代码,简称jsp文字. 可以使用<% -- -- %> 凝视,这是jsp注视 可以使用<%! %> 声明全局变量 版权声 ...
- autorun.vbs病毒的清除办法
症状:计算机里面出现一堆autorun为文件名称的文件,删除后出现找不到autorun.vbs的提示.我就打开当中的一个文件:Autorun.bat,内容例如以下: @echo off //不显示系 ...