栈接口的定义
public interface Stack { void push(Object obj); Object pop(); Object peek(); boolean isEmpty(); void clear(); }
栈的顺序存储结构操作实现
public class SequenceStack implements Stack { final int minSize=10; private Object[] stackArray; private int top; public SequenceStack() { top=-1; stackArray=new Object[minSize]; } public SequenceStack(int n) { if(n<minSize) n=minSize; top=-1; stackArray=new Object[n]; } public void push(Object obj) { if(top==stackArray.length-1){ Object[] p=new Object[top*2]; for(int i=0;i<=top;i++) p[i]=stackArray[i]; stackArray=p; } top++; stackArray[top]=obj; } public Object pop() { if(top==-1) return null; top--; return stackArray[top+1]; } public Object peek() { if(top==-1) return null; return stackArray[top]; } public boolean isEmpty() { return top==-1; } public void clear() { top=-1; } }
客户端实现代码
public class Example { public static void main(String[] args) { Stack sck=new SequenceStack(); int []a={3,8,5,17,9,30,15,22}; for(int i=0;i<a.length;i++) sck.push(a[i]); System.out.println(sck.pop()+","+sck.pop()+","+sck.pop()); sck.push(68); System.out.println(sck.peek()+","+sck.pop()+","+sck.pop()); while(!sck.isEmpty()) System.out.print(sck.pop()+" "); System.out.println(); sck.clear(); } }
栈的链接存储结构
链接栈的操作方法十分简单,具体如下:
public class LinkStack implements Stack { private Node top; public LinkStack() { top=null; } public void push(Object obj) { top=new Node(obj,top); } public Object pop() { if(top==null) return null; Node p=top; top=top.next; return p.element; } public Object peek() { if(top==null) return null; return top.element; } public boolean isEmpty() { return top==null; } public void clear() { top=null; } }
客户端实现代码只需要将上一个调试程序的SequenceStack()替换为LinkStack()就可以。
队列
public interface Queue { void enter(Object obj); Object leave(); Object peek(); boolean isEmpty(); void clear(); }
队列的顺序存储结构的实现
public class SequenceQueue implements Queue { final int minSize=10; private Object queueArray[]; private int front,rear; public SequenceQueue() { front=rear=0; queueArray=new Object[minSize]; } public SequenceQueue(int n) { front=rear=0; if(n<=minSize) n=minSize; queueArray=new Object[n]; } public void enter(Object obj) { if((rear+1)%queueArray.length==front) { Object[] p=new Object[queueArray.length*2]; if(rear==queueArray.length-1) { for(int i=1;i<=rear;i++) p[i]=queueArray[i]; } else{ int i,j=1; for(i=front+1;i<queueArray.length;i++,j++) p[j]=queueArray[i]; for(i=0;i<=rear;i++,j++) p[j]=queueArray[i]; front=0;rear=queueArray.length-1; } queueArray=p; } rear=(rear+1)%queueArray.length; queueArray[rear]=obj; } public Object leave() { if(front==rear) return null; front=(front+1)%queueArray.length; return queueArray[front]; } public Object peek() { if(front==rear) return null; return queueArray[(front+1)%queueArray.length]; } public boolean isEmpty() { return front==rear; } public void clear() { front=rear=0; } }
客户端实现代码:
public void Example { public static void main(String[] args) { Queue que=new SequenceQueue(); int []a={3,8,5,17,9,30,15,22,20,13,35,26}; int i; for(i=0;i<a.length;i++) que.enter(a[i]); System.out.print(que.leave()+" "); System.out.print(que.leave()+" "); que.enter(68); System.out.print(que.peek()+" "); System.out.print(que.leave()); while(!que.isEmpty()) System.out.print(que.leave()+" "); System.out.println(); que.clear(); } }
队列的链接存储结构的实现
public class LinkQueue implements Queue { private Node front,rear; public LinkQueue() { front=rear=null; } public void enter(Object obj) { if(rear==null) front=rear=new Node(obj,null); else rear=rear.next=new Node(obj,null); } public Object leave() { if(front==null) return null; Node x=front; front=front.next; if(front==null) rear=null; return x.element; } public Object peek() { if(front==null) return null; return front.element; } public boolean isEmpty() { return front==null; } public void clear() { front=rear=null; } }
客户端实现代码只需要将上一个调试程序的主函数的第一句改为Queue que=new LinkQueue();就可以了。
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1616873
原文地址:http://secondscript.blog.51cto.com/9370042/1616873