栈的数组和链表实现(Java实现)
我以前用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实现)的更多相关文章
- 二叉树、栈、队列、链表的Java代码实现
这是我的学习总结. 如有文章存在谬误,欢迎指出,有其他意见或者建议,也欢迎留言 二叉树链表 前序遍历:先访问根节点,然后访问左子树.右子树 中序遍历:先访问左子树,然后访问根节点.右子树 后序遍历:先 ...
- 栈的Java实现-分别使用数组和链表
栈是非常重要的数据结构,栈具有后进先出的特点. 在JVM内部,每个线程维护一个栈,对于每个方法调用,入栈一个元素,成为栈帧,当方法执行完成后,对应的栈帧出栈. 栈帧中,也包含一个栈,称为操作数栈. 一 ...
- 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树
不多说,直接上干货! 首先来说一个非常形象的例子,来说明下数组和链表. 上体育课的时候,老师说:你们站一队,每个人记住自己是第几个,我喊到几,那个人就举手,这就是数组. 老师说,你们每个人记住自己前面 ...
- Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析
重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...
- 数组和链表--Java学习笔记(一)
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 我是一个全职妈妈,两年前在上海一家人力资源 ...
- 源码:Java集合源码之:数组与链表(一)
数组和链表是数据结构中最基本的部分. 数组 在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组在内存中是一段连续的存储单元,每 ...
- JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- 数组、链表、栈、队列和STL
数组 数组是一种最基本的数据结构,它是内存上的一块连续存储空间.正因如此数组的随机访问很方便.但数组也有其固有的限制,大小分配后不能改变. STL中的数组 STL中的Array是静态数组模板,就是我们 ...
随机推荐
- Maven学习存档(3)——eclipse集成maven
一.安装Maven插件 在eclipse的菜单中选择Help——Install New Software 在弹出框的Work with中写入插件安装地址:http://m2eclipse.sonaty ...
- (转)查找算法:二叉排序树(BSTree)
二叉排序树(Binary Sort Tree),又称为二叉查找树(Binary Search Tree) ,即BSTree. 构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除的 ...
- Django rest-framework框架-请求数据校验
验证实例: class UserInfoSerializer(serializers.Serializer): title = serializer.CharField(error_messages= ...
- c# internal关键字
对于一些大型的项目,通常由很多个DLL文件组成,引用了这些DLL,就能访问DLL里面的类和类里面的方法.比如,你写了一个记录日志的DLL,任何项目只要引用此DLL就能实现记录日志的功能,这个DLL文件 ...
- SAP CRM和C4C的内容管理(Content Management)
SAP CRM内容管理 SAP CRM使用Attachments这个UI给用户提供内容管理的功能.通过新建按钮可以上传本地文档到CRM系统: 该内容管理支持简单的版本管理功能,用户可点击Check O ...
- pymysql_mysql密码重置方法,连接局域网数据库的解决办法
https://blog.csdn.net/qq_37176126/article/details/72824106 pymysql模块的操作 https://blog.csdn.net/skh2 ...
- 关于postgres数据库部署之后,发现不能被外机连接解决办法
数据库 部署完毕之后,用其他机器的navcat连接发现不能连接,如下报错信息 于是在数据库服务器上查询是否启动正常,端口是否正常,发现都没有问题,由于之前也遇到了mysql部署之后,不能被其他机器访问 ...
- C#DataGrid列值出现E形式的小数,将DataGrid表格上的数据保存至数据库表时会因格式转换不正确导致报错
问题描述:在DataGridView中调整金额一列,当输入小数0.000001后会显示1E-6,此时进行保存操作时报错,提示无法将string类型转换成Decimal 原因分析:由于列调整金额为1E- ...
- wampserver apache 500 Internal Server Error解决办法
Internal Server ErrorThe server encountered an internal error or misconfiguration and was unable to ...
- java线程基础巩固---创建并启动线程
对于java的并发编程方面的东东,不管是面试还是实际工作开发都是非常重要的,而往往只要涉及到并发相关的东东有点让人觉得有点难,而实际工作中涉及到并发可能就是简单的用下同步块.上锁之类的一些简单的操作, ...