55 其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作。
66 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列的插入操作通常称作入队列,队列的删除操作通常称作出队列。
77
8- 循环队列可以有效的利用资源。如果使用普通数组实现队列时,如果不进行移动,随着数据的不断读写弹出插入,会出现假满队列的情况。例如不断向队列中添加元素,然后在弹出元素。这是弹出元素所空闲出来的空间并没有得到重复利用,这是就会出现数组尾部已经满了,但是头部还有空闲空间没有得到利用。
8+ 循环队列可以有效的利用资源。如果使用普通数组实现队列时,如果不进行移动,随着数据的不断读写弹出插入,会出现假满队列的情况。例如不断向队列中添加元素,然后在弹出元素。这是弹出元素所空闲出来的空间并没有得到重复利用,
9+ 这是就会出现数组尾部已经满了,但是头部还有空闲空间没有得到利用。
910 入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针
1011
1112 * Created by liuxun on 2017年6月22日.
@@ -33,21 +34,20 @@ public int size(){
3334 * 循环队列入队操作
3435 * @param element
3536 */
36- public void add (E element ){
37- if (isFull ()){
38- throw new RuntimeException ("队列已满,size:" +size ());
39- }
37+ public boolean add (E element ){
38+ if ((rear +1 )%maxsize ==front ) return false ;//队列已满
4039 data [rear ]=element ;
4140 //逻辑上实现首尾相连,循环队列
4241 rear =(rear +1 )%maxsize ;
42+ return true ;
4343 }
4444 /**
4545 * 循环队列出队操作,并清空头部
4646 * @return
4747 */
4848 public Object poll (){
4949 if (rear ==front && data [front ]==null ){
50- throw new RuntimeException ( "空的队列" ) ;
50+ return null ;
5151 }
5252 Object result =data [front ];
5353 data [front ]=null ;
@@ -67,4 +67,13 @@ private boolean isFull(){
6767 return front == rear && data [front ]!=null ;
6868 }
6969
70+ public static void main (String [] args ) {
71+ SqQueue queue =new SqQueue (8 );
72+ for (int i =0 ;i <8 ;i ++){
73+ queue .add (i );
74+ }
75+ System .out .println (queue .poll ());
76+ System .out .println (queue .size ());
77+ }
78+ 7079}
0 commit comments