栈的基本操作与简单应用
栈的最主要特点是后进先出。
栈是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。栈的所有插入和删除操作均在栈顶进行,而栈底不允许插入和删除。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
基本操作代码如下
package com.ma.stack;
public class ArrayStack {
//栈的大小
private int maxStack;
//数组用来模拟栈
private int[] stack;
//表示栈顶所在的位置,默认情况下没有数据时,使用-1
private int top = -1;
public ArrayStack(int maxStack){
this.maxStack = maxStack;
stack = new int[maxStack];
}
/*
* 压栈
* 弹栈
* 判断栈是否为空
* 判断栈是否已满
* 查看栈中所有元素
* 返回栈的长度
* */
//判断是否满栈
public boolean isFull(){
return this.maxStack-1 == this.top;
}
//判断是否空栈
public boolean isEmpty(){
return this.top == -1;
}
//压栈
public void push(int val){
//1.判断是否满栈
if (isFull()){
throw new RuntimeException("此栈已满");
}
top++;
stack[top] = val;
}
//弹栈
public int pop(){
//1.判断是否为空
if (isEmpty()){
throw new RuntimeException("此栈已空");
}
int value = stack[top];
top--;
return value;
}
//查看栈中所有元素
public void list(){
//判断是否为空栈
if (isEmpty()){
throw new RuntimeException("此栈为空栈");
}
for (int i=0; i<stack.length; i++){
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
//返回栈的长度
public int length(){
return top+1;
}
}
判断回文代码如下
package com.ma.stack;
public class TestApp {
public static void main(String[] args) {
System.out.println(detecation("bab"));
}
public static boolean detecation(String val){
//初始化栈对象
ArrayStack arraystack = new ArrayStack(10);
//获取字符串长度
int length = val.length();
//将字符串数据逐步获取字符后压入栈中
for (int i = 0; i < length; i++) {
arraystack.push(val.charAt(i));
}
//获取
String newVal = "";
int length1 = arraystack.length();
for (int i = 0; i < length1; i++) {
//判断是否满栈
if (!arraystack.isEmpty()){
char pop = (char) arraystack.pop();
//将弹出的字符组合成一个新字符
newVal += pop;
}
}
if (newVal.equals(val)){
return true;
}
return false;
}
}
}
}
if (newVal.equals(val)){
return true;
}
return false;
}
}