package ch03; public interface IQueue<E> { boolean enqueue(E item);//入队 E dequeue(); //出队 E peek(); //取队头元素 int size(); //求队列的长度 void clear();//清空队列 boolean isEmpty(); //判断队列是否为空 }
package ch03; public interface IStack<E> { boolean push(E e);//入栈 E pop();//出栈 E peek();//取栈顶元素 int size();//获取栈中元素的个数 boolean isEmpty();//是否为空 void clear();//清空栈 }
package ch03; public class LinkNode<E> { E data; LinkNode<E> next; public LinkNode(E data) { this.data = data; } public LinkNode(E data, LinkNode<E> next) { this.data = data; this.next = next; } }
package ch03; public class LinkStack<E> implements IStack<E> { LinkNode<E> top; int size; public LinkStack() { this.top = null; size=0; } public boolean push(E e) { // TODO Auto-generated method stub /*创建一个新结点,为新结点分配内存并为数据字段分配值。 如果栈不为空,将新结点的next指向栈顶指示器top所指向的结点。 将栈顶指示器top指向新结点。 将栈元素个数size加1,返回新添加的数据元素。*/ LinkNode<E> newNode=new LinkNode<E>(e); if(!(top==null)) { newNode.next=top; } top=newNode; size++; return true; } public E pop() { /*如果栈不为空,获取栈顶指示器top所指向结点的值。 将栈顶指示器top指向单链表中下一个结点。 栈元素个数size减1。*/ if(top==null) return null; E tmp=top.data; top=top.next; size--; return tmp; } @Override public E peek() { /*检查栈中是否含有元素,如果无,返回null 获取索引top中的值元素*/ if (top==null) return null; //E tmp=top.data; return top.data; } @Override public int size() { // TODO Auto-generated method stub return size; } @Override public boolean isEmpty() { return top==null; } @Override public void clear() { top=null; } }
package ch03; import java.lang.reflect.Array; public class SeqQueue<E> implements IQueue<E> { E data[]; int maxsize; int front,rear; int size; public SeqQueue(Class<E> type,int maxsize){ data=(E[])Array.newInstance(type, maxsize); this.maxsize=maxsize; front=rear=-1; size=0; } public boolean enqueue(E item) { // TODO Auto-generated method stub if(rear==maxsize-1) return false; rear++; data[rear]=item; return true; } public E dequeue() { if(isEmpty()) return null; front++; return data[front]; } public E peek() { if(isEmpty()) return null; return data[front]; } public int size() { // TODO Auto-generated method stub return size; } public void clear() { rear=front=-1; } public boolean isEmpty() { // TODO Auto-generated method stub return rear==front; } }
package ch03; import java.lang.reflect.Array; public class SeqStack<E> implements IStack<E> { E[] data; int maxsize; int top; public SeqStack(Class<E> type,int maxsize ) { data=(E[])Array.newInstance(type,maxsize); this.maxsize=maxsize; top=-1; } public boolean push(E e) { if(top==maxsize-1) { return false; } top++; data[top]=e; return true; } public E pop() { if(top == -1) return null; E e = data[top]; top--; return e; } public E peek() { if(top == -1) return null; E e = data[top]; return e; } public int size() { return top+1; } public boolean isEmpty() { return top==-1; } public void clear() { top=-1; } }
package ch03; public class TestQueue { public static void main(String[] args) { IQueue<Integer> queue=new SeqQueue<Integer>(Integer.class,5); for(int i=1;i<=5;i++) queue.enqueue(i*2); for(int i=1;i<=5;i++) System.out.print(queue.dequeue()+" "); } }
package ch03; public class TestSeqStack { public static void main(String[] args) { //IStack<Integer> stack=new SeqStack<Integer>(Integer.class,5); IStack<Integer> stack=new LinkStack<Integer>(); for(int i=1;i<=5;i++) stack.push(i*2); for(int i=1;i<=5;i++) System.out.print(stack.pop()+" "); } }