用固定大小的数组模拟栈和队列

本文详细介绍了一种使用数组模拟栈和队列数据结构的方法。通过定义特定的类,利用索引变量跟踪栈顶和队头,实现了栈的入栈与出栈操作,以及队列的入队与出队操作。代码示例清晰展示了如何控制数据的进出,为理解这两种基本数据结构提供了实践指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟栈的入栈和出栈

通过一个变量index来指向栈顶元素的位置。

public class Mstack {

	private int size;
	private int[] arr;
	private int index;//指向栈顶的元素的位置
	public Mstack(int initSize) {
		if(initSize<0)
			throw new IllegalArgumentException("数组初始长度有误!");
		arr=new int[initSize];
		index=0;
		size=initSize;
	}
	public  void push(int num) {
		if(index<size) {
			arr[index]=num;
			index++;
		}
		else
			System.out.println("push failed.");
	}
	public  void pop() {
		if(index>0) {
			index--;
			System.out.println("pop success:"+arr[index]);
		}else
			System.out.println("pop failed.");
	}
	public static void main(String[] args) {
			Mstack mstack=new Mstack(3);
			mstack.push(2);
			mstack.push(3);
			mstack.push(1);
			mstack.pop();
	}

}

模拟队列的出队和入队

通过三个变量,就可以不用移位来出队和入队。
变量start指向对头
变量end指向队尾
变量size数组包含有元素的实际长度

package SortArr;

public class Mqueue {

	private int[] arr;
	private int start;
	private int end;
	private int size;
	public Mqueue(int initSize) {
		if(initSize<0)
			throw new IllegalArgumentException("数组长度有误!");
		arr=new int[initSize];
		start=0;
		end=0;
		size=0;//初始时start和end都指向0位置的元素,通过size来判断数组有无元素
	}
	public Integer peek() {
		if(size>0)
			return arr[start];
		else
			return null;
	}
	public void push(int num) {
		if(size==arr.length)
			System.out.println("队列已满!");
		else
		{
				arr[end++]=num;
				end%=arr.length;//当end指向数组的最后一个的下一个时,应转向指回0位置的元素
				size++;//元素个数++
		}
	}
	public Integer poll() {
		if(size>0) {
			size--;
			System.out.println(arr[start]);
			int t=start++;
			start%=arr.length;//start同end一样,也要转向往回指0位置的元素
			return arr[t];
		}
		else
			return null;
	}
	public static void main(String[] args) {
		Mqueue mqueue=new Mqueue(3);
		mqueue.push(3);
		mqueue.push(1);
		mqueue.push(2);
		mqueue.poll();
		mqueue.push(6);
		mqueue.poll();
		mqueue.poll();
		mqueue.poll();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值