栈接口的定义
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();就可以了。
转载于:https://blog.51cto.com/secondscript/1616873