本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程
我们浏览网页,经常会用到前进,后退的功能。比如依次浏览了a-b-c 三个页面,这时点后退,可以回到 b 页面,再次点击回到 a 页面。如果这时,又进入 新页面d ,那就无法通过前进,后退功能回到b、c页面了。
这样一个功能,要如何实现呢?
其实这样一个功能,可以借助栈来实现。
什么是栈?它是一个数据结构,数据先进后出,后进先出。打一个比方,放一叠盘子,放的时候,都放最上面,取的时候也从最上面取。典型的后进先出。
栈,可以用数组来实现,也可以用链表来实现。前者叫顺序栈,后者是链式栈。
为什么会有栈这种数据结构,直接用数组或是链表不就好了么?栈有严格的限制,只能从栈顶压入数据,从栈顶取数据,可以满足特定场景的需求,而链表或是数组暴露了太多的接口,容易出错。
如何实现一个栈
public class ArrayStack{
private String [] items; // 数组
private int count; // 栈中元素个数
private int n; //栈的大小
// 初始化数组,申请一个大小为 n 的数组空间
public ArrayStack(int n){
items = new String [n];
this.n = n;
count = 0;
}
// 入栈操作
public boolean push(String item){
if(count == n){
return false;
}
items[count-1] = item;
count++;
return true;
}
// 出栈操作
public String pop(){
if(count == 0){
return null;
}
String temp = items[count-1];
count--;
return temp;
}
}
栈的实际应用
栈作