我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java语言如何实现数据结构栈

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java语言如何实现数据结构栈

这篇文章主要介绍了Java语言如何实现数据结构栈,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

首先了解下栈的概念:

栈是限定仅在表头进行插入和删除操作的线性表。有时又叫LIFO(后进先出表)。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。

"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

实现方式是这样的:首先定义了一个接口,然后通过这个接口实现了线性栈和链式栈,代码比较简单,如下:

package com.peter.java.dsa.interfaces;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;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 stubreturn size == 0;}@Override public void clear() {// TODO Auto-generated method stubfor (int i = 0; i < t.length; i++) {t[i] = null;}size = 0;}@Override public T pop() {// TODO Auto-generated method stubif (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 stubif (size >= t.length) {resize();}t[size++] = data;return true;}@Override public int length() {// TODO Auto-generated method stubreturn size;}@Override public T peek() {// TODO Auto-generated method stubif (size == 0) {return null;} else {return t[size - 1];}}@Override public int search(T data) {// TODO Auto-generated method stubint 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;}@Override public String toString() {// TODO Auto-generated method stubStringBuffer 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 stubreturn size == 0;}@Override public void clear() {// TODO Auto-generated method stubtop = null;size = 0;}@Override public T pop() {// TODO Auto-generated method stubT 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 stubNode oldTop = top;top = new Node(data);top.prev = oldTop;size++;return true;}@Override public int length() {// TODO Auto-generated method stubreturn size;}@Override public T peek() {// TODO Auto-generated method stubT topValue = null;if (top != null) {topValue = top.data;}return topValue;}@Override public int search(T data) {// TODO Auto-generated method stubint 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 stubStringBuffer 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 stubthis.data = data;}}}

感谢你能够认真阅读完这篇文章,希望小编分享的“Java语言如何实现数据结构栈”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java语言如何实现数据结构栈

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java语言如何实现数据结构栈

这篇文章主要介绍了Java语言如何实现数据结构栈,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先了解下栈的概念:栈是限定仅在表头进行插入和删除操作的线性表。有时又叫LIFO
2023-05-30

C语言如何实现通用数据结构中的通用椎栈

今天就跟大家聊聊有关C语言如何实现通用数据结构中的通用椎栈,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为大家分享了C语言实现通用数据结构之通用椎栈的具体代码,具体内容如下这是在通用
2023-06-21

如何在java数据结构中实现栈和队列

这期内容当中小编将会给大家带来有关如何在java数据结构中实现栈和队列,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java 数据结构中栈和队列的实例详解栈和队列是两种重要的线性数据结构,都是在一个特定的
2023-05-31

JavaScript如何实现栈结构

小编给大家分享一下JavaScript如何实现栈结构,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、认识栈结构我们知道数组是一种常见的数据结构,并且可以在数组的任意位置插入和删除数据,但是有时候,我们为了实现某些功能,必
2023-06-21

C语言数据结构之栈与队列怎么相互实现

本篇内容介绍了“C语言数据结构之栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、用对列实现栈题干要求:细节分析:队列是
2023-07-02

用Python实现数据结构之栈

栈是最简单的数据结构,也是最重要的数据结构。它的原则就是后进先出(LIFO),栈被使用于非常多的地方,例如浏览器中的后退按钮,文本编辑器中的撤销机制,接下来我们用Python来具体实现这个数据结构。栈中的方法作为一个栈(用S来表示),最基本
2023-01-30

如何进行数据结构C语言链表的实现

这篇文章将为大家详细讲解有关如何进行数据结构C语言链表的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言需要用到的函数库#include#include
2023-06-22

java如何实现队列数据结构

小编给大家分享一下java如何实现队列数据结构,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是队列结构一种线性结构,具有特殊的运算法则【只能在一端(队头)删除
2023-05-30

C语言数据结构中的栈该怎么理解

这期内容当中小编将会给大家带来有关C语言数据结构中的栈该怎么理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。栈的链式实现主要内容(1) 栈包含7个元素,依次是67,3,88,6,1,7,0,采用尾插入法
2023-06-22

Java数据结构之栈与综合计算器的实现

这篇文章主要为大家详细介绍了Java数据结构中栈与综合计算器的实现,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
2022-11-13

java如何实现队列queue数据结构

这篇文章主要介绍java如何实现队列queue数据结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概念队列是一种非原始(特殊)的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录