数据结构之队列

本文重温数据结构中的队列概念,队列是一种遵循先进先出(FIFO)原则的线性结构。它包括顺序队列和链式队列两种实现方式,并涉及入队和出队的基本操作。通过队列,可以更有效地管理和处理数据流。

数据结构重温之队列篇

在程序设计中,队列结构也是一种常用的数据结构。队列结构和栈结构类似,其在现实生活中都有对应的例子,可以说队列结构是来源于生活的数据结构。

什么是队列结构

队列结构是从数据的运算来分类的,也就是说队列结构具有特殊的运算规则。而从数据的逻辑结构来看,队列结构 其实就是一种线性结构。如果从数据的存储结构来进一步划分,队列包括以下两类。

1.顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据。在程序中,可以定义一个指定大小的结构数组作为队列。

2.链式队列结构:即使用链表形式保存队列中各元素的值。

从数据的运算角度来分析,队列结构是按照“先进先出”(即First In First Out, FIFO)的原则处理结点数据的。

在队列结构中,数据运算非常简单。一般队列结构的基本操作只有两个。

1.入队列:将一个元素添加到队尾(相当于到队列最后排队等候)。

2.出队列:将队头的元素取出,同时删除该元素,使后一个元素成为队头。

下面的代码为基本的队列操作,供大家参考。

package com.january.daily.queue;


class DATA{
	String name;
	int age;
	public DATA(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
}
public class SQType {
	static final int QUEUE_LENGTH = 15;
	DATA[] data = new DATA[QUEUE_LENGTH];
	int head;//队头
	int tail;//队尾
	
	@SuppressWarnings("unused")
	SQType SQTypeInit(){
		SQType q;
		if ((q = new SQType())!=null) {
			q.head = 0;
			q.tail = 0;
			return q;
		}else {
			return null;
		}
	}
	/**
	 * 判断队列是否为空
	 * @param q
	 * @return
	 */
	boolean SQTypeIsEmpty(SQType q){
		if (q.head == q.tail) {
			return true;
		}
		else
		{
			return false;
		}
	}
	/**
	 * 判断队列是否已满
	 * @param q
	 * @return
	 */
	boolean SQTypeIsFull(SQType q){
		if (q.tail == QUEUE_LENGTH) {
			return true;
		}
		else
		{
			return false;
		}
	}
	/**
	 * 清空队列
	 * @param q
	 */
	void SQTypeClean(SQType q){
		q.head = 0;
		q.tail = 0;
	}
	/**
	 * 释放内存
	 * @param q
	 */
	void SQTypeFree(SQType q){
		if (q!=null) {
			q = null;
		}
	}
	/**
	 * 入队列操作
	 * @param q
	 * @param data
	 * @return
	 */
	int InSQType(SQType q,DATA data){
		if (SQTypeIsFull(q)) {
			System.out.println("队列已满!");
			return 0;
		}
		else
		{
			//将元素加入队列
			q.data[q.tail++]=data;
			return 1;
		}
	}
	/**
	 * 出队列
	 * @param q
	 * @return
	 */
	DATA OutSQType(SQType q){
		if (SQTypeIsEmpty(q)) {
			System.out.println("队列为空!");
			return null;
		}
		else
		{
			return q.data[q.head++];
		}
	}
	/**
	 * 从队列中读取数据
	 * @param q
	 * @return
	 */
	DATA PeekSQType(SQType q){
		if (SQTypeIsEmpty(q)) {
			System.out.println("队列为空!");
			return null;
		}
		else
		{
			return q.data[q.head];
		}
	}
	/**
	 * 获取队列的长度
	 * @param q
	 * @return
	 */
	int SQTypeLen(SQType q){
		int temp;
		temp = q.tail - q.head;
		return temp;
	}
	public static void main(String[] args) {
		SQType st = new SQType();
		DATA data1 = new DATA("张三", 20);
		DATA data2 = new DATA("李四", 22);
		DATA data3 = new DATA("王五", 23);
		SQType sqTypeInit = st.SQTypeInit();
		st.InSQType(sqTypeInit, data1);
		st.InSQType(sqTypeInit, data2);
		st.InSQType(sqTypeInit, data3);
		System.out.println("入队列成功!");
		while (true) {
			DATA outSQType = st.OutSQType(sqTypeInit);
			if (outSQType!=null) {
				System.out.println("出队列的数据为:"+outSQType.name+" "+outSQType.age);
			}
			else
			{
				break;
			}
		}
		st.SQTypeClean(sqTypeInit);
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值