Java算法学习(栈操作实例)

完整代码如下:

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];

	}
}

执行结果:


你可能感兴趣的:(java,算法,String,null,Class,input)