Java数据结构与算法——栈 数组模拟 思路分析

栈的介绍

  1. 栈的英文为(stack)
  2. 栈是一个先入后出(FILO-First InLast Out)的有序列表。
  3. 栈(stack)是 限制线性表中元素的插入和删除只能在线性表的同一端进 行的一种特殊线性表。允许插入和删除的一端,为变化的一端, 称为栈顶(Top), 另一端为固定的一 端,称为栈底(Bottom)。
  4. 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈项,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除

实现栈的思路分析
1.使用数组来模拟栈
2.定义一个top来表示栈顶,初始化为-1
3.入栈的操作,当有数据加入到栈时,top++; stack[top] = data;
4.出栈的操作,int value = stack[top]; top–, return valuel

下面代码包括栈的定义,push(入栈),pop(出栈)等的代码实现,还有简单的代码测试。

package stack;

import java.util.Scanner;

public class ArrayStackDemo {
    public static void main(String[] args) {
        //模拟测试栈
        ArrayStack arrayStack = new ArrayStack(5);
        String key = "";
        boolean loop = true;//循环标识
        Scanner scanner = new Scanner(System.in);
        while(loop){
            System.out.println("shouw:显示栈的元素");
            System.out.println("push:入栈");
            System.out.println("pop:出栈");
            System.out.println("exit:退出");
            System.out.printf("请输入选择:");
            key = scanner.next();
            switch(key){
                case "show":
                    arrayStack.list();
                    break;
                case "push":
                    System.out.printf("输入一个数:");
                    int value = scanner.nextInt();
                    arrayStack.push(value);
                    break;
                case "pop":
                    try{
                        System.out.printf("出栈的数:%d\n",arrayStack.pop());
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case "exit":
                    scanner.close();
                     loop = false;
                     break;
                default:
                    System.out.println("输入非法,重新输入!");
                    break;
            }
        }
        System.out.println("程序退出!");
    }
}
//定义一个栈
class ArrayStack{
    private int maxSize;//栈的最大容量
    private int[] stack;
    private int top = -1;//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.printf("栈满。\n");
            return;
        }
        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("栈空");
            return;
        }
        for (int i = top;i >= 0;i--){
            System.out.printf("stack[%d]=%d\n",i,stack[i]);
        }
    }
}

你可能感兴趣的:(Java数据结构与算法——栈 数组模拟 思路分析)