您的位置:首页 > 编程语言 > Java开发

栈--数组存储--Java实现

2015-12-30 20:46 423 查看
是一种基于后进先出(LIFO)的数据结构,其他就不介绍了。

定义了两个私有变量,数组a和元素个数N

void ResizingArrayStack():初始化栈

int size(): 返回栈的元素个数

boolean isEmpty(): 判断栈是否为空

void resize(int):调整栈的大小

push(Item):压栈

pop():出栈

peek():返回栈顶元素

iterator():迭代器

class ReverseArrayIterator :迭代器类

/***********Java 使用数组动态生成栈 *********
* @author ddh
* 2015/12/30
*/

package cn.edu.scut.ddh;
import java.util.Iterator;
import java.util.NoSuchElementException;
@SuppressWarnings("unchecked")
public class ResizingArrayStack<Item> implements Iterable<Item> {
//数组,存放元素
private Item[] a;
//栈中元素个数
private int N;

//构造函数,初始化栈
public ResizingArrayStack(){
a = (Item[]) new Object[2]; //初始化数据大小为2
N = 0;
}
//返回栈的大小
public int size(){
return N;
}

//判断栈是否为空
public boolean isEmpty(){
return N == 0;
}

//调整栈的大小
public void resize(int capacity){
Item[] nItems = (Item[]) new Object[capacity];
for(int i=0; i < N; i++){
nItems[i] = a[i];
}
a = nItems;
}

//压栈
public void push(Item item){
if(N == a.length) resize(2 * N);
a[N++] = item;
}

//出栈
public Item pop(){
if( isEmpty()) throw new NoSuchElementException();
Item item = a[N-1];
a[N-1] = null;
N--;
if(N >0 && N == a.length / 4) resize(a.length / 2);
return item;
}

//返回栈顶元素,其实这是浅复制,会影响原先的元素
public Item peek(){
if(isEmpty()) throw new NoSuchElementException();
return a[N-1];
}

public Iterator<Item> iterator() {
// TODO Auto-generated method stub
return new ReverseArrayIterator();
}

//创建一个迭代器私有类,
private class ReverseArrayIterator implements Iterator<Item>{
4000
private int i;
public ReverseArrayIterator(){
i = N-1;
}

public boolean hasNext() {
return i >= 0;
}

public Item next() {
if(!hasNext()) throw new NoSuchElementException();
return a[i--];
}

public void remove() {

}
}
/**
* Unit tests the <tt>Stack</tt> data type.
*/
public static void main(String[] args) {
ResizingArrayStack<String> s = new ResizingArrayStack<String>();
while (!StdIn.isEmpty()) {
String item = StdIn.readString();
if (!item.equals("-")) s.push(item);
else if (!s.isEmpty()) StdOut.print(s.pop() + " ");
}
StdOut.println("(" + s.size() + " left on stack)");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java