手把手教你用java语言实现数据结构(四)-----------栈,队列

230 阅读4分钟

今天我们来聊聊用Java语言编程实现栈和队列操作

1、栈(stack)

1.定义数组模拟存储栈

//栈的底层我们使用数组来存储
	int[] elements;
	//通过构造方法对数组进行初始化操作
	public MyStack() {
		elements = new int[0];
	}

2.压栈

//压入元素(压栈操作)
	public void push(int element) {
		//创建新数组
		int[] newArr = new int[elements.length+1];
		//把旧数组中的元素赋值给新数组
		for(int i = 0;i<elements.length;i++) {
			newArr[i] = elements[i];
		}
		//将目标元素添加到新数组最后位置处
		newArr[elements.length] = element;
		//将新数组的引用赋值给旧数组
		elements = newArr;
	}

3.弹栈

//取出栈顶元素
	public int pop() {
		//判断栈中是否有元素
		if(elements.length == 0) {
			throw new RuntimeException("栈中没有元素!");
		}
		//取出数组中的第一个元素
		int element = elements[elements.length-1];
		//创建新数组存放除过栈顶元素的其他元素
		int[] newArr = new int[elements.length-1];
		//将其他元素赋值给新数组
		for(int i = 0;i<elements.length-1;i++) {
			newArr[i] = elements[i];
		}
		//替换数组
		elements = newArr;
		//返回栈顶元素
		return element;
	}

4.查看栈顶元素

        //查看栈顶元素
	public int peek() {
		//判断栈中是否由元素
		if(elements.length == 0) {
			throw new RuntimeException("栈中没有元素!");
		}
		return elements[elements.length-1];
	}

5.判断栈是否为空

        //判断栈是否为空
	public boolean isEmpty() {
		return elements.length == 0;
	}

完整代码

package com.yueqian.shujujiegou;

import javax.management.RuntimeErrorException;

/**
 * 数据结构-------实现栈操作
 * @author LinChi
 *
 */
public class MyStack {
	//栈的底层我们使用数组来存储
	int[] elements;
	//通过构造方法对数组进行初始化操作
	public MyStack() {
		elements = new int[0];
	}
	//压入元素(压栈操作)
	public void push(int element) {
		//创建新数组
		int[] newArr = new int[elements.length+1];
		//把旧数组中的元素赋值给新数组
		for(int i = 0;i<elements.length;i++) {
			newArr[i] = elements[i];
		}
		//将目标元素添加到新数组最后位置处
		newArr[elements.length] = element;
		//将新数组的引用赋值给旧数组
		elements = newArr;
	}
	//取出栈顶元素
	public int pop() {
		//判断栈中是否有元素
		if(elements.length == 0) {
			throw new RuntimeException("栈中没有元素!");
		}
		//取出数组中的第一个元素
		int element = elements[elements.length-1];
		//创建新数组存放除过栈顶元素的其他元素
		int[] newArr = new int[elements.length-1];
		//将其他元素赋值给新数组
		for(int i = 0;i<elements.length-1;i++) {
			newArr[i] = elements[i];
		}
		//替换数组
		elements = newArr;
		//返回栈顶元素
		return element;
	}
	//查看栈顶元素
	public int peek() {
		//判断栈中是否由元素
		if(elements.length == 0) {
			throw new RuntimeException("栈中没有元素!");
		}
		return elements[elements.length-1];
	}
	//判断栈是否为空
	public boolean isEmpty() {
		return elements.length == 0;
	}
}

2、队列

模拟排队

1.定义数组模拟存储栈

//队列的底层我们使用数组来存储
		int[] elements;
		//通过构造方法对数组进行初始化操作
		public MyQueue() {
			elements = new int[0];
		}

2.入队操作

//添加元素(入队操作)
		public void add(int element) {
			//创建新数组
			int[] newArr = new int[elements.length+1];
			//把旧数组中的元素赋值给新数组
			for(int i = 0;i<elements.length;i++) {
				newArr[i] = elements[i];
			}
			//将目标元素添加到新数组最后位置处
			newArr[elements.length] = element;
			//将新数组的引用赋值给旧数组
			elements = newArr;
		}

3.出队操作

            //出队操作
		public int pool() {
			//判断队首是否有元素
			if(elements.length == 0) {
				throw new RuntimeException("队列中没有元素!");
			}
			//出队的队首元素
			int element = elements[0];
			//创建新数组
			int[] newArr = new int[elements.length-1];
			//将其他元素赋值给新数组中
			for(int i = 0;i<newArr.length;i++) {
				newArr[i] = elements[i+1];
			}
			//数组替换
			elements = newArr;
			return element;
		}

4.判断队列是否为空

    //判断队列是否为空
		public boolean isEmpty() {
			return elements.length == 0;
		}

完整代码

package com.yueqian.shujujiegou;
/**
 * 数据结构--------实现队列操作
 * @author LinChi
 *
 */
public class MyQueue {
	//队列的底层我们使用数组来存储
		int[] elements;
		//通过构造方法对数组进行初始化操作
		public MyQueue() {
			elements = new int[0];
		}
		//添加元素(入队操作)
		public void add(int element) {
			//创建新数组
			int[] newArr = new int[elements.length+1];
			//把旧数组中的元素赋值给新数组
			for(int i = 0;i<elements.length;i++) {
				newArr[i] = elements[i];
			}
			//将目标元素添加到新数组最后位置处
			newArr[elements.length] = element;
			//将新数组的引用赋值给旧数组
			elements = newArr;
		}
		//出队操作
		public int pool() {
			//判断队首是否有元素
			if(elements.length == 0) {
				throw new RuntimeException("队列中没有元素!");
			}
			//出队的队首元素
			int element = elements[0];
			//创建新数组
			int[] newArr = new int[elements.length-1];
			//将其他元素赋值给新数组中
			for(int i = 0;i<newArr.length;i++) {
				newArr[i] = elements[i+1];
			}
			//数组替换
			elements = newArr;
			return element;
		}
		//判断队列是否为空
		public boolean isEmpty() {
			return elements.length == 0;
		}
}

推荐自己的github地址:github.com/Lmobject

小可爱们,java实现栈,队列操作到此就介绍完了,对算法和二叉树感兴趣的可以加关注哦!!!,后期持续更新中。。。。