java版数据结构与算法—队列、两个栈实现一个队列

/**
 * 队列:先进先出
 */
class MyQueue {
    int a[];
    int maxSize; //大小
    int front;  //开头
    int rear;   //结尾
    int nItems; //元素个数
    //初始化
    public MyQueue(int size){
        maxSize = size;
        a = new int[maxSize];
        front = 0;
        rear = -1;
        nItems = 0;
    }
    //插入
    public void insert(int value){
        if(rear == maxSize - 1){
            rear = -1;
        }
        a[++rear] = value;
        nItems ++;
    }
    //删除
    public int remove(){
        int tmp = a[front++];
        if(front == maxSize){
            front = 0;
        }
        nItems --;
        return tmp;
    }
    //查看
    public int peekFront(){
        return a[front];
    }
    //判满
    public boolean isFull(){
        return nItems == maxSize;
    }
    //判空
    public boolean isEmpty(){
        return nItems == 0;
    }
    //查看元素个数
    public int size(){
        return nItems;
    }

    public static void main(String[] args){
        MyQueue myQueue = new MyQueue(10);
        myQueue.insert(10);
        myQueue.insert(20);
        myQueue.insert(30);
        myQueue.insert(40);
        myQueue.insert(50);
        System.out.println("删除一次:" + myQueue.remove());
        System.out.println("删除两次:" + myQueue.remove());
        System.out.println("删除三次:" + myQueue.remove());
        myQueue.insert(60);
        myQueue.insert(70);
        myQueue.insert(80);
        myQueue.insert(90);
        myQueue.insert(100);
        myQueue.insert(600);
        while (!myQueue.isEmpty()){
            int value = myQueue.remove();
            System.out.print(value + " ");
        }
    }
}

在这里插入图片描述

package com.zoujc.test2;

import java.util.Stack;

/**
 * @author zoujc
 * @date 2018/11/27
 * 用两个核实现一个队列。队列的声明如下,诸实现它的两个函数appendTail和deleteHead,
 * 分别完成在队列尾部插入结点和在队列头部删除结点的功能。
 */
public class MList<T> {
	//插入栈1
	private Stack<T> stack1 = new Stack<>();
	//弹出栈2
	private Stack<T> stack2 = new Stack<>();

	public MList(){

	}
	//在队列的尾部插入节点
	public void appendTail(T t){
		stack1.add(t);
	}
	//删除,在队列的头部删除节点
	public T deleteHead(){
		//栈2为空的时候,把栈1的所有数据插入到栈2
		if(stack2.isEmpty()){
			while(!stack1.isEmpty()){
				stack2.add(stack1.pop());
			}
		}
		//如果栈2中还没有数据,则抛出异常
		if(stack2.isEmpty()){
			throw new RuntimeException("No more element.");
		}
		//出队列,返回栈顶元素
		return stack2.pop();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_38799368/article/details/84146439
今日推荐