闭关修炼中 *** Java常用算法之 -- 队列结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭关修炼中 *** 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 = 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 = 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常用算法之 -- 队列结构的主要内容,如果未能解决你的问题,请参考以下文章