栈的主要机制可以用数组来实现,也可以用链表来实现,下面用数组来实现栈的基本操作:
class ArrayStack{
private long[] a ;
private int size;//栈数组的大小
private int top;//栈顶
public ArrayStack(int maxSize){
this.size=maxSize;
this.a=new long[size];
this.top=-1;//表示空栈
}
public void push(long value){//入栈
if(isFull()){
System.out.println("栈已满");
return;
}
a[++top]=value;
}
public long peek(){//返回栈顶内容,但不删除
if(isEmpty()){
System.out.println("栈中没有数据");
return 0;
}
return a[top];
}
public long pop(){//弹出栈顶内容,删除
if(isEmpty()){
System.out.println("栈中没有数据");
return 0;
}
return a[top--];
}
public int size(){
return top+1;
}
public boolean isEmpty(){
return(top==-1);
}
public boolean isFull(){
return (top==size-1);
}
public void display(){
for(int i=top;i>=0;i--){
System.out.println(a[i]+" ");
}
System.out.println("");
}
}
队列:
public class RoundQueue{
private long[] a;
private int size;//数组大小
private int nItems;//实际存储数量
private int front;//头
private int rear;//尾
public RoundQueue(int maxSize){
this.size=maxSize;
a=new long[size];
front=0;
rear=-1;
nItems=0;
}
public void insert(long value){
if(isFull()){
System.out.println("队列已满");
return;
}
rear=++rear%size;
a[rear]=value;//尾指针满了就循环到0处,这句相当于下面注释内容
nItems++;
}
public long remove(){
if(isEmpty()){
System.out.println("队列为空");
return 0;
}
nItems--;
front=front%size;
return a[front++];
}
public void display(){
if(isEmpty()){
System.out.println("队列为空");
return;
}
int item=front;
for(int i=0;i<nItems;i++){
System.out.println(a[item++%size]+" ");
}
System.out.println("");
}
public long peek(){
if(isEmpty()){
System.out.println("队列为空");
return 0;
}
return a[front];
}
public boolean isFull(){
return (nItems==size);
}
public boolean isEmpty(){
return(nItems==0);
}
public int size(){
return nItems;
}
}