数据结构:
2.1栈的实现
栈的特性:栈:LIFO(后进先出)
栈可由顺序数组实现或者链表实现。
数组实现
//初始化
Object[] stack;
int size;
int top=-1;
//定义栈大小
StackBuild(int length){
size=length;
stack=new Object[length];
}
//入栈
public void push(Object element){
if (top!=size-1) {
top++;
stack[top]=element;
}
}
//出栈
public Object pop() {
Object result=null;
if (top!=-1) {
result=stack[top];
stack[top]=null;
top--;
}
return result;
}
链表实现
//初始化链表
private int listSize;
private Node listTop;
class Node{
Object data;
Node next;
public Node() {
// TODO Auto-generated constructor stub
}
public Node(Object data) {
// TODO Auto-generated constructor stub
this.data=data;
}
}
//入栈
public void linkPush(Object element){
Node newNode=new Node(element);
if (listSize==0) {
listTop=newNode;
}else {
newNode.next=listTop;
listTop=newNode;
}
listSize++;
}
//出栈
public void linkPop() {
if(listSize!=0){
Object tmp=listTop.data;
listTop=listTop.next;
listSize--;
}
}
web浏览器中前进后退的应用
思路:定义两个栈是s1,s1,s1放初始浏览页面的url,s2另一个栈为空,当执行后退的时候将s1顶端的url进行pop,并将数据push到上
s2中。执行前进的时候将s2顶端的url进行pop,并将数据push到上s1中。
StackBuild sb1=new StackBuild(10);
StackBuild sb2=new StackBuild(10);
sb1.push("baidu");
sb1.push("baiduTieba");
sb1.push("baiduWangpan");
sb1.push("baiduYun");
sb1.push("baiduDianying");
//sb1.pop 后退功能,sb2.pop 前进功能。
System.out.println("======================================>");
System.out.println("初始保存的页面:"+Arrays.toString(sb1.stack));
//后退
sb2.push(sb1.pop());
sb2.push(sb1.pop());
System.out.println("======================================>");
System.out.println("执行2次后退后的sb1:"+Arrays.toString(sb1.stack));
System.out.println("执行2次后退后的sb2:"+Arrays.toString(sb2.stack));
//前进
sb1.push(sb2.pop());
System.out.println("======================================>");
System.out.println("执行1次前进后的sb1:"+Arrays.toString(sb1.stack));
System.out.println("执行1次前进后的sb2:"+Arrays.toString(sb2.stack));
sb1.push(sb2.pop());
System.out.println("======================================>");
System.out.println("执行1次前进后的sb1sb1:"+Arrays.toString(sb1.stack));
System.out.println("执行1次前进后的sb1sb2:"+Arrays.toString(sb2.stack));
Consle:
======================================>
初始保存的页面:[baidu, baiduTieba, baiduWangpan, baiduYun, baiduDianying, null, null, null, null, null]
======================================>
执行2次后退后的sb1:[baidu, baiduTieba, baiduWangpan, null, null, null, null, null, null, null]
执行2次后退后的sb2:[baiduDianying, baiduYun, null, null, null, null, null, null, null, null]
======================================>
执行1次前进后的sb1:[baidu, baiduTieba, baiduWangpan, baiduYun, null, null, null, null, null, null]
执行1次前进后的sb2:[baiduDianying, null, null, null, null, null, null, null, null, null]
======================================>
执行1次前进后的sb1sb1:[baidu, baiduTieba, baiduWangpan, baiduYun, baiduDianying, null, null, null, null, null]
执行1次前进后的sb1sb2:[null, null, null, null, null, null, null, null, null, null]