队列介绍

1.1队列的定义

队列是一种特殊的线性表,他只允许在表的前端进行删除操作,在表的后端进行插入操作。

1.2队列的特征

(1)通常称插入的这一端为队尾,另一删除端为队头。

(2)当表中没有元素称为空队。

(3)队列是先进先出的线性表。

1.3顺序队列操作

       顺序表模拟队列的缺点:数组的优点在于对于元素的随机访问效率最大,但是当需要在数组头部进行删除操作时,需要移动数组之后的元素,时间复杂度较大。

1.4链式队列操作

     队列的链式存储结构称为链式队列,他是限制在表头进行删除操作、表尾进行插入操作的单链表。链队的操作实际上是单链表的操作,只不过出队在表头进行,入队在表尾进行。

1.5循环队列

1.5.1循环队列实现思路

    考虑到顺序队列由于多次入队或多次出队造成存储空间不满却不能进行继续入队操作的“假溢出”现象。为了解决顺序队列因数组下标越界而引起的"溢出问题"。可是序列的首尾相连。区别于顺序队列,队列空出一个存储单元,队列最多存储maxsize-1个数据元素。队满判定条件为front=(rear+1)%maxsize。

1.6队列真题演练

1.6.1两个栈模拟队列

实现思路:

栈:先进后出;

队列:先进先出。

import java.util.Stack;

public class twoStackToQueue{

    public static<T> void twoStackToQueue(T[] arr){

        Stack<T> stack1 = new Stack<>();
        Stack<T> stack2 = new Stack<>();

        for(int i=0;i<arr.length;i++){

            stack1.push(arr[i]);

        }

        while(!stack1.isEmpty()){

            stack2.push(stack1.peek());
            stack1.pop();

        }

        while(!stack2.isEmpty()){

            System.out.println(stack2.peek()+" ");

            stack2.pop();

        }

    }

    public static void main(String[] args){

        Integer[] arr= new Integer[]{1,2,3};

        twoStackToQueue(arr);

    }
}
    

1.6.2两个队列模拟栈

public class twoQueueToStack<T>{

public static<T> void twoQueueToStack<T>{

   MyQueue<T> queue1=new MyQueue<>();
   MyQueue<T> queue2=new MyQueue<>();

   for(int i=0;i<arr.length-1;i++){

    queue1.push(arr[i]);
}

   int srcLength=arr.length;

    while(srcLength>0){
     
    while(queue.size()>1){

     queue2.push(queue1.peek());

     queue1.pop();

 }

  System.out.println(queue1.peek()+" ");
  srcLength--;
  queue1.pop();
   
  if(srcLength!=0){

    while(queue2.size()>1){

     queue1.push(queue2.peek());

     queue2.pop();

}

  System.out.print(queue2.peek()+" ");

  queue2.pop();

  srcLengyh--;
}

}
public static void main(String[] args){

   Integer[] arr=new Integer[]{1,2,3};

   twoQueueTostack(arr);

}
}
     
public class MyQueue<T>{

    private int element;

    private int size;

    private static final iny INITSIZE=10;

    public MyQueue(){

      element=(T[])new Object[INITSZIE];

  }
 
  public void push(T[] value){

      if(size==element.length){

       element=Arrays.copyOf(element,element.length*2);
  }

   element[size++]=value;

 }

 public int size(){

   return size;
}  

public void peek(){

 if(size==0){

  throw new EmptyStackExceptio();

}

return element[0];

}

public void pop(){

  if(size==0){
  
    return ;

}

for(int i=0;i<size;i++){

element[i-1]=element[i];

}

element[size-1]=null;
size--;
}
}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值