• java实现顺序栈


    什么是栈

    1.栈的英文是stack
    2.栈是一个先入后出的有序列表
    3.栈是限制线性表元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表,允许插入和删除的一端是,为变化的一端,成为栈顶,另外的一端为固定的一端为栈底
    4.栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除的情况刚好相反,最后放入的元素先删除,最先放入的元素后删除

    栈的应用场景

    1.子程序的调用,在跳向子程序之前会先将下一条指令的地址存放在堆栈中,直到子程序执行后再将地址取出,最后回到原来的程序之中
    2.递归的调用,和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量、等数据压入栈中
    3.表达式的转换与求值
    4.二叉树的遍历
    5.图形的深度优先搜索

    代码

    package stack;
    
    public class ArrayStack {
    	private int maxSize;//最大值
    	private int[] stack;//栈
    	private int top=-1;//栈顶
    	
    	//构造器
    	public ArrayStack(int maxSize) {
    		this.maxSize=maxSize;
    		stack=new int[this.maxSize];
    	}
    	
    	//栈满
    	public boolean isFull() {
    		return top==maxSize-1;
    	}
    	
    	//栈空	
    	public boolean isEmpty() {
    		return top==-1;
    	}
    	
    	//入栈-push
    	public void push(int value) {
    		//先判断是否栈满了
    		if(isFull()) {
    			System.out.println("栈已经满了~");
    			return;
    		}else {
    			top++;
    			stack[top]=value;
    		}
    	}
    	
    	//出栈-pop
    	public int pop() {
    		if(isEmpty()) {
    			throw new RuntimeException("栈已经空了~");
    		}
    		int value=stack[top];
    		top--;
    		return value;
    	}
    	
    	//遍历栈
    	
    	public void list() {
    		if(isEmpty()) {
    			System.out.println("栈空,没有数据~");
    		}
    		for(int i=top;i>=0;i--) {
    			System.out.printf("stack[%d]=%d
    ",i,stack[i]);
    		}
    	}
    	
    	
    }
    
    

    测试类

    package stack;
    
    import java.util.Scanner;
    
    public class TestArrayList {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		ArrayStack stack=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":
    				stack.list();
    				break;
    			case "push":
    				System.out.println("请输入一个数:");
    				int value=scanner.nextInt();
    				stack.push(value);
    				break;
    			case "pop":
    				try {
    					int res=stack.pop();
    					System.out.printf("出栈的元素为:%d
    ",res);
    				} catch (Exception e) {
    					// TODO: handle exception
    					System.out.println(e.getMessage());
    				}
    				break;
    			case "exit":
    				scanner.close();
    				loop=false;
    				break;
    
    			default:
    				break;
    			}
    		}
    		System.out.println("程序退出!");
    	}
    
    }
    
    
  • 相关阅读:
    phpquery中文手册
    Fiddler工具使用介绍一
    Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
    PHP Ajax 跨域问题最佳解决方案
    charles和Fiddler感觉哪个更好用
    趣味小应用:用HTML5消磨时光 狼人:
    开发人员必知的20+HTML5技巧 狼人:
    云计算时代:LAMP何去何从? 狼人:
    Adobe改善Flash隐私功能 狼人:
    LAMP网站架构方案分析 狼人:
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11620995.html
Copyright © 2020-2023  润新知