java数据结构与算法 第4章 栈和队列

本文深入探讨了Java中栈和队列两种数据结构。栈是一种后进先出(LIFO)的数据结构,只允许访问最近插入的元素。而队列则遵循先进先出(FIFO)原则,最先插入的元素将最先被移除。文章通过实例展示了如何在Java中实现这两个基本数据结构。
摘要由CSDN通过智能技术生成

1.栈
栈只允许访问一个数据项, 即最后插入的数据项,移除这个数据项才能访问倒数第二个插入的数据项,依此类推。以下是java实现的栈:

package exam;

public class StackTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        StackX stackArray =new StackX(10);
        stackArray.push(10);
        stackArray.push(20);
        stackArray.push(30);
        stackArray.push(40);
        stackArray.push(50);
        while (!stackArray.isEmpty()) {
            long value=stackArray.pop();
            System.out.println(value);
            //结果
//          50
//          40
//          30
//          20
//          10
        }
    }

}

class StackX{
    private int maxSize; //栈数组大小;
    private long[] stackArray; 
    private int top;

    public StackX(int s){
        maxSize=s;    //数组大小
        stackArray=new long[maxSize];  //创建数组
        top=-1;
    }
    //插入元素
    public void push(long i){
        stackArray[++top]=i;
    }

    public long pop(){
        return stackArray[top--];
    }

    public long peek(){
        return stackArray[top];
    }
    public boolean isEmpty(){
        return (top==-1);
    }
    public boolean isFull(){
        return (top==maxSize-1);
    }
}

2.队列

和栈类似,但是先插进入的先出。

package exam;

public class QueueTest {
    public static void main(String[] args) {
        Queue testQueue= new Queue(5);
        testQueue.insert(10);
        testQueue.insert(30);
        testQueue.insert(40);
        testQueue.insert(20);

        testQueue.remove();
        testQueue.remove();
        testQueue.remove();

        testQueue.insert(60);
        testQueue.insert(70);
        testQueue.insert(80);
        testQueue.insert(90);

        while (!testQueue.isEmpty()) {
            long n=testQueue.remove();
            System.out.println(n);
        }
    }
}

class Queue{
    private int maxsiza;
    private long[] queArray;
    private int front; //对头
    private int rear; //队尾
    private int nItems; //当前数据项的个数

    public Queue(int s){
    maxsiza=s;
    queArray=new long[maxsiza];
    front = 0;
    rear =-1;
    nItems = 0;
    }
    //插入的前提应该是队列不满  ISFull()为true
    public void insert(long j){
        if(rear==maxsiza-1)
            rear =-1;
        queArray[++rear] = j;
        nItems++;
    }
    //remove方法的前提是队列不为空
    public long remove(){
    long temp =queArray[front++];
    if(front == maxsiza)
    front = 0;
    nItems--;
    return temp;
    }

    public long peekFront(){
        return queArray[front];
    }

    public boolean isEmpty(){
        return (nItems==0);
    }

    public boolean isFull(){
        return (nItems==maxsiza);
    }

    public int size() {
        return nItems;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值