java分别用链表和数组实现栈
一.栈的定义
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(来源百度百科)
二.本文内容
本文分别用链表和数组实现了栈
2.1 链表实现
//节点类
public class Node {public Object data;public Node next;public Node(Object data, Node next) {this.data = data;this.next = next;}public Node(Object data) {this.data = data;}
}/*** 方式一: 链表实现*/
public class MyStack01<E> {//栈顶元素private Node top;//元素个数private int count = 0;/*** 进栈* @param element*/public void push(E element){Node node = new Node(element);if (top != null){//若存在栈顶元素,则把新节点的下一个节点指向栈顶元素node.next = top;}//栈顶节点指向新节点top = node;count++;}/*** 出栈* @return*/public E pop(){if (count < 1) throw new RuntimeException("栈顶无元素");Node node = top;top = top.next;count--;return (E)node.data;}/*** 返回栈内元素个数* @return*/public int size(){return count;}/*** 打印栈内元素* @return*/@Overridepublic String toString() {StringBuilder sb = new StringBuilder("]");Node temp = top;while (temp != null){sb.append(temp.data+",");temp = temp.next;}sb.setCharAt(sb.length()-1 , '[');return sb.reverse().toString();}
}//测试类
public class TestMyStack {public static void main(String[] args) {MyStack01<String> myStack = new MyStack01<>();myStack.push("a");myStack.push("b");myStack.push("c");System.out.println("栈内元素为: " + myStack.toString());System.out.println("出栈的元素是: " + myStack.pop());System.out.println("栈内元素为: " + myStack.toString());System.out.println("栈内元素个数为: " + myStack.size());}
}
测试截图:
2.2 数组实现
/*** 方式二: 数组实现*/
public class MyStack02<E> {//操作数组private Object[] data;//栈顶指针int top = -1;//数组大小int size;public MyStack02(int size) {this.size = size;data = new Object[size];}/*** 入栈* @param element*/public void push(E element){if (top + 1 == size) throw new RuntimeException("栈已满");data[top + 1] = element;top ++;}/*** 出栈* @return*/public E pop(){if (top < 0) throw new RuntimeException("栈内无元素");Object obj = data[top];data[top--] = null;return (E)obj;}/*** 返回栈内元素个数* @return*/public int size(){return top+1;}/*** 打印栈内元素* @return*/@Overridepublic String toString() {StringBuilder sb = new StringBuilder("[");for (int i = 0; i <= top; i++) {sb.append(data[i] + ",");}sb.setCharAt(sb.length()-1,']');return sb.toString();}
}//测试类
public class TestMyStack {public static void main(String[] args) {MyStack02<String> myStack = new MyStack02<>(4);myStack.push("a");System.out.println("出栈的元素是: " + myStack.pop());myStack.push("b");myStack.push("c");System.out.println("栈内元素为: " + myStack.toString());System.out.println("出栈的元素是: " + myStack.pop());System.out.println("栈内元素为: " + myStack.toString());System.out.println("栈内元素个数为: " + myStack.size());}
}
测试截图:
java分别用链表和数组实现栈相关推荐
- c++使用单向链表存储一组有序数据_《一起学习java和数据结构》系列-数组和链表...
数组 数组是一个线性表数据结构.它用一段连续的内存地址空间,来存储一些相同类型的数据. 从上面的定义,我们不难看出几个关键词. 线性表:顾名思义,线性表就是数据排列成一条线的数据结构.每一个线性表只有 ...
- 《恋上数据结构第1季》动态数组实现栈
栈(Stack) 栈的应用 – 浏览器的前进和后退 栈的接口设计 动态数组实现栈 练习题 逆波兰表达式求值 有效的括号 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java ...
- 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树
不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...
- JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)
注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...
- echart data放入数组_线性表(数组、链表、队列、栈)详细总结
线性表是一种十分基础且重要的数据结构,它主要包括以下内容: 数组 链表 队列 栈 接下来,我将对这四种数据结构做一个详细的总结,其中对链表实现了十几种常见的操作.希望对你有所帮助. 1.数组 数组(A ...
- Data Structure_数组_栈_队列_链表_霍夫曼
数组 数组在编码中很常见,就是把数据码成一排存放. 这就表示一个数组,这个数组有八个元素存放.对于元素的获取,主要就是通过下标获取,所以索引对于数组是很重要的,这个索引可以是有意义的,也可以是没有意义 ...
- 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)
第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...
- Java数据结构和算法:数组、单链表、双链表
1. 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的 ...
- Java数据结构-基于数组的栈和泛型
泛型可以参数化变量的类型 当你需要用不同类型的基本类型变量来调用构造方法时你需要泛型 public class Test {public static void main(String[] args) ...
- java 模拟栈底层用数组_java用数组模拟栈
package stack2; public interface StackADT { /** * 添加元素 * @param object */ void push(Object object); ...
最新文章
- 后端开挂:3行代码 = 8个接口
- 8位以上 密码 正则表达式
- 其它综合-VMware虚拟机安装Ubuntu 19.04 版本
- SAP Spartacus里的product carousel控件的实现cx-product-carousel
- python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则
- QPW 企业员工表(tf_company_employee)
- linux 命令案例学习——文件搜索
- leetcode —— 38. 外观数列
- CV_MAT_ELEM——获取矩阵元素和初始化矩阵
- 笔记:J2EE核心模式(待补充)
- java内存模型(netty权威指南)
- Windows 7 “Tunnel adapter Local Area Connection” 现象(IPv6)
- java 中级面试题_java中级面试题
- 细说工业基础类IFC
- Jie Business Project
- web前端全套教程,入门必备
- 树莓派 Raspberry Pi 3B+ 无线路由器, WEB 服务器(Nginx,PHP,Sqlite3),UART 串口数据采集
- 大数据平台Ambari2.7.4+HDP3.1.4安装(超详细教程)
- 迪士尼正在寻找一个区块链实习生
- 付宇泽20190919-1 每周例行报告
热门文章
- devc 和mysql_DEV C++下C语言连接mysql
- docker minio部署作为shareX截图软件的图床
- 爬虫问题,内容应该如何解码,base64解码技巧,从哪里开始分析
- HHS整合(Struts2+Spring+Hibernate)
- Ubuntu出现“dpkg: 依赖关系问题使得libbsd0:i386的配置工作不能继续”错误
- 对角化求可逆矩阵_「线性代数」求可逆矩阵P,使得相似矩阵对角化
- 程序员也要学英语——数词攻略
- CSS3解决连续英文字符或数字不能自动换行的问题
- Java实现身份证号合法性校验(包含港澳台地区)
- 39岁了,我依然要谈梦想