栈一次只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个数据项,依此类推。栈的数据项遵循后进先出的次序。
1.栈的实现代码
下面以一个输入字符串的倒序输出为例:
1.栈的实现代码
package com.gjy.stack;
public class Stack {
private int maxSize;
private char [] stackArray;
private int top;
public Stack(int s){
maxSize = s;
stackArray = new char[maxSize];
top = -1;
}
// 添加数据
public void push(char j){
stackArray[++top] = j;
}
// 删除数据
public char pop(){
return stackArray[top--];
}
// 获取数据
public char peek(){
return stackArray[top];
}
// 判断栈是否为空
public boolean isEmpty(){
return (top == -1);
}
// 判断栈是否已满
public boolean isFull(){
return (top == maxSize-1);
}
}
下面以一个输入字符串的倒序输出为例:
package com.gjy.stack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Reverser {
private String input;
private String output;
public Reverser(String in){
input = in;
}
public String doRve(){
int stackSize = input.length();
Stack stack = new Stack(stackSize);
for(int i=0;i<input.length();i++){
char c = input.charAt(i);
stack.push(c);
}
output = "";
while(!stack.isEmpty()){
char c = (char) stack.pop();
output = output + c;
}
return output;
}
public static void main(String[] args) {
String input,output;
while (true) {
System.out.println("Enter a String: ");
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
try {
input = buf.readLine();
if ("".equals(input.trim())||input==null){
break;
}
Reverser reverser = new Reverser(input);
output = reverser.doRve();
System.out.println(output);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}