队列结构

队列结构

  • 顺序队列结构 即使用一组地址连续的内存单元依次保存队列中的数据。在程序中,可以定义一个指定大小的结构数组作为队列。
  • 链式队列结构 即使用链表形式保存队列中各元素的值。

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

基础数据
public class DATA4 {

    private String name;
    private int age;

//


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
队列操作
public class SQType {


    static final int QUEUELEN = 15;
    DATA4[] data = new DATA4[QUEUELEN]; // 队列数组
    int head;                           //对头
    int tail;                           //对尾

    // 初始化队列结构
    /**
     * 1 按符号常量QUEUELEN 指定的大小申请一片内存空间,用来保存队列中的数据。
     * 2 设置head=0和tail=0,表示一个空栈。
     */
    SQType SQTypeInit(){
        SQType q;
        if((q = new SQType())!=null){
            q.head = 0;
            q.tail = 0;
            return q;

        }else {
            return null;
        }
    }



    // 判断空队列
    /**
     * 判断空队列即判断一个队列是否为空。如果是空队列,则表示该队列结构中没有数据。
     * 此时可以进行入队列操作。但不可以进行出队列操作。
     */
    int SQTypeIsEmpty(SQType q){
        int temp = 0;
        if(q.head == q.tail){
            temp = 1;
        }
        return (temp);
    }


    // 判断满队列
    /**
     * 判断满队列即判断一个队列结构是否为满。如果是满队列,则表示该队列结构中没有多余的空间来保存数据。
     * 此时不可以进行入队操作,但是可以进行出队列操作。
     */
    int SQTypeIsFull(SQType q){
        int temp = 0;
        if(q.tail == QUEUELEN){
            temp = 1;
        }
        return temp;
    }

    // 清空队列
    /**
     * 清空队列中的所有数据。
     */
    void SQTypeClear(SQType q){
        q.head = 0; // 设置对头
        q.tail = 0;// 设置队尾
    }

    // 释放空间
    /**
     * 释放队列结构所占据的内存单元。
     */
    void SQTypeFree(SQType q){
        if(q!=null){
            q=null;
        }
    }

    // 入队列
    /**
     * 1 首先判断队列顶tail ,如果tail等于QUEUELEN ,则表示溢出,进行出错处理;负责执行以下操作。
     * 2 设置tail = tail+1
     * 3 将入队元素保存到tail指向的位置。
     */
    int InSQType(SQType q,DATA4 data){
        if(q.tail == QUEUELEN){
            System.out.printf("队列已满!操作失败");
            return 0;
        }else {
            q.data[q.tail++] = data;
            return 1;
        }
    }

    // 出队列操作
    /**
     * 1 判断队列head,如果head等于tail,则表示为空队列,进行出错处理;否则执行下面操作。
     * 2 从队列首部取出对头元素。
     * 3 设修改队头head的序号。使其指向后一个元素。
     */
    DATA4 OutSQType(SQType q){
        if(q.head == q.tail){
            System.out.printf("队列已空!操作失败");
        }else {
            return q.data[q.head++];
        }
        return null;
    }


    // 读结点操作
    /**
     * 读取头结点数据 不删除
     */
    DATA4 PeekSQType(SQType q){
        if(this.SQTypeIsEmpty(q)==1){
            System.out.printf("空队列!");
            return null;
        }else {
            return q.data[q.head];
        }
    }

    // 计算队列长度
    /**
     * 统计队列中结点的个数。队尾序号减去对头序号
     */
    int SQTypeLen(SQType q){
        int temp;
        temp = q.tail - q.head;
        return temp;
    }


    //



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值