完整代码如下:
package com.xu.main; import java.util.Scanner; public class P4_1 { /** * @功能:栈结构操作 * @作者: * @日期:2012-10-16 */ public static void main(String[] args) { StackType st = new StackType(); DATA data = new DATA(); StackType stack = st.STInit(); Scanner input = new Scanner(System.in); System.out.println("入栈操作:"); System.out.println("输入姓名 年龄进行入栈操作:"); do { DATA d = new DATA(); d.name = input.next(); if (d.name.equals("0")) { break; // 若输入0,则退出 } else { d.age = input.nextInt(); st.PushST(stack, d); } } while (true); String temp = "1"; System.out.println("出栈操作:按任意非0键进行出栈操作:"); temp = input.next(); while (!temp.equals("0")) { data = st.PopST(stack); System.out.printf("出栈的数据是:(%s,%d)\n", data.name, data.age); temp = input.next(); } System.out.println("测试结束!"); st.STFree(st); } } class DATA { String name; int age; } class StackType { static final int MAXLEN = 50; DATA[] data = new DATA[MAXLEN + 1]; // 数据元素 int top; // 栈顶 @SuppressWarnings("unused") StackType STInit() // 初始化栈 { StackType p; if ((p = new StackType()) != null) { p.top = 0; return p; } return null; } boolean STIsEmpty(StackType s) // 判断是否为空栈 { boolean t; t = (s.top == 0); return t; } boolean STIsFull(StackType s) // 判断是否栈已满 { boolean t; t = (s.top == MAXLEN); return t; } void STClear(StackType s) // 清空栈 { s.top = 0; } void STFree(StackType s) // 释放栈所占空间 { if (s != null) { s = null; } } int PushST(StackType s, DATA data) // 入栈操作 { if ((s.top + 1) > MAXLEN) { System.out.println("栈溢出!"); return 0; } s.data[++s.top] = data; return 1; } DATA PopST(StackType s) // 出栈操作 { if (s.top == 0) { System.out.println("栈为空!"); System.exit(0); } return (s.data[s.top--]); } DATA PeekST(StackType s) // 读栈顶数据 { if (s.top == 0) { System.out.println("栈为空!"); System.exit(0); } return s.data[s.top]; } }
执行结果: