首页 » Java » 队列结构

队列结构

原文 http://blog.csdn.net/wang332860608/article/details/78702315

2017-12-04 02:00:36阅读(381)

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

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

基础数据
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;
    }
    //
}

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹