⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 charstackdemo.java

📁 java程序设计教程的源码
💻 JAVA
字号:
/*【例4-19】  使用接口描述堆栈的基本操作并用类实现其基本操作。堆栈是一种先进后出
 * (First In and Last Out,FILO)的线性表,只允许从同端进行插入和删除,包括
 * 初始化、入(压)栈、出(弹)栈、栈判空、取栈顶元素等基本操作。
 */
//程序清单4-19:  CharStackDemo.java
package e4_19;
import java.io.*;
public class CharStackDemo {// 主类
	public static void main(String args[]) throws java.io.IOException {
		char choice = 0, exit = 'Y', popchar;
		DynStack ds = new DynStack(10);
		do {
			if (exit == 'x' || exit == 'X')
				return;
			System.out.println();
			do {
				if (choice != 13 && choice != 10) {
					System.out.println("For example  CharacterStack");
					System.out.println("     1. 初始化栈");
					System.out.println("     2. 栈判空操作");
					System.out.println("     3. 入栈操作");
					System.out.println("     4. 出栈操作");
					System.out.println("     5. 取栈顶元素");
					System.out.println("     6. 栈置空操作");
					System.out.println("     7. 求当前栈中元素个数");
					System.out.println("     8. 输出栈中全部元素");
					System.out.println("     9. 退出操作");
					System.out.print("  Choose one: ");
				}
				choice = (char) System.in.read();
			} while (choice < '1' || choice > '9');
			switch (choice) {
			case '1': {  ds.inistack(); ds.output();  break; }
			case '2': {
				if (ds.isempty())
					System.out.println("---当前栈为空---");
				else
					System.out.println("   当前栈不为空  ");
				break;
			}
			case '3': {
				ds.push();
				ds.output();  break;
			}
			case '4': {
				popchar = ds.pop();
				if (popchar == 0)
					System.out.println("---当前栈为空!---");
				else
					System.out.println("当前出栈元素: " + popchar);
				ds.output(); break;
			}
			case '5': {
				if (ds.gettop() == 0)
					System.out.println("---当前栈为空!---");
				else
					System.out.println("当前栈顶元素: " + ds.gettop());
				ds.output();  break;
			}
			case '6': { ds.clears(); ds.output(); 	break; 	}
			case '7': {
				System.out.println("当前栈中元素个数:" + ds.current_size());
				ds.output();  break;
			}
			case '8': {	ds.output(); break; }
			case '9': {	return; }
			}
			System.out.print("按x|X键退出操作,按其他键继续:");
			exit = (char) System.in.read();
		} while (exit != 'x' || exit != 'X');
	}
}
// 定义一个字符栈接口ICharStack.
interface ICharStack {
	void inistack(); // 1.初始化栈操作
	boolean isempty(); // 2.栈判空操作
	void push(); // 3.入栈操作
	char pop(); // 4.出栈操作
	char gettop(); // 5.取栈顶元素
	void clears(); // 6.栈置空操作
	int current_size(); // 7.求当前栈中元素个数
	void output(); // 8.输出栈中全部元素
}
// 实现一个动态栈类DynStack.
class DynStack implements ICharStack {
	private char stck[];// 用数组(线性顺序表)作为栈的物理存储结构
	private int tos;// 栈顶指针
	DynStack(int size) {// 构造方法
		stck = new char[size];
		tos = -1;
	}
	public void inistack() { // 1.初始化栈操作
		char c = '0';
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Enter characters, 'q' to quit.");
		do {// 从键盘读入字符
			try {
				c = (char) br.read();
			} catch (IOException e) {
				System.out.println("读入错误:" + e);
			}
			if (c != 13 && c != 10) {
				if (tos == stck.length - 1) {
					char temp[] = new char[stck.length * 2]; // double size
					for (int i = 0; i < stck.length; i++)
						temp[i] = stck[i];
					stck = temp;
					stck[++tos] = c;
				} else
					stck[++tos] = c;
			}
		} while (c != 'q');
		tos--;
	}
	public boolean isempty() {// 2.栈判空操作
		if (tos == -1)
			return true;
		else
			return false;
	}
	public void push() {// 3.入栈操作
		char c = '0';
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("输入进栈字符串, 'q' to quit.");
		do {// 读入字符
			try {
				c = (char) br.read();
			} catch (IOException e) {
				System.out.println("读入错误:" + e);
			}
			if (c != 13 && c != 10) {
				if (tos == stck.length - 1) {
					char temp[] = new char[stck.length * 2]; // 双倍扩展
					for (int i = 0; i < stck.length; i++)
						temp[i] = stck[i];
					stck = temp;
					stck[++tos] = c;
				} else
					stck[++tos] = c;
			}
		} while (c != 'q');
		tos--;
	}
	public char pop() {// 4.出栈操作
		if (tos == -1)
			return 0;
		else
			return stck[tos--];
	}
	public char gettop() {// 5.取栈顶元素
		if (tos == -1)
			return 0;
		else
			return stck[tos];
	}
	public void clears() {// 6.栈置空操作
		tos = -1;
	}
	public int current_size() {// 7.求当前栈中元素个数
		return tos + 1;
	}
	public void output() {// 8.输出栈中全部元素
		System.out.println("当前栈中元素:");
		System.out.println("---------------------------");
		if (tos == -1)
			System.out.println("---当前栈为空---");
		else
			for (int i = tos; i >= 0; i--)
				System.out.print(stck[i] + " ");
		System.out.println("\n---------------------------\n");
	};
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -