用数组结构实现大小固定的栈和队列

Posted vsxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用数组结构实现大小固定的栈和队列相关的知识,希望对你有一定的参考价值。

给定长度为size的数组,将其长度设置为大小为size的栈(队列),添加的数字如果超过了既定的长度就报错!

先实现栈(先进后出);

后实现队列(先进先出);

 

代码如下:

  1 //例子:长度为6的数组,设置大小为6的栈,超过长度就会报错
  2 //用数组结构实现大小固定的队列和栈
  3 public class Bokeyuan {
  4     //使用数组实现栈
  5     public static class ArrayStack{
  6         private Integer[] arr;//数组
  7         private Integer size;//
  8         
  9         public ArrayStack(int initSize) {//固定数组实现栈;initSize确定数组多大
 10             if(initSize <0) {
 11                 throw new IllegalArgumentException("The init size is less than 0");
 12             }
 13             arr=new Integer[initSize];
 14             size=0;
 15         }
 16     public Integer peek() {//返回栈顶保留原值
 17         if(size==0) {
 18             return null;
 19         }
 20         return arr[size-1];
 21     }
 22     public void push (int obj) {//新进入一个数
 23         if(size==arr.length) {//当数组长度等于栈大小时不能再添加数值
 24             throw new ArrayIndexOutOfBoundsException("The queue is full");
 25         }
 26         arr[size++]=obj;//否则添加数值,size++
 27     }
 28     public Integer pop() {//当size=0,空了 报错
 29         if(size==0) {//进行数字的添加和弹出操作
 30             throw new ArrayIndexOutOfBoundsException("The queue is empty");
 31         }
 32         return arr[--size];//当size=0,将size-1位置给用户,然后size--;
 33     }
 34     }
 35     
 36     //使用数组实现队列
 37     public static class ArrayQueue{
 38         private Integer [] arr;
 39         private Integer size;//约束start、end
 40         private Integer start;//表示取一个数取哪里的
 41         private Integer end;//新添加的数加到哪里
 42         /* 1.当size<n,把数放到end上
 43          * 2.当size!=0,start指的数字给用户*/
 44         
 45     public ArrayQueue(int initSize) {//确定数组大小
 46         if(initSize<0) {
 47             throw new IllegalArgumentException("The initSize is less than 0");
 48         }
 49         arr=new Integer[initSize];
 50         size=0;
 51         start=0;
 52         end=0;
 53         }
 54     public Integer peek() {
 55         if(size==0) {
 56             return null;
 57         }
 58         return arr[start];
 59     }
 60     public void push(int obj) {//当size=数组长度时,报错不能继续添加数值
 61         if(size==arr.length) {
 62             throw new ArrayIndexOutOfBoundsException("The queue is full");
 63         }
 64         size++;//否则添加到end所指位置
 65         arr[end]=obj;
 66         end=end==arr.length-1? 0:end+1;//到底部的时候end跳回0,当没有到底的时候,就last+1
 67     }
 68     public Integer poll() {//弹出返回值
 69         if(size==0) {//当size=0,报错空了
 70             throw new ArrayIndexOutOfBoundsException("The queue is empty");
 71         }
 72         size--;
 73         int tmp=start;//记录start的位置
 74         start=start==arr.length-1? 0:start+1;//调整start位置,到底就返回开头,否则+1
 75         return arr[tmp];//返回
 76     }
 77     }
 78     public static void main(String[] args) {
 79         //测试栈  正好装满
 80          ArrayStack stack = new ArrayStack(3);
 81          stack.push(1);
 82          stack.push(2);
 83          stack.push(3);
 84             
 85          System.out.println(stack.pop());
 86          System.out.println(stack.pop());
 87          System.out.println(stack.pop());
 88          System.out.println();
 89          //测试队列  添加的数字超过长度满了
 90          ArrayQueue queue =new ArrayQueue(2);
 91          queue.push(3);
 92          queue.push(2);
 93          queue.push(2);
 94          
 95          System.out.println(queue.poll());
 96          System.out.println(queue.poll());
 97          System.out.println(queue.poll());
 98          
 99     }
100     }

 

以上是关于用数组结构实现大小固定的栈和队列的主要内容,如果未能解决你的问题,请参考以下文章

数据结构的栈和队列(这不进来看一看)

python的栈和队列的实现代码

python的栈和队列的实现代码

栈和队列

栈和队列

数据结构----栈和队列