首页 > 代码库 > 闭关修炼中 *** Java常用算法之 -- 队列结构

闭关修炼中 *** Java常用算法之 -- 队列结构

   

     什么是队列结构:

        队列结构和栈结构很相类似。

        和栈结构一样是一种具有特殊的运算规则,从数据的逻辑结构看,队列结构其实

        是一种线性结构

        从存储结构来进一步划分,也分为两类:

          顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据。 在

                 程序中,可以定义一个指定大小的结构数组作为队列。

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

     典型的队列结构:

        在队列结构中允许对两端进行操作,但两端的操作不同。一端只能删除--队头,一

        端只能插入--队尾

     队列的运算规则:

        是按照先进后出(First In First Out,FIFO)进行处理结点数据的。

     一般队列的两个基本操作:

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

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

 

看的再多不如动手来操作一番,,哈哈,理解代码重要~

  1 import java.util.Scanner;
  2 
  3 /*******************************************************
  4  *                                                        *
  5  *                         队列结构                           *
  6  *                                                        *
  7  *******************************************************/
  8 
  9 class DATA4{
 10     String name;
 11     int age;
 12 }
 13 
 14 class SQType{
 15     static final int QUEUELEN =15;
 16     DATA4[] data = http://www.mamicode.com/new DATA4[QUEUELEN];            //队列数组
 17     int head;                                    //对头
 18     int tail;                                    //队尾
 19     
 20     @SuppressWarnings("unused")
 21     SQType SQTypeInit(){
 22         SQType q;
 23         if((q = new SQType())!= null){            //申请内存
 24             q.head = 0;                            //设置对头
 25             q.tail = 0;                            //设置对尾
 26             return q;
 27         }
 28         else{
 29             return null;                        //返回空
 30         }
 31     }
 32     //判断空队列
 33     int SQTypeIsEmpty(SQType q){
 34         int temp = 0;
 35         if(q.head == q.tail)
 36             temp = 1;
 37         return (temp);
 38     }
 39     //判断满队列
 40     int SQTypeIsFull(SQType q){
 41         int temp = 0;
 42         if(q.tail == QUEUELEN)
 43             temp =1;
 44         return (temp);
 45     }
 46     //清空队列
 47     void SQTypeClear(SQType q){
 48         q.head = 0;                                //设置对头
 49         q.tail = 0;                                //设置对尾
 50     }
 51     //释放队列
 52     void SQTypeFree(SQType q){
 53         if(q!=null){
 54             q=null;
 55         }
 56     }
 57     //入队列
 58     int InSQType(SQType q,DATA4 data){
 59         if(q.tail == QUEUELEN){
 60             System.out.println("队列已满!操作失败!");
 61             return (0);
 62         }
 63         else{
 64             q.data[q.tail++] = data;            //将元素入对列
 65             return(1);
 66         }
 67     }
 68     //出队列
 69     DATA4 OutSQType(SQType q){
 70         if(q.head == q.tail){
 71             System.out.println("队列以空!操作失败!");
 72             System.exit(0);
 73         }
 74         else{
 75             return q.data[q.head++];
 76         }
 77         return null;
 78     }
 79     //读结点数据
 80     DATA4 PeekSQType(SQType q){
 81         if(SQTypeIsEmpty(q)==1){
 82             System.out.println("空队列");
 83             return null;
 84         }
 85         else{
 86             return q.data[q.head];
 87         }
 88     }
 89     //计算对列长度
 90     int SQTypeLen(SQType q){            
 91         int temp;
 92         temp = q.tail - q.head;
 93         return(temp);
 94     }
 95 }
 96 
 97 
 98 public class P2_4 {
 99 
100     @SuppressWarnings("resource")
101     public static void main(String[] args) {
102         SQType st = new SQType();
103         DATA4 data1;
104         
105         Scanner input = new Scanner(System.in);
106         SQType stack = st.SQTypeInit();            //初始化队列
107         System.out.println("入队列操作:");
108         System.out.println("输入姓名 年龄进行入队列操作:");
109         do{
110             DATA4 data = http://www.mamicode.com/new DATA4();
111             data.name = input.next();
112             data.age = input.nextInt();
113             if(data.name.equals("0")){
114                 break;                            //若输入0,则退出
115             }
116             else{
117                 st.InSQType(stack, data);
118             }
119         }while(true);
120         
121         String temp = "1";
122         System.out.println("出队列操作:按任意非0键进行出栈操作:");
123         temp = input.next();
124         while(!temp.equals("0")){
125             data1 = st.OutSQType(stack);
126             System.out.printf("出队列的数据是(%s,%d)\n",data1.name,data1.age);
127             temp = input.next();
128         }
129         System.out.println("测试结束!");
130         st.SQTypeFree(stack);                    //释放队列所占用的空间
131     }
132 
133 }

 

          

闭关修炼中 *** Java常用算法之 -- 队列结构