您的位置:首页 > 其它

用数组和链表实现栈结构

2016-08-08 00:00 253 查看
摘要: 数组实现栈结构

栈是一种 “后进先出”的线性结构:

用数组实现一个简单的栈结构

public class Stack<E> {

//使用数组来实现栈结构:
private Object[] stack;//存放元素
private int size;//栈的大小,即数组中元素的个数
public Stack(){
stack = new Object[10];
}
//判断数组是否满了,若满了,则扩容
private void ensureCapacity(int size){
int len = stack.length;
if (size > len) {//数组以满
stack = Arrays.copyOf(stack, 10);//每次扩容10
}
}

public boolean isEmpty(){
return size == 0;
}

//入栈
public E push(E item){
ensureCapacity(size+1);
stack[size++] = item;
return item;
}
//peep()返回栈顶元素
public E peep(){
if (this.isEmpty()) {
return null;
}
return (E) stack[size-1];
}
//pop() 移除栈顶元素
public E pop(){
E e = peep();
stack[size-1] = null;
size--;
return e;
}
}

测试:

public static void main(String[] args) {
Stack stack = new Stack();
stack.push("AAA");
stack.push("BBB");
stack.push("CCC");
stack.push("DDD");
stack.push("EEE");
System.out.println(stack.size);
System.out.println(stack.pop());//返回并移除栈顶元素
System.out.println(stack.size);
System.out.println(stack.peep());//返回栈顶元素
System.out.println(stack.isEmpty());
}

结果:

5
EEE
4
DDD
false

-------------------------------------------------我是一条华丽的分界线------------------------------------------------------

用链表实现一个简单的栈结构:

节点的定义:

class Node<E>{
Node<E> next = null;
E data;
public Node(E date) {
this.data = date;
}
public Node() {
}
}

public class Stack<E> {
Node<E> top = null;
public boolean isEmpty(){
return top == null;
}
public void push(E date){
Node<E> newNode = new Node<E>(date);
newNode.next = top;
top = newNode;
}
public E pop(){
if (this.isEmpty()) {
return null;
}
E data = top.data;
top = top.next;
return data;
}
public E peep(){
if (this.isEmpty()) {
return null;
}
return top.data;
}
}

测试:

public static void main(String[] args) {
Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.pop());
System.out.println(stack.peep());
System.out.println(stack.isEmpty());
}

结果:

4
3
false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐