栈的定义以及性质:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。
队列的定义以及特点:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。
用数组实现栈:
import java.util.Arrays;import java.util.Scanner;/**
* 使用数组实现栈 *
* * @author dreamer *
*/publicclassArrayStackDemo{publicstaticvoidmain(String[] args){// 测试
ArrayStack a =newArrayStack(5);boolean flag =true;// 用于判断循环结束的标志
Scanner sc =newScanner(System.in);
String key ="";// 用于接受菜单的选项 while(flag){
System.out.println("show:显示栈");
System.out.println("exit:退出程序");
System.out.println("push:进栈");
System.out.println("pop:出栈");
key = sc.nextLine();switch(key){case"show":
a.show();break;case"exit":
flag =false;
System.out.println("程序结束!");break;case"push":
System.out.println("请输入要进栈的数据:");int val = sc.nextInt(); a.push(val);break;case"pop":try{int pop = a.pop();
System.out.println("出栈的值是:"+ pop);}catch(Exception e){// TODO: handle exception
System.out.println(e.getMessage());}break;default: b
reak;}}}}classArrayStack{privateint MaxSize;// 定义数组的最大长度 privateint[] arr;// 定义数组,数据就放在该数组 privateint top =-1;// 定义栈顶,初始化数据为-1 publicArrayStack(int maxSize){this.MaxSize = maxSize;
arr =newint[MaxSize];}// 判断数组是否为空 publicbooleanisEmpty(){return top ==-1;}// 判断数组是否满了 publicbooleanisFull(){
System.out.println("栈顶:"+ top +"最大长度:"+ MaxSize);return top == MaxSize -1;}// 进栈 publicvoidpush(int val){// 先判断栈是否满了,满了就不能添加进去 if(isFull()){ System.out.println("栈已经满了~~");return;}
top++;
arr[top]= val;}// 出栈 publicintpop(){// 先判断栈是否为空 if(isEmpty()){thrownewRuntimeException("栈为空,无法出栈!");}int val = arr[top];
top--;return val;}publicvoidshow(){if(isEmpty()){
System.out.println("没有数据");return;}for(int i = top; i >=0; i--){
System.out.print(arr[i]+"\t");}
System.out.println();}}