有道算法題之數組實現數據結構

前言

其實感受這都不算算法題,不過天天時間有限,也就記錄一下了,(ps:程序員簡潔風,之後就上題解題說我的思路,嗯,珍愛生命,遠離小菜)程序員

固定數組實現棧結構及隊列結構算法

基礎知識
  • 棧:後進先出 能夠抽象爲一個子彈夾,只有一個出入口
  • 隊列:先進先出 能夠抽象爲一個排隊,出入口分別在隊首和隊尾
解題思路
  • 實現棧
    1. 用一個變量指針指向出入口,即永遠指向最新數據的索引的變量(index)
    2. 用size變量表達棧中實際數據量
    3. 考慮棧空、棧滿等問題throw出異常
  • 實現隊列
    1. star變量指向添加時的索引的變量,end指向彈出時的索引的變量
    2. 用一個size變量使得star和end進行解耦,使得邊界問題轉化成隊列長度與size的比較
    3. 考慮隊列空、隊列滿等問題throw出異常
代碼實現
//固定數組實現棧結構
class arrStrack{
    constructor(initSize){
        if(initSize<0){
            throw new Error('棧長度不能爲負數')
        }
        this.initSize = initSize; //棧的長度
        this.index = -1; //永遠指向最新數據的索引的變量
        this.arr = [];
        this.size = 0;//實際數據長度
    }

    /**
     * 
     * @param {數組初始大小} initSize 
     */
    push(ele){
        if((this.index+1) == this.initSize){
            throw new Error('棧溢出')
        }
        this.size++;
        this.arr[++this.index]=ele;
    }
    pop(){
        if(this.size==0) throw new Error('棧爲空')
        this.index--;
        return this.arr[--this.size];
    }

}
let strack = new arrStrack(3);
strack.push('hhh');
console.log(strack.pop())

//固定數組實現隊列結構
class arrQueue{
    constructor(initSize){
        if(initSize<0){
            throw new Error('隊列長度不能爲負數')
        }
        this.initSize = initSize; //隊列的長度
        this.star = 0; //指向添加時的索引的變量
        this.end = 0;//指向彈出時的索引的變量
        this.arr = [];
        this.size = 0;//實際數據長度
    }
    push(ele){
        if(this.size >= this.initSize) throw new Error('隊列溢出');
        this.arr[this.star++] = ele;
        this.star = (this.star+1) >this.initSize ? 0 : this.star++;
    }
    poll(){
        if(this.size == 0) throw new Error('隊列爲空');
        this.end = (this.end+1) > this.initSize ? 0 :this.end++;
        size--;
    }

}

複製代碼
相關文章
相關標籤/搜索