数据结构 栈详解和数组代码实现
1.栈的介绍
1.1栈的特点
1)栈时先进后出的有序列表
2)只能在同一端操作,变化的一端为栈顶,可以插入(入栈)删除(出栈),固定的一端栈底
3)最先放入的元素在栈底,最后放入的在栈顶,删除元素则相反
1.2进栈出栈的图示
1.3栈的应用场景
1)子程序的调用:在跳往子程序前,会先将下个 指令的地址存到堆栈中,直到子程序执行完毕后在将地址取出,以回到原来的程序中
2)处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
3)表达式的转换与求值
4)二叉树的遍历
5)图形的深度优先(depth-first)搜索法
2.数组模拟栈的思路
2.1思路分析
1)使用数组来模拟栈
2)定义一个top来表示栈顶,初始化为-1
3)入栈的操作,当有数据加入到栈时,top++;stack[top]=data;
4.出栈的操作,int value=stack[top];top–;return value
2.2代码实现
package www.git.java;
import java.security.Key;
import java.util.Scanner;
/*
*@author Liu
*@Description
*@data 2021/12/7
*/
public class ArrayStack {
public static void main(String[] args) {
Stack stack = new Stack(4);
String key = "";
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while (flag) {
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&