数据结构---队列

本文深入探讨了数据结构中的队列概念,包括队列模型、顺序队列和链表队列的实现,详细阐述了进队、出队、获取队头和清除队列等基本操作,并提供了相应的代码示例。此外,还提到了循环顺序队列的实现方式。

1.队列

  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

2.队列的模型
在这里插入图片描述
3.基本算法

1.获取有效长度
2.是否为空
3.进队
4.出队
5.获得对头
6.清除队
7.重写toString方法

4.实现方法

一,顺序队列
在这里插入图片描述
使用列表实现顺序队列。

  1. 获取有效长度

    队列的存的有效长度。

  2. 是否为空

    有效长度是否为0。

  3. 进队

    在数组的尾部进入元素。

  4. 出队

    在数组的头部删除元素,后面的元素向前移动。

  5. 获得对头

    获取列表头部的元素。

  6. 清除队

    将列表的有效长度置为0。

  7. 重写toString方法

    重新拼接字符串,打印输出。

代码:

package p01.动态数组;

public class ArrayQueue<E> implements Queue<E> {
	private ArrayList<E> list;
	public ArrayQueue() {
		this(10);
	}
	public ArrayQueue(int capacity){   
		list=new ArrayList<>(capacity);
	}
	@Override
	public int getSize() {	//获取有效长度
		return list.getSize();
	}

	@Override
	public boolean isEmpty() {	//判断是否为空
		return list.isEmpty();
	}

	@Override
	public void enqueue(E e) {	//进队
		list.addLast(e);
	}

	@Override
	public E dequeue() {	//出队
		return list.removeFirst();
	}

	@Override
	public E getFront() {	//获取对头
		return list.getFirst();
	}

	@Override
	public E getRear() {	//获取队尾
		return list.getLast();
	}

	@Override
	public void clear() {	//清除队列
		list.clear();
	}
	@Override
	public String toString() {	//重写toString方法
		if(isEmpty()){
			return "[]";
		}
		StringBuilder sb=new StringBuilder("[");
		for(int i=0;i<list.getSize();i++){
			if(i==list.getSize()-1){
				sb.append(list.get(i)+"]");
			}else{
				sb.append(list.get(i)+",");
			}
		}
		return sb.toString();
	}
}

二,链表队列
在这里插入图片描述
使用链表列表实现。

  1. 获取有效长度

    队列的存的有效长度。

  2. 是否为空

    有效长度是否为0。

  3. 进队

    在列表的尾部进入元素。

  4. 出队

    在列表的头部删除元素,后面的元素向前移动。

  5. 获得对头

    获取列表头部的元素。

  6. 清除队

    将列表的有效长度置为0。

  7. 重写toString方法

    重新拼接字符串,打印输出。

代码:

package p02.动态链表;

import p01.动态数组.Queue;

public class LinkedQueue<E> implements Queue<E> {
	private LinkedList<E> list;
	public LinkedQueue() {
		list=new LinkedList<>();
	}
	@Override
	public int getSize() {	//获取有效长度
		return list.getSize();
	}
	@Override
	public boolean isEmpty() {	//是否为空
		return list.isEmpty();
	}
	@Override
	public void enqueue(E e) {	//进队
		list.addLast(e);
	}
	@Override
	public E dequeue() {	//出队
		return list.removeFirst();
	}
	@Override
	public E getFront() {	//获取对头
		return list.getFirst();
	}
	@Override
	public E getRear() {	//获取队尾
		return list.getLast();
	}
	@Override
	public void clear() {	//清除队
		list.clear();
	}
}

5.循环顺序队列

将顺序表收尾相连,形成循环表。

实现方式:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值