栈(Stack)
    李艳生
    湖北师范大学
    物理与电子科学学院
    2020年春季
    栈
    
        
        图1 书
    
 
栈概念
    - 一组遵守后进先出(LIFO)的有序集合
 
    - 一个栈包含栈底,栈顶,栈指针
 
    - 添加或删除操作只能在栈顶
 
    - 新元素在栈顶,旧元素在栈底
 
    - 生活实例:一叠盘子
 
    - 计算机实例:函数嵌套调用,浏览器历史记录
 
基于数组建栈
class Stack{
    constructor(){
        this.items = [];
    }
    push(element){}
    pop(){}
    peek(){}
    isEmpty(){}
    clear(){}
}
进栈
    - 进栈只能在栈顶添加元素
 
    - 利用数组push操作实现进栈
 
push(element){
    this.items.push(element);
}
出栈
    - 出栈只能在栈顶删除元素
 
    - 利用数组pop操作实现出栈
 
pop(){
    return this.items.pop();
}
查看栈顶元素
    - 查看栈顶只获取栈顶元素,不删除
 
    - 利用数组length属性
 
peek(){
    return this.items[this.items.length - 1];
}
检查栈空
    - 栈空返回true,不空返回false
 
    - 利用数组length属性
 
isEmpty(){
    return this.items.length === 0;
}
清空栈
clear(){
    this.items = [];
}
基于对象建栈
class Stack{
    constructor(){
        this.count = 0;
        this.items = {};
    }
    push(element){}
    pop(){}
    peek(){}
    isEmpty(){}
    clear(){}
}
进栈
    - 进栈只能在栈顶添加元素
 
    - 利用对象键值对操作实现进栈,this.count作为键,插入元素作为值
 
    - 递增count变量
 
push(element){
    this.items[this.count] = element;
    this.count++;
}
检查栈空
    - 栈空返回true,不空返回false
 
    - 利用变量count
 
isEmpty(){
    return this.count === 0;
}
出栈
    - 出栈只能在栈顶删除元素
 
    - 利用变量count操作实现出栈
 
pop(){
    this.count--;
    const ret = this.items[this.count];
    delete this.items[this.count];
    return ret;
}
查看栈顶元素
    - 查看栈顶只获取栈顶元素,不删除
 
    - 利用变量count
 
peek(){
    return this.items[this.count - 1];
}
清空栈
clear(){
    this.count = 0;
    this.items = {};
}
任务
利用栈设计一种十进制转十六进制算法,并测试十进制数100转换十六进制。