完整代码如下:
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];
}
}
执行结果: