stackqueue.java

来自「java的书上例子」· Java 代码 · 共 111 行

JAVA
111
字号
/** 一个应用程序,用双向链表实现了队列和栈的数据结构
  * @作者:尉哲明
  * @日期:2001年5月 */

/** 类LinkedList,双向链表类 */
class LinkedList{ 
	char data;
	LinkedList back;
	LinkedList forward;
}//类LinkedList结束

/** 接口Access,定义从队列和栈存取操作的接口 */
interface Access{ 

	/** 定义put()方法 */
	void put(char c);

	/** 定义get()方法 */
	char get();
}//接口Access结束

/** 类Queue,队列类,实现接口Access */
class Queue implements Access{ 
	private LinkedList QHead=new LinkedList();
	private LinkedList QRear=QHead; //初始化队头和队尾

	/** 实现接口Access的put()方法,该方法向队列存一个字符 */
	public void put(char c){
		QRear.forward=new LinkedList();
		QRear.forward.data=c;
		QRear.forward.back=QRear;
		QRear=QRear.forward;
	}

	/** 实现接口Access的get()方法,该方法从队列取一个字符 */
	public char get(){ 
		if(QHead!=QRear){ //如果队列不为空则取数
		  QHead.forward.back=null;
		  QHead=QHead.forward;
		  return QHead.data;
		}
		else{ 
		  System.out.println("The queue is empty!");
		  return '\0';
		}
	}
}//类Queue结束

/** 类Stack,栈类,实现接口Access */
class Stack implements Access { //定义栈类
	private LinkedList bottom=new LinkedList();
	private LinkedList top=bottom; //初始化栈顶与栈底

	/** 实现接口Access的put()方法,该方法向栈存一个字符 */
	public void put(char c){ 
		top.forward=new LinkedList();
		top.forward.data=c;
		top.forward.back=top;
		top=top.forward;
	}

	/** 实现接口Access的get()方法,该方法从栈中取一个字符 */
	public char get(){ 
		if(top!=bottom){ //如果栈不为空则取数
		  char ch=top.data;
		  top.back.forward=null;
		  top=top.back;
		  return ch;
		}
		else{ 
		  System.out.println("The stack is empty!");
		  return '\0';
		}
	}
}//类Stack结束

/** 类StackQueue */
public class StackQueue{

	/** main()方法 */
	public static void main(String a[]){
		char ch;
		Queue q=new Queue(); //创建一队列q
		Stack s=new Stack(); //创建一个栈s
		q.put('x'); 
		q.put('y');
		q.put('z'); //向队列q存入三个字符
		s.put('x');
		s.put('y');
		s.put('z'); //向栈s中存入三个字符
		System.out.println("Queue:");
		if((ch=q.get())!='\0')
		  System.out.println(ch);
		if((ch=q.get())!='\0')  
		  System.out.println(ch);
		if((ch=q.get())!='\0')  
		  System.out.println(ch);
		if((ch=q.get())!='\0')
		  System.out.println(ch); //从队列q中取数并显示
		System.out.println("Stack:");
		if((ch=s.get())!='\0')		
		  System.out.println(ch);
		if((ch=s.get())!='\0')  
		  System.out.println(ch);
		if((ch=s.get())!='\0')  
		  System.out.println(ch);
		if((ch=s.get())!='\0')  
		  System.out.println(ch); //从栈s中取数并显示
	}
}//类StackQueue结束

⌨️ 快捷键说明

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