什么是栈结构:
代码实现:
/** * @PackageName: * @author: * @date:2022/7/29 */ public class StackTable { public static void main(String[] args){ StackType st = new StackType(); DATA3 data1 = new DATA3(); //初始化栈 StackType stack = st.STInit(); Scanner input = new Scanner(System.in); System.out.println("入栈操作,输入姓名,年龄"); do { DATA3 data = new DATA3(); data.name = input.next(); if (data.name.equals("0")){ break; }else { data.age = input.nextInt(); stack.pushST(stack,data); } }while (true); String temp = "1"; System.out.println("出战操作,按任意非0键出栈操作"); temp = input.next(); while (!temp.equals("0")){ data1 = stack.popST(stack); System.out.println("出栈信息:"+data1.name+data1.age); temp = input.next(); } // data1 = st.peekST(st); //System.out.println("读取栈顶信息:"+data1.name+data1.age); System.out.println("测试结束"); st.STFree(st); } } /** * 数据元素 */ class DATA3{ String name; int age; } class StackType{ static final int MAXLEN=50; //数据元素 DATA3[] data = new DATA3[MAXLEN+1]; //栈顶 int top; /** * 初始化 * @return */ StackType STInit(){ StackType p; //申请栈内存 if ((p = new StackType()) != null){ //设置栈顶为0 p.top=0; //返回栈的引用 return p; } return null; } /** * 判断栈是否为空 * @param s * @return */ boolean STIsEmpty(StackType s){ boolean t; t = (s.top==0); return t; } /** * 判断栈是否已经满 * @param s * @return */ boolean STIsFull(StackType s){ boolean t; t = (s.top==MAXLEN); return t; } /** * 清空栈 * @param s */ void STClear(StackType s){ s.top=0; } /** * 释放栈所占用的空间 * @param s */ void STFree(StackType s){ if (s != null){ s = null; } } /** * 入栈 * @param s * @param data * @return */ int pushST(StackType s,DATA3 data){ if ((s.top+1) > MAXLEN){ System.out.println("栈溢出"); return 0; } //将元素入栈 s.data[++s.top] = data; return 1; } /** * 出栈 * @param s * @return */ DATA3 popST(StackType s){ if (s.top==0){ System.out.println("栈为空"); System.exit(0); } return (s.data[top--]); } /** * 读取栈顶数据 * @param s * @return */ DATA3 peekST(StackType s){ if (s.top==0){ System.out.println("栈为空"); System.exit(0); } return (s.data[s.top]); } }
通过学习理论加实战将加强对栈的理解。