隊列和棧

基礎:

1棋返、用數(shù)組結(jié)構(gòu)實現(xiàn)大小固定的隊列和棧

數(shù)組實現(xiàn)棧思路:用一個指針來確定位置,當大于數(shù)組長度或者為0時拋出異常

public static class ArrayToStack{
    private Integer[] arr;
    private Integer index;

    public ArrayToStack(int initSize){
        if(initSize < 0){
            throw new IllegalArgumentException("The init size is less than 0");
        }
        arr = new Integer[initSize];
        index = 0;
    }

    public void push(int obj){
        if(index == arr.length){
            throw new ArrayIndexOutOfBoundsException("The queue is full");
        }
        arr[index++] = obj;
    }

    public Integer pop(){
        if(index == 0){
            throw new ArrayIndexOutOfBoundsException("The queue is empty");
        }
        return arr[index--];
    }

    public Integer peek(){
        if(index == 0){
            return null;
        }
        return arr[index - 1];
    }
}

數(shù)組實現(xiàn)隊列思路:先定義一個size為隊列大小,初始size為0雷猪,當push添加數(shù)時睛竣,end+1,直到size滿了求摇,再從0開始循環(huán)射沟;當poll取數(shù)時,size先-1与境,然后start+1验夯,當start滿了,再從0開始循環(huán)摔刁。

public static class ArrayToQueue{
    private Integer[] arr;
    private Integer size;
    private Integer start;
    private Integer end;

    public ArrayToQueue(int initSize){
        if(initSize < 0){
            throw new IllegalArgumentException("The init size is less than 0");
        }
        arr = new Integer[initSize];
        size = 0;
        start = 0;
        end = 0;
    }
    
    public void push(int obj){
        if(size == arr.length){
            throw new ArrayIndexOutOfBoundsException("The queue is full");
        }
        size++;
        arr[end] = obj;
        end = end == arr.length - 1 ? 0 : end + 1;
    }

    public Integer poll(){
        if(size == 0){
            throw new ArrayIndexOutOfBoundsException("The queue is empty");
        }
        size--;
        int tmp = start;
        start = start == arr.length -1 ? 0 : start + 1;
        return arr[tmp];
    }

    public Integer peek(){
        if(size == 0){
            return null;
        }
        return arr[start];
    }
}
2挥转、實現(xiàn)一個特殊的棧,在棧的基本功能基礎上共屈,再實現(xiàn)返回棧中最小元素的操作

【要求】
1.pop绑谣、push、getMin操作的時間復雜度都是O(1)
2.設計的棧類型可以使用現(xiàn)成的棧結(jié)構(gòu)

思路:準備兩個棧拗引,一個data棧域仇,一個min棧,data棧存數(shù)取數(shù)寺擂,min棧只存最小值,當新來一個數(shù)時泼掠,與min棧的棧頂元素比較,若小則壓入,若大于則不操作浅碾,彈出時data棧與min棧同步彈出即可影暴。

public class getMinStack{
    private Stack<Integer> stackMin;
    private Stack<Integer> stackData;

    public getMinStack(){
        this.stackData = new Stack<Integer>();
        this.stackMin = new Stack<Integer>();
    }
    
    public void push(int newNum){
        if(this.stackMin.isEmpty()){
            this.stackMin.push(newNum);
        }
        // 壓棧時若新數(shù)據(jù)小于等于min棧的棧頂元素則壓入,否則將min棧棧頂元素重復壓入一次
        else if(newNum <= this.getMin()){
            this.stackMin.push(newNum);
        }
        else{
            int newMin = this.stackMin.peek();
            this.stackMin.push(newMin);
        }
        this.stackData.push(newNum);
    }

    public int pop(){
        if(this.stackData.isEmpty()){
            throw new RuntimeException("Your stack is empty.");
        }
        // 同步彈出即可
        this.stackMin.pop();
        return this.stackData.pop();
    }

    public int getMin(){
        if(this.stackMin.isEmpty()){
            throw new RuntimeException("Your stack is empty.");
        }
        return this.stackMin.peek();
    }
}
3、用隊列實現(xiàn)棧腻豌,用棧實現(xiàn)隊列

4家坎、轉(zhuǎn)圈打印矩陣

【題目】 給定一個整型矩陣matrix嘱能,請按照轉(zhuǎn)圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印結(jié)果為:1虱疏,2惹骂,3,4做瞪,8对粪,12,16装蓬,15著拭,14,13牍帚,9儡遮, 5,6暗赶,7鄙币,11, 10
【要求】 額外空間復雜度為O(1)


5忆首、旋轉(zhuǎn)正方形矩陣

【題目】 給定一個整型正方形矩陣matrix爱榔,請把該矩陣調(diào)整成 順時針旋轉(zhuǎn)90度的樣子。
【要求】 額外空間復雜度為O(1)糙及。


7详幽、“之”字形打印矩陣
【題目】 給定一個矩陣matrix,按照“之”字形的方式打印這 個矩陣浸锨,例如: 1 2 3 4 5 6 7 8 9 10 11 12 “之”字形打印的結(jié)果為:1唇聘,2,5柱搜,9迟郎,6,3聪蘸,4宪肖,7,10健爬,11控乾, 8,12 【要求】 額外空間復雜度為O(1)娜遵。
8蜕衡、在行列都排好序的矩陣中找數(shù)
【題目】 給定一個有N*M的整型矩陣matrix和一個整數(shù)K, matrix的每一行和每一 列都是排好序的设拟。實現(xiàn)一個函數(shù)慨仿,判斷K 是否在matrix中久脯。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K為7,返回true镰吆;如果K為6帘撰,返 回false。 【要求】 時間復雜度為O(N+M)鼎姊,額外空間復雜度為O(1)
9骡和、
進階:
1、括號是否匹配

2相寇、最長括號匹配


3慰于、逆波蘭表達式
4、入棧出棧問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唤衫,一起剝皮案震驚了整個濱河市婆赠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佳励,老刑警劉巖休里,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赃承,居然都是意外死亡妙黍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門瞧剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拭嫁,“玉大人,你說我怎么就攤上這事抓于∽鲈粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵捉撮,是天一觀的道長怕品。 經(jīng)常有香客問我,道長巾遭,這世上最難降的妖魔是什么肉康? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮灼舍,結(jié)果婚禮上迎罗,老公的妹妹穿的比我還像新娘。我一直安慰自己片仿,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布尤辱。 她就那樣靜靜地躺著砂豌,像睡著了一般厢岂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阳距,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天塔粒,我揣著相機與錄音,去河邊找鬼筐摘。 笑死卒茬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的咖熟。 我是一名探鬼主播圃酵,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馍管!你這毒婦竟也來了郭赐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤确沸,失蹤者是張志新(化名)和其女友劉穎捌锭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罗捎,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡观谦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桨菜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豁状。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雷激,靈堂內(nèi)的尸體忽然破棺而出替蔬,到底是詐尸還是另有隱情,我是刑警寧澤屎暇,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布承桥,位于F島的核電站,受9級特大地震影響根悼,放射性物質(zhì)發(fā)生泄漏凶异。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一挤巡、第九天 我趴在偏房一處隱蔽的房頂上張望剩彬。 院中可真熱鬧,春花似錦矿卑、人聲如沸喉恋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轻黑。三九已至糊肤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氓鄙,已是汗流浹背馆揉。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抖拦,地道東北人升酣。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像态罪,于是被迫代替她去往敵國和親噩茄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 用兩個棧實現(xiàn)隊列的頭部出隊向臀,尾部入隊操作: 30巢墅、包含min函數(shù)的棧 定義棧的數(shù)據(jù)結(jié)構(gòu),請在該類型中實現(xiàn)一個能夠得...
    世界上的一道風閱讀 135評論 0 0
  • 數(shù)組 數(shù)組的內(nèi)存是連續(xù)的,不同的語言有著不同的分配內(nèi)存規(guī)則芹彬。有的需要開始的時候指定長度蓄髓,有的不需要(當數(shù)組的長度不...
    齊葩閱讀 1,751評論 1 1
  • 隊列和棧 啊哈,我開新坑了 隊列 首先舒帮,我們來講解一下什么是隊列你們印象中的隊列可能是這樣子的: [圖片上傳失敗....
    兄主的仙人掌閱讀 349評論 0 0
  • 3:隊列(QUEUE) 3.1:隊列的定義和性質(zhì) 隊列:只允許前端(front会喝,隊首)進行刪除操作,而在后端(re...
    sanpintian閱讀 518評論 0 2
  • 看到陽臺上那盆蘭草肆意綻放著花朵玩郊,有誰能夠想到她是曾經(jīng)奄奄一息肢执,我一度想拋棄、想放棄的那一叢毫無生命力译红、毫不起眼预茄,...
    納言納語閱讀 391評論 0 9