java数组、链表实现栈
来源:互联网 发布:mac重装系统保留文件 编辑:程序博客网 时间:2024/06/04 23:30
话不多说,直接上代码:
定义一个通用的接口:
public interface MyStack <T>
{
boolean isEmpty(); //判断是否为空
int getLength(); //获得长度
void clear(); //清空
T pop();
boolean push(T data);
}
一、数组实现栈:
public class MyArrStack<T> implements MyStack<T>
{
private Object[] objs = new Object[5];
private int size = 0;
@Override
public boolean isEmpty()
{
// TODO Auto-generated method stub
return size==0;
}
@Override
public int getLength()
{
// TODO Auto-generated method stub
return size;
}
@Override
public void clear()
{
// TODO Auto-generated method stub
for(int i=0;i<size;i++)
{
objs[i]=null;
}
size=0;
}
@Override
public T pop()
{
// TODO Auto-generated method stub
if(size==0)
{
return null;
}
else
return (T)objs[--size];
}
@Override
public boolean push(T data)
{
// TODO Auto-generated method stub
if(size>=objs.length)
{
//System.out.println("数组已满");
Object[] tmp=new Object[objs.length*3/2+1];
for(int i=0;i<size;i++)
{
tmp[i]=objs[i];
objs[i]=null;
}
objs=tmp;
}
objs[size++]=data;
return true;
}
public static void main(String[] args)
{
MyStack<Integer> st = new MyArrStack<Integer>();
int[] num={1,2,3,5,8,9,6};
for(int i=0;i<num.length;i++)
{
st.push(num[i]);
}
System.out.println("栈中有"+st.getLength()+"个数");
while(!st.isEmpty())
{
System.out.println(st.pop());
}
}
}
二、链表实现栈:
public class MyLinkedStack<T> implements MyStack<T>
{
private Node top;
private int size;
public MyLinkedStack()
{
top=null;
size=0;
}
@Override
public boolean isEmpty()
{
// TODO Auto-generated method stub
return size==0;
}
@Override
public int getLength()
{
// TODO Auto-generated method stub
return size;
}
@Override
public void clear()
{
// TODO Auto-generated method stub
top=null;
size=0;
}
@Override
public T pop()
{
// TODO Auto-generated method stub
if (top != null) {
Node node = top;
// 改变栈顶指针
top = top.pre;
size--;
return node.data;
}
return null;
}
@Override
public boolean push(T data)
{
// TODO Auto-generated method stub
Node node=new Node();
node.data=data;
node.pre=top;
top=node;
size++;
return true;
}
private final class Node
{
private Node pre;
private T data;
}
public static void main(String[] args)
{
int[] num={5,2,1,7,9,6,3};
MyStack<Integer> st=new MyLinkedStack<Integer>();
for(int i=0;i<num.length;i++)
{
st.push(num[i]);
}
System.out.println("栈的长度为:"+st.getLength());
while(!st.isEmpty())
{
System.out.println(st.pop());
}
}
}
- Java栈实现:数组实现和链表实现
- java数组、链表实现栈
- java数组实现栈
- java数组实现栈
- java 数组实现栈
- Java数组实现栈
- java 队列与栈实现(链表与数组)
- Java数组实现循环队列、Java链表实现队列
- java详解 --- 集合之数组实现和链表实现
- java自定义栈(数组实现)
- java 用数组实现栈
- java实现栈(数组方式)
- Java用数组实现栈
- 数组实现动态栈,java
- Java数组实现自定义栈
- java用数组实现栈
- java自定义栈(数组实现)
- Java - - 数组实现栈基本功能
- CRS-0215: Could not start resource 'ora.rac2.vip'.的解决方法
- poj1678 I Love this Game!---dp博弈
- 杭电acm 题目分类
- 反抗金山毒霸的代码
- JavaScript成最受欢迎编程语言
- java数组、链表实现栈
- sqlite之我见--C/C++ API接口介绍
- 黑马程序员_高新技术1
- LaTeX中各种自定义名与其自定义命令
- 自定义标签 实现页面显示properties中key对应的属性值
- 二分查找
- 放苹果
- hdu 3753 字符串 Alignment of Code
- 以后的路