java链式队列出队_java实现链式队列

java实现链式队列。。。比较简单

package datastruct;

public class QueueLink implements Queue {

// 定义一个节点内部类

class Node {

private Object data;

private Node next;

public Node(Object obj) {

this.data = obj;

}

public Node() {

}

}

// 定义链式队列的一些属性

private Node head; // 头指针(引用)

private Node rear; // 尾指针(引用)

private int length; // 队列的长度,开始为1

private Node temp; // 临时指针(引用)

// 初始化队列,空头指针

public QueueLink() {

head = new Node();

rear = head;

length = 1;

}

// 初始化队列,有数据头指针

public QueueLink(Object obj) {

head = new Node(obj);

rear = head;

length = 1;

}

public boolean clear() {

// TODO Auto-generated method stub

if(this.length==1){

return true;

}else if(length==2){

head.next=null;

//没有引用的节点java会自动回收内存

}else {

while(head.next.next!=null){

head.next=head.next.next;

}

head.next=null;

return true;

}

return false;

}

// 判空

public boolean isEmpty() {

// TODO Auto-generated method stub

if (this.length() == 1) {

return true;

} else {

return false;

}

}

// 获得队列的长度

public int length() {

// TODO Auto-generated method stub

return this.length;

}

// 添加一个节点

public void offer(Object x) {

this.temp = new Node(x);

// 队列使用尾插法

rear.next = temp;

rear = temp;

this.length++;

// TODO Auto-generated method stub

}

// 查看第一个节点

public Node peek() {

// TODO Auto-generated method stub

if (length == 1) {

temp=null;

} else {

temp= head.next;

}

return temp;

}

//删除第一个节点

public Node poll() {

// TODO Auto-generated method stub

if(length==1){

//无法删除

temp=null;

}else

if(length==2){

this.temp= head.next;

//置空下一个节点就可以了

head.next=null;

length--;

}else{

this.temp= head.next;

this.head.next=this.head.next.next;

length--;

}

return temp;

}

//test

public static void main(String[] args) {

QueueLink linkQueue = new QueueLink();

System.out.println("队列是否为空:"+linkQueue.isEmpty());

System.out.println("连续入队-------------------------------");

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

linkQueue.offer((char)(97+i));

}

System.out.println("队列长度为:"+linkQueue.length());

System.out.println("队首元素为:"+linkQueue.peek().data);

//出队

System.out.println("连续出队-------------------------------");

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

Object data=linkQueue.poll();

}

System.out.println("队列长度为:"+linkQueue.length());

}

}

结果为:

队列是否为空:true

连续入队-------------------------------

队列长度为:6

队首元素为:a

连续出队-------------------------------

队列长度为:2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值