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();
}
}
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。