数据结构之栈的简单模拟

1、创建栈

         private int maxSize; // 代表栈的最大容量是多少
         private int[] stack; // 使用数组来存放数据
         private int top = -1; // 栈顶指针的初始位置

class ArrayStack{
	private int maxSize; // 栈的大小
	private int[] stack; // 数据
	private int top = -1; // 栈顶指针

    // 构造函数
    public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[maxSize];
	}

}

2、判断栈是为空的标志

         当top栈顶指针位于初始位置也就是-1位置的时候就是空的。

// 栈空
	public boolean isEmpty() {
		return top == -1;
	}

3、判断栈是满的标志

 

        当栈顶指针移动到最大的位置时,即 top = maxSize - 1 时,栈达到最大容量。

// 栈满
	public boolean isFull() {
		return top == maxSize - 1;
	}

4、push入栈

        top栈顶指针先向上移动,即top++,然后传入数据,使得stack[top] = data;

// 入栈push
	public void push(int data) {
		// 先判断栈是否满
		if(isFull()) {
			System.out.println("栈已经满了");
			return;
		}
		stack[++top] = data;
	}

5、pop出栈

        栈顶指针top先向下移动一个位置,然后取出数据stack[top],并返回。

 

 

// 出栈pop
	public int pop() {
		if(isEmpty()) {
			throw new RuntimeException("栈为空");
		}
		int data = stack[top--];
		return data;
	}

 6、栈的遍历

        与出栈不同,遍历栈并不会改变栈的结构。

// 遍历栈
	public void show() {
		if(isEmpty()) {
			System.out.println("栈为空,无数据");
			return;
		}
		for(int i = top; i >= 0; i--) {
			System.out.println("stack["+ i +"]=" + stack[i]);
		}
	}

7、测试

public class ArrayStackDemo {

	public static void main(String[] args) {
		ArrayStack arrayStack = new ArrayStack(4);
		String key = "";
		boolean loop = true; // 控制是否退出菜单
		Scanner scanner = new Scanner(System.in);
		
		while(loop) {
			System.out.println("(show):显示栈");
			System.out.println("(exit):退出程序");
			System.out.println("(push):添加数据到栈");
			System.out.println("(pop):从栈中取数据");
			System.out.println("请输入你的选择:");
			key = scanner.next();
			switch (key) {
			case "show": {
				arrayStack.show();
				break;
			}
			case "push": {
				System.out.println("请输入一个整数:");
				int value = scanner.nextInt();
				arrayStack.push(value);
				break;
			}
			case "pop": {
				try {
					int pop = arrayStack.pop();
					System.out.println("出栈的数据是:" + pop);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;
			}
			case "exit": {
				scanner.close();
				loop = false;
				break;
			}
			default:
				break;
			}
		}
		System.out.println("程序成功退出");
	}
}

8、整体代码

import java.util.Scanner;

public class ArrayStackDemo {

	public static void main(String[] args) {
		ArrayStack arrayStack = new ArrayStack(4);
		String key = "";
		boolean loop = true; // 控制是否退出菜单
		Scanner scanner = new Scanner(System.in);
		
		while(loop) {
			System.out.println("(show):显示栈");
			System.out.println("(exit):退出程序");
			System.out.println("(push):添加数据到栈");
			System.out.println("(pop):从栈中取数据");
			System.out.println("请输入你的选择:");
			key = scanner.next();
			switch (key) {
			case "show": {
				arrayStack.show();
				break;
			}
			case "push": {
				System.out.println("请输入一个整数:");
				int value = scanner.nextInt();
				arrayStack.push(value);
				break;
			}
			case "pop": {
				try {
					int pop = arrayStack.pop();
					System.out.println("出栈的数据是:" + pop);
				} catch (Exception e) {
					System.out.println(e.getMessage());
				}
				break;
			}
			case "exit": {
				scanner.close();
				loop = false;
				break;
			}
			default:
				break;
			}
		}
		System.out.println("程序成功退出");
	}
}

class ArrayStack{
	private int maxSize; // 栈的大小
	private int[] stack; // 数据
	private int top = -1; // 栈顶指针
	
	public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[maxSize];
	}
	
	// 栈满
	public boolean isFull() {
		return top == maxSize - 1;
	}
	
	// 栈空
	public boolean isEmpty() {
		return top == -1;
	}
	
	// 入栈push
	public void push(int data) {
		// 先判断栈是否满
		if(isFull()) {
			System.out.println("栈已经满了");
			return;
		}
		stack[++top] = data;
	}
	
	// 出栈pop
	public int pop() {
		if(isEmpty()) {
			throw new RuntimeException("栈为空");
		}
		int data = stack[top--];
		return data;
	}
	
	// 遍历栈
	public void show() {
		if(isEmpty()) {
			System.out.println("栈为空,无数据");
			return;
		}
		for(int i = top; i >= 0; i--) {
			System.out.println("stack["+ i +"]=" + stack[i]);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值