简单数组转栈和队列

数组转栈

对于数组转栈,首先要定义一个标记指针指针index指向栈的栈底,也就是数组的首部。根据栈的原理,压栈一次index+1.当压栈的数量等于数组长度,报错溢出。

代码如下:

package com.栈队组;


public class Array_To_Stack{
	/*
	 * 数组转为栈。
	 * 定义一个数组,定义一个指针index。
	 * 建立一个方法setSize(),用来定义栈的长度,且index=0;
	 * 定义压栈方法push(int num),判断index的大小防止溢出,num进栈,index++
	 * 定义出栈方法pop(),判断index大小防止溢出,index指向的数出栈,index--;
	 */
	private static Integer arr [] ;
	private static Integer index ;
	public  static void setSize(int initSize){
		if(initSize<0){
			throw new IllegalArgumentException("栈不能小于0!") ;
		}
		arr = new Integer[initSize] ;
		index = 0 ;
	}
	public static void push(int num){
		if(index==arr.length){
			throw new ArrayIndexOutOfBoundsException("栈已满!") ;
		}
		arr[index++] = num ;
	}
	public static Integer pop(){
		if(index<0){
			throw new ArrayIndexOutOfBoundsException("栈没有数据!") ;
		}
		return arr[--index] ;
	}
	public static void main(String[] args) {
		setSize(5);
		push(1);
		push(2);
		push(3);
		push(4);
		push(5);
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
	}
	
}

 

数组转队列

对于数组转队列不能简单的直接进队列和出队列。需要把队列的首部和尾部做好标记,当需要进(出)队列的时候可以直接操作。定义start和end指向队列的首部(数组的首部)。定义一个size,用来统计队列里元素的个数。当元素个数等于数组长度,报错溢出。

代码如下:

package com.栈队组;

public class Array_To_Queue {
	private static Integer arr[] ;
	private static Integer end ;
	private static Integer start ;
	private static Integer size  ;
	public static void setSize(int initSize){
		if(initSize<0){
			throw new IllegalArgumentException("队列的大小不能小于 0") ;
		}
		arr = new Integer[initSize] ;
		size = 0;
		start = 0 ;
		end = 0;

	}
	public static void push(int num){
		if(size == arr.length){
			throw new ArrayIndexOutOfBoundsException("队列已满!") ;
		}
		size ++ ;
		start = start == arr.length - 1 ? 0 : start +1 ;
		arr[start] = num ;
	}
	public static Integer pop(){
		if(size<0){
			throw new ArrayIndexOutOfBoundsException("队列已空!");
		}
		size -- ;
		int temp = end ;
		end = end ==  arr.length - 1 ? 0 : end +1 ;
		return arr[end] ;
	}
	public static void main(String[] args) {
		setSize(5);
		push(1);
		push(2);
		push(3);
		push(4);
		push(5);
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
	}
	
}

 

全部评论

相关推荐

和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务