Java实现队列的三种方法集合

网友投稿 332 2022-11-21


Java实现队列的三种方法集合

数组实现队列

//数组实现队列

class queue{

int[] a = new int[5];

int i = 0;

//入队操作

public void in(int m) {

a[i++] = m;

}

// 出队列操作 取出最前面的值 通过循环遍历把所有的数据向前一位

public int out() {

int index = 0;

int temp = a[0];

for(int j = 0;j < i;j++) {

a[j] = a[j + 1];

}

return temp;

}

}

ArrayList实现队列

//集合实现队列

class queue{

List list = new ArrayList();

int index = 0;

public void in(int n) {

list.add(n);

index++;

}

//出队列操作

//出队

public int out(){

if(!list.isEmpty()){

index--;

return list.remove(0);

}

return -1;

}

}

两个堆栈实现队列

//两个堆栈实现一个队列

class queue3 {

Stack stackA = new Stack();

Stack stackB = new Stack();

//入队

public void in(int n) {

stackA.push(n);

}

//出队 我们把A里面的元素遍历拿出放入B中 再拿出B中的第一个元素

public int out() {

//判断b栈有没有元素 有返回false 无返回真

if(stackB.isEmpty()) {

while(!stackA.isEmpty()) {

stackB.push(stackA.pop());

}

}

return stackB.pop();

}

}

补充知识:java使用链表实现队列

队列使用Java进行链表实现,在网上找到了一张图,很好,借鉴一下

设置两个结点node,front指向队首元素,rear指向队尾;

上代码:

public class LinkedQueue {

Node front;//队头指针,指向队头节点

Node rail;//队尾指针,指向队尾节点http://

int size = 0;//记录队列长度

//构造函数http://

public LinkedQueue() {

front = rail = null;

}

public boolean isEmpty() {

return size == 0 ? true : false;

}

//添加元素

public boolean addQueue(Object ele) {

if (size == 0) {

front = new Node(null, ele);

rail = front;

size++;

return true;

}

Node s = new Node(null, ele);

//这块有个主意的地方,一旦rail设置了next属性,因为front节点与rail节点指向了同一个node节点,持有同一个结点的一个引用,因此front节点next属性也被填充

rail.setNext(s);

rail = s;

size++;

return true;

}

/**

* 删除元素,出队列

* @return

*/

public boolean deleteQueue() {

if (isEmpty()) {

System.out.println("当前队列为空");

return false;

}

front = front.next;

size--;

return true;

}

public static void main(String[] args) {

LinkedQueue queue = new LinkedQueue();

queue.addQueue(1);

queue.addQueue(2);

queue.addQueue(3);

queue.deleteQueue();

}

}

/**

* 首先链表底层是一个个结点

*/

class Node {

Node next;

Object element;

public Node(Node next, Object element) {

this.next = next;

this.element = element;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

public Object getElement() {

return element;

}

public void setElement(Object element) {

this.element = element;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java引用传递和值传递栈内存与堆内存的指向操作
下一篇:浅谈从Java中的栈和堆,进而衍生到值传递
相关文章

 发表评论

暂时没有评论,来抢沙发吧~