花间一壶酒

导航

栈-顺序存储-Java实现

package com.wrh.lab.dataStructure.stackAndQueue;

/**
* the interface of the SeqStack
*
@author wrh
*
*
@param <E>
*/

public interface Stack<E> {

/**
* push the element to the stack
*
@param element
*/

public void push(E element);

/**
* pop the element from the stack and
* return the pop element
*/

public E pop();

/**
*
*
@return the top value
*/

public E getTop();

/**
*
*
@return true for empty and false for not empty
*/

public boolean isEmpty();

/**
* clear the stack
*/

public void clear();

}

 

package com.wrh.lab.dataStructure.stackAndQueue;

/**
*
*
@author wrh
* the stack node
*/

public class StackNode<E> {
private E element;
private StackNode<E> next;

/**
* constructor
*/

public StackNode() {
element = null;
next = null;
}

public StackNode(E element, StackNode<E> next) {
this.element = element;
this.next = next;
}

public E getElement() {
return element;
}

/**
*
@param element
*/

public void setElement(E element) {
this.element = element;
}

public StackNode<E> getNext() {
return next;
}

public void setNext(StackNode<E> next) {
this.next = next;
}

}

 

package com.wrh.lab.dataStructure.stackAndQueueImpl;

import com.wrh.lab.dataStructure.stackAndQueue.Stack;

public class SeqStackImpl<E> implements Stack<E> {
private static final int defaultSize = 3;
private int size; //max size of the stack
private int top; //index for top object
private E[] listArray; //array hoding stack objects
private static final int MAX_SIZE = 7;

/**
* constructor init a stack for the size defaultSize
*/

public SeqStackImpl() {
size = defaultSize;
top = -1;
listArray = (E[]) new Object[size];
}

/**
* constructor
* init a stack for the size of size
*
@param size
*/

public SeqStackImpl(int size) {
if (size < 1 || size > MAX_SIZE) {
System.out.println("the size is not vailable");
} else {
this.size = size;
top = -1;
listArray = (E[]) new Object[size];
}
}


@Override
public void push(E element) {
if (size < MAX_SIZE && top < size) {
listArray[++top] = element;
} else if (top < MAX_SIZE){
resizeList(listArray);
listArray[++top] = element;
} else {
System.out.println("the stack is full! ");
}
}

@Override
public E pop() {
if (isEmpty()) { //if the stack is empty
System.out.println("the stack is empty");

return null;
} else {

return listArray[top--];

}
}

@Override
public E getTop() {
return listArray[top];
}

/**
* resize the list
*
@param entry
*/

public void resizeList(E[] list) {
int resize = size * 3 / 2 +1;
Object[] seqList_upp = new Object[resize];
System.arraycopy(list,0,seqList_upp,0,size);
this.listArray = (E[]) seqList_upp;
}

@Override
public boolean isEmpty() {
return 0 == top;
}

@Override
public void clear() {
top = 0;
}

public static void main(String[] args) {
Stack<Integer> s = new SeqStackImpl<Integer>(5);
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
System.out.println(s.isEmpty());
System.out.println(s.pop());
System.out.println(s.pop());
s.clear();
System.out.println(s.pop());
}

}




posted on 2012-02-16 17:12  wrh526  阅读(190)  评论(0编辑  收藏  举报