数据结构——队列(Java实现)

编程实现对循环链队列的入队和出队操作。

⑴根据输入的队列长度n和各元素值建立一个带头结点的循环链表表示的队列(循环链队列),并且只设一个尾指针来指向尾结点,然后输出队列中各元素值。

⑵将数据元素e入队,并输出入队后的队列中各元素值。

⑶将循环链队列的队首元素出队,并输出出队元素的值和出队后队列中各元素值。


public class CircleLinkQueue {
	private Node front;
	private Node rear;// 循环链队列的尾指针

	// 构造方法
	public CircleLinkQueue() {// 构造一个带头结点的空循环链队列
		rear = new Node(); // 初始化头结点并用尾指针指向它
		rear.setNext(rear);
		front=rear;
	}

	public void offer(Object x) { // 将指定的元素x插入到带头结点的循环链队列中
		Node p = new Node(x); // 生成新结点
		p.setNext(rear.getNext());// 插入链队列的尾部
		rear.setNext(p);
		rear = p;
	}

	public Object poll() {
		// 移除带头结点的循环链队列中的队首元素并返回其值,如果此队列为空,则返回 null
		if (rear.getNext() == rear) // 队列为空
			return null;
		else {
			Node p = rear.getNext().getNext();// p指向待删除的队首结点
			if (p == rear) {// 被删结点是即是队首结点,又是队尾结点
				rear = rear.getNext();
				rear.setNext(rear); // 删除队首结点后,链队列变成了空循环链队列
			} else
				rear.getNext().setNext(p.getNext());// 删除队首结点
			return p.getData();
		}
	}
	public void display() throws Exception{
		Node p=front.getNext();
		if(rear==front)
			throw new Exception("队列为空!");
		while(p!=front){
			System.out.print(p.getData() + " ");
			p=p.getNext();
		}
		System.out.println();
		
		
	}

}


public class LinkedQueueList {
	public static void main(String[] args) throws Exception{
		CircleLinkQueue C=new CircleLinkQueue();
		System.out.println("入队之后");
		C.offer(1);
		C.offer(2);
		C.offer(3);
		C.display();
		System.out.println("增加一个4");
		C.offer(4);
		C.display();
		System.out.println("出列");
		C.poll();
		C.display();
	}
}

运行结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值