java中循环数组实现队列

1 为了使begin和end解耦,不产生关联,更好的实现队列功能,添加一个变量size。增加一个属性size用来记录目前的元素个数。目的是当begin=end的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满。2、数组中只存储数组大小-1个元素,保证rear转一圈之后不会和head相等,也就是队列满的时候,rear+1=head,中间刚好空一个元素。 当rear=head的时候,一定是队列空了。

第一种方式代码实现:
public static class MyQueue {
		private int[] arr;
		private int pushi;// end 进来的数放在那里
		private int polli;// begin 弹出的出从哪里拿
		private int size;//使得begin 和 end解耦 size相当的重要
		private final int limit;

		public MyQueue(int limit) {
			arr = new int[limit];
			pushi = 0;
			polli = 0;
			size = 0;
			this.limit = limit;
		}

		public void push(int value) {
			if (size == limit) {
				throw new RuntimeException("队列满了,不能再加了");
			}
			size++;
			arr[pushi] = value;
			pushi = nextIndex(pushi);
		}

		public int pop() {
			if (size == 0) {
				throw new RuntimeException("队列空了,不能再拿了");
			}
			size--;//如果能拿数的情况下
			int ans = arr[polli];
			polli = nextIndex(polli);
			return ans;
		}

		public boolean isEmpty() {
			return size == 0;
		}

		// 如果现在的下标是i,返回下一个位置
		private int nextIndex(int i) {
			return i < limit - 1 ? i + 1 : 0;
		}

	}

猜你喜欢

转载自blog.csdn.net/qq_37247026/article/details/129547899