昨日写完了链表的基本操作,今天学习栈。
栈是一种特殊的数据结构,是操作受限的线性表,可以说是限定性的数据结构。
栈是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶,表头端称为栈底。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,简单说就是后进先出(FILO)。栈在日常编程中使用广泛。
通常使用设置栈顶指针来实现栈的一系列操作。本代码中depth可以理解为栈顶指针的作用,
首先来定义栈,
public static final int MAX_DEPTH = 10;
int depth;
char[] data;
然后创建一个空栈,初始depth为0,
public CharStack() {
depth = 0;
data = new char[MAX_DEPTH];
}
重写toString方法:
public String toString() {
String resultString = "";
for (int i = 0; i < depth; i++) {
resultString += data[i];
}
入栈操作 :
public boolean push(char paraChar) {
if (depth == MAX_DEPTH) {
System.out.println("Stack full.");
return false;
} //判断是否栈满,栈满不允许入栈
data[depth] = paraChar;//入栈
depth++;
return true;
}
出栈操作:
public char pop() {
if (depth == 0) {
System.out.println("Nothing to pop.");
return false;
} // 判断是否为栈空,栈空报错
char resultChar = data[depth - 1];//出栈
depth--;
return resultChar;
}
测试一下:
public static void main(String args[]) {
CharStack tempStack = new CharStack();
for (char ch = 'a'; ch < 'g'; ch++) {
tempStack.push(ch);//a到m依次入栈
System.out.println("The current stack is: " + tempStack);
}//显示栈内元素
char tempChar;
for (int i = 0; i < 6; i++) {
tempChar = tempStack.pop();//依次出栈
System.out.println("Poped: " + tempChar);
System.out.println("The current stack is: " + tempStack);
}
}
运行结果:
总结:栈在实际开发中应用广泛,例如深度优先遍历算法,括号匹配等。栈也可以用链表来存储。