队列结构

来源:互联网 发布:2017网络机顶盒哪个好 编辑:程序博客网 时间:2024/06/06 01:47

队列结构

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

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

基础数据

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;    }    //}