005 go語言 兩棧(雙棧) 共享空間

1 雙棧共享空間 思路

如果有兩個類型相同的棧摘符,我們?yōu)樗鼈兎謩e開辟了數(shù)組空間贤斜。極有可能是一個棧已經(jīng)滿了,再入棧就溢出了逛裤,而另一個棧卻還有很多存儲空間瘩绒。這又何必呢?我們完全可以用一個數(shù)組來存儲兩個棧带族,只不過需要一些小的技巧锁荔。
  我們的做法如下,數(shù)組有兩個端點蝙砌,兩個棧有兩個棧底阳堕。讓一個棧的棧底為數(shù)組的始端,即數(shù)組下標為0的位置择克。讓另一個棧的棧底為數(shù)組的末端恬总,即數(shù)組下標為n-1的位置。這樣如果兩個棧增加元素肚邢,就是兩端點向中間延伸壹堰。


image.png

關(guān)鍵思路:
它們是在數(shù)組的兩端,向中間靠攏。top1和top2是兩個棧的棧頂指針缀旁。只要它們兩個不見面记劈,兩個棧就可以一直使用。

適用情況:
當兩個棧的空間需求有相反關(guān)系時, 也就是說一個棧增長另一個棽⑽。縮短的情況下, 就像買股票一樣有人買必有人賣目木。

2 代碼

代碼倉庫
https://gitee.com/babyb/data_srtuct/tree/master/005doublestack

代碼倉庫中有測試代碼

2.1 數(shù)據(jù)結(jié)構(gòu)
type DoubleStack struct {
    top1 int64
    top2 int64
    size int64
    data []interface{}
}

2.2 棧初始化代碼

數(shù)據(jù) data的下標為從 0 到 size -1;
所以初始化的時候, top1 = -1 top2 = size
添加元素的時候, 如果是往棧1 中添加, 則先讓 top1 ++ , 然后賦值, 棧1 中元素就從 數(shù)組的 底部下標 0開始, 向數(shù)組的頂部走
如果是往棧2中添加, 先 top2--, 然后再賦值, 棧2中的元素, 從數(shù)組的 頂部下標(size -1)處, 從上往下走
當棧1 中的元素與 棧2中的元素 見面 的時候, 也就是 top1 + 1 = top2, 說明數(shù)組中的所有空間被占滿, 棧滿了。

func InitStack(size int64) DoubleStack {
    d := DoubleStack{}
    d.top1 = -1
    d.top2 = size
    d.size = size
    d.data = make([]interface{}, size)
    return d
}
2.3 向指定 棧中插入元素
func (d *DoubleStack) Push(data interface{}, stackNum int64) {
    if d.IsFull() {
        fmt.Println("棸枚桑空間已滿, 無法繼續(xù)插入")
        return
    }
    if stackNum == 1 {
        // 向棧1 中插入元素
        d.top1++
        d.data[d.top1] = data
    } else {
        d.top2--
        d.data[d.top2] = data
    }
}

//IsFull 判斷棧是否已滿
func (d *DoubleStack) IsFull() bool {
    return d.top1+1 == d.top2
}
2.4 從指定棧中彈出元素
func (d *DoubleStack) Pop(stackNum int64) (data interface{}) {
    if stackNum == 1 {
        if d.top1 == -1 {
            fmt.Printf("棧%d 已空, 無法繼續(xù)彈出", stackNum)
            return
        }
        data = d.data[d.top1]
        d.top1--
    } else {
        if d.top2 >= d.size {
            fmt.Printf("棧%d已空,無法繼續(xù)彈出", stackNum)
        }
        data = d.data[d.top2]
        d.top2++
    }
    return data
}
2.5 展示和清空棧
func (d *DoubleStack) Show(stackNum int64) {
    var i int64
    if stackNum == 1 {
        for i = 0; i <= d.top1; i++ {
            fmt.Println(d.data[i])
        }
    } else {
        for i = d.size - 1; i >= d.top2; i-- {
            fmt.Println(d.data[i])
        }
    }
}

/*
Clear 清空棧
*/
func (d *DoubleStack) Clear() {
    d.top1 = -1
    d.top2 = d.size
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刽射,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剃执,更是在濱河造成了極大的恐慌誓禁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肾档,死亡現(xiàn)場離奇詭異摹恰,居然都是意外死亡,警方通過查閱死者的電腦和手機怒见,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門俗慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遣耍,你說我怎么就攤上這事闺阱。” “怎么了舵变?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵酣溃,是天一觀的道長。 經(jīng)常有香客問我纪隙,道長赊豌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任绵咱,我火速辦了婚禮亿絮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麸拄。我一直安慰自己派昧,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布拢切。 她就那樣靜靜地躺著蒂萎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪淮椰。 梳的紋絲不亂的頭發(fā)上五慈,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天纳寂,我揣著相機與錄音,去河邊找鬼泻拦。 笑死毙芜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的争拐。 我是一名探鬼主播腋粥,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼架曹,長吁一口氣:“原來是場噩夢啊……” “哼隘冲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绑雄,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤展辞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后万牺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罗珍,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年脚粟,在試婚紗的時候發(fā)現(xiàn)自己被綠了覆旱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡珊楼,死狀恐怖通殃,靈堂內(nèi)的尸體忽然破棺而出度液,到底是詐尸還是另有隱情厕宗,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布堕担,位于F島的核電站已慢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霹购。R本人自食惡果不足惜佑惠,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齐疙。 院中可真熱鬧膜楷,春花似錦、人聲如沸贞奋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轿塔。三九已至特愿,卻和暖如春仲墨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揍障。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工目养, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毒嫡。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓癌蚁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親审胚。 傳聞我的和親對象是個殘疾皇子匈勋,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 看到不少人畫彩鉛菲嘴,自己也沒有嘗試過饿自,忍不住買了一套回來玩兒玩兒。 畫筆剛到就迫不及待打開速寫本小試一把龄坪,畫彩鉛速寫...
    麒羽記閱讀 418評論 6 8
  • 1 浮云起昭雌,朝陽生,煙雨流散! 倉山深處健田,一場大戰(zhàn)牽動著三界眾生的心烛卧。天帝親往,平息戰(zhàn)亂妓局,奈何水神早已失去了心智总放,...
    玉江蝶影閱讀 738評論 0 3
  • 體重:63.85kg 早餐:公司食堂的素餡餅(胡蘿卜、雞蛋)好爬,煎蛋局雄,豆?jié){。 上午:咖啡飲料 午飯:公司食堂的金槍魚...
    因紐特獵人閱讀 154評論 0 0
  • 工作存炮,完成炬搭,加班完成,學(xué)習(xí)將重要事排程穆桂,學(xué)習(xí)蕃茄鐘的執(zhí)行 運動宫盔,陰雨膝蓋不適,未完成享完, 爬山灼芭,每月一次完成,看了日...
    喵家皇后閱讀 118評論 0 0
  • 對許多人來說驼侠,因為有了足夠的生活積累姿鸿,他拿起了筆谆吴。我正好相反,我的人生極度蒼白苛预,我是依仗著閱讀和寫作才弄明白一些事...
    玉箏閱讀 542評論 0 4