我以前用JavaScript写过栈和队列,这里初学Java,于是想来实现栈,基于数组和链表。

下面上代码:

 import java.io.*;
//用接口来存放需要的所有操作
interface stack<T>{
boolean isEmpty(); //判空
void clear(); //清空
T pop(); //弹栈
boolean push(T data); //入栈
int length(); //返回长度
T peek(); //查看栈顶值
int search(T t); //查找元素位置
void display(); //输出所有的元素
} //用数组实现栈
class ArrayStack<T> implements stack<T>{
public ArrayStack(){}
private T[] array = (T[])new Object[16];
private int size = 0; public int length(){
for(int i=0;i<array.length;i++){
if(array[i] != null) size++;
}
return size;
} public boolean isEmpty(){
return (size == 0);
} public void clear(){
for(int i=0;i<array.length;i++){
array[i] = null;
}
size = 0;
} public T pop(){
if(size == 0) return null;
else{
T temp = array[size-1];
array[size-1] = null;
size--;
return temp;
}
} public boolean push(T data){
if(size >= array.length) {
resize(); //重新分配一个两倍大小的数组
array[size++] = data;
}
else{
array[size++] = data;
}
return true;
} public void resize(){
T[] temp = (T[])new Object[array.length*2];
for(int i=0;i<array.length;i++){
temp[i] = array[i];
}
for(int i=array.length;i<array.length*2;i++){
temp[i] = null;
}
array = temp;
temp = null;
} public T peek(){
if(size == 0) return null;
else return array[size-1];
} public int search(T t){
for(int i=0;i<size;i++){
if(array[i] == t) return i+1;
}
return 0;
} public void display(){
for(int i=0;i<size;i++){
System.out.println("data: " + array[i]);
}
} } //用链表实现栈 class LinkStack<T> implements stack<T>{
public LinkStack(){
this.top = null;
this.size = 0;
}
//存放数据的结点
class Node{
private T data;
private Node pre;
}
private Node top; //栈顶指针
private int size; //栈的大小 public boolean isEmpty(){
if(size == 0) return true;
else return false;
} public void clear(){
top = null;
size = 0;
} public T pop(){
if(top != null){
T temp = top.data;
top = top.pre;
size--;
return temp;
}
return null;
} public boolean push(T data){
Node node = new Node();
node.data = data;
node.pre = null;
if(top == null){
top = node;
node = null;
size++;
return true;
}
else{
node.pre = top;
top = node;
node = null;
size++;
return true;
}
} public int length(){
return size;
} public T peek(){
return top.data;
} public int search(T t){
int num = size;
while(top.pre != null)
{
if(top.data == t)
return (num-1);
else
{
top = top.pre;
num--;
}
}
return 0;
} public void display(){
Node node = top;
while(top != null)
{
System.out.println("data: " + top.data);
top = top.pre;
}
top = node;
node = null;
} } public class test{
public static void main(String[] args){
ArrayStack<String> a = new ArrayStack();
a.push("hello,world...");
a.push("my name is: ");
a.push("jeavenwong");
a.display(); LinkStack<String> b = new LinkStack();
b.push("how are you?");
b.push("i am fine...");
b.push("and you?...");
b.display();
}
}

下面是我的运行结果:

如有不对,欢迎批评指正。

栈的数组和链表实现(Java实现)的更多相关文章

  1. 二叉树、栈、队列、链表的Java代码实现

    这是我的学习总结. 如有文章存在谬误,欢迎指出,有其他意见或者建议,也欢迎留言 二叉树链表 前序遍历:先访问根节点,然后访问左子树.右子树 中序遍历:先访问左子树,然后访问根节点.右子树 后序遍历:先 ...

  2. 栈的Java实现-分别使用数组和链表

    栈是非常重要的数据结构,栈具有后进先出的特点. 在JVM内部,每个线程维护一个栈,对于每个方法调用,入栈一个元素,成为栈帧,当方法执行完成后,对应的栈帧出栈. 栈帧中,也包含一个栈,称为操作数栈. 一 ...

  3. 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树

    不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...

  4. Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析

    重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...

  5. 数组和链表--Java学习笔记(一)

    版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 我是一个全职妈妈,两年前在上海一家人力资源 ...

  6. 源码:Java集合源码之:数组与链表(一)

    数组和链表是数据结构中最基本的部分. 数组 在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组在内存中是一段连续的存储单元,每 ...

  7. JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  8. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  9. 数组、链表、栈、队列和STL

    数组 数组是一种最基本的数据结构,它是内存上的一块连续存储空间.正因如此数组的随机访问很方便.但数组也有其固有的限制,大小分配后不能改变. STL中的数组 STL中的Array是静态数组模板,就是我们 ...

随机推荐

  1. MongoDB数据库、集合、文档的操作

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  2. 后端排序,debug模式中map的顺序出错

    js中map遍历的顺序是按照插入的顺序来执行的.如果map的来源是字符串转换的,那么就会按照字符串中key值的顺序进行遍历.千万不要被debug中显示的顺序误导,这里应该是为了方便查看对key进行了字 ...

  3. 实例详解jQuery的无new构建

    jQuery的无new构建 jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作. 回想一下使用 jQuery 的时候,实例化一个 jQuery 对象的方法: // 无 new 构造 $( ...

  4. 怎样在微信H5中点击直接跳转到公众号

    第一步: 打开微信公众号, 随便找一篇公众号文章, 将它发送给你的某个好友. 第二步: 使用默认浏览器打开这个分享的文章链接, 然后复制链接里面的biz字段到下面这个URL中替换 第三步: 在html ...

  5. 怎样获取从服务器返回的xml或html文档对象

    使用 xhr.responseXML;  通过这个属性正常获取XML或HTML文档对象有两个前置条件: 1. Content-Type头信息的值等于: text/xml 或 application/x ...

  6. 作业13:Map相关知识点(一)

    一 Map相关类图 二 Map接口 1 Map接口中的方法 jdk 方法名 简单描述 put(K,V):V 添加value,当Key对应无值,返回null;有值则返回上一个值.(覆盖式,可以反复覆盖前 ...

  7. chartjs显示数值标签插件:chartjs-plugin-datalabels

    Getting Started #Installation #npm   npm install chartjs-plugin-datalabels --save This plugin can al ...

  8. [NOIP2018模拟10.15]比赛报告

    闲扯 昨晚又颓到好晚,Yali的降智光环感觉持续至今... 题面好评 T1T3都玩过 逃) T1没看多久就开始写二分+并查集 然后T3看着眼熟想了一个多小时...结果啥都没想出来 赶紧看T2发现还是没 ...

  9. js重点——作用域——作用域分类(三)

    一.作用域可以分为全局作用域,局部作用域(函数作用域)和块级作用域. 1.全局作用域 代码在程序中的任何位置都能被访问到,window对象的内置属性都拥有全局作用域. <script> v ...

  10. 如何部署struts开发环境

    1 首先登陆http://archive.apache.org/dist/struts/source/页面,会看到struts的下载页面 2 下载struts的最新版本struts2-2.2.1-sr ...