思路分析
代码实现
package com. atguigu. stack; import com. sun. org. apache. xml. internal. dtm. ref. sax2dtm. SAX2DTM2; import java. net. ServerSocket;
import java. util. ArrayList;
import java. util. Scanner;
import java. util. Stack;
public class ArrayStackDemo { public static void main ( String[ ] args) { 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. println ( "出栈的数据是" + res) ; } 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 [ this . maxSize] ; } public boolean isFull ( ) { return top== maxSize- 1 ; } public boolean isEmpty ( ) { return top== - 1 ; } public void push ( int value) { if ( isFull ( ) ) { System. out. println ( "栈满" ) ; return ; } top++ ; stack[ top] = value; } 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\n" , i, stack[ i] ) ; } } }