Java數(shù)據(jù)結(jié)構(gòu)與算法 隊(duì)列的初步認(rèn)識(一)之?dāng)?shù)字解密

? 問題是這樣的,有一串?dāng)?shù)字,需要進(jìn)行一系列的解碼亿笤,解密規(guī)則是:首先將第1個數(shù)刪除,緊接著第2個數(shù)放到這串?dāng)?shù)的末尾栋猖,再將第3個數(shù)刪除并將第4個數(shù)放到這串?dāng)?shù)的末尾净薛,再將第5個數(shù)刪除……,直到剩下最后一個數(shù)蒲拉,將最后一個數(shù)也刪除肃拜。按照刪除的順序,把這些刪除的數(shù)連再一起全陨,就是得到的密碼。 我們使用 631758924 作為樣例衷掷,得到的結(jié)果應(yīng)該是 615947283 辱姨。

? 我們先來分析一下思路,這串?dāng)?shù)字就是一個隊(duì)列戚嗅,再排隊(duì)雨涛,從頭到尾,從前面開始懦胞,每次拿掉最前面的兩個替久,第1個扔掉,第2個放到尾部躏尉。然后再考慮排在第3個和第4個的數(shù)蚯根,這滿足 先進(jìn)先出 的原理,所以是隊(duì)列胀糜。

? 具體過程是這樣的:剛開始這串?dāng)?shù)是“6 3 1 7 5 8 9 2 4”颅拦,首先刪除6并將3放到這串?dāng)?shù)的末尾蒂誉,這串?dāng)?shù)跟新為“1 7 5 8 9 2 4 3”,依次這樣操作后距帅,最后剩下一個3右锨,在將3放在末尾后,刪除碌秸。


往前移一位

? 這里我們使用了一個數(shù)組來保存著一串?dāng)?shù)字绍移。解密的第一步是將第一個數(shù)刪除,最簡單的方法是將所有后面的數(shù)都往前面挪動一位讥电,將前面的數(shù)覆蓋蹂窖。就好比我們排隊(duì)買票,最前面的人買好離開了允趟,后面所有的人就需要往全部向前面走一步恼策,補(bǔ)上之前的空位,但是這樣的做法很耗費(fèi)時間潮剪。

在這里涣楷,我們引入兩個整型變量 head 和 tail 。head用來記錄隊(duì)列的隊(duì)首(即第一位)抗碰,tail用來記錄隊(duì)列的隊(duì)尾(即最后一位)的下一個位置(這樣可以避免head和tail重復(fù)帶來的麻煩狮斗,并規(guī)定隊(duì)首和隊(duì)尾重合時,隊(duì)列為空)弧蝇。


head到tail(3到4)是隊(duì)列的有效數(shù)字

現(xiàn)在就上操作流程圖和實(shí)例代碼碳褒。


注:q的下標(biāo)往前移動一位,即q[1]是q[0]


實(shí)例代碼

這里使用了高效率的System數(shù)組拷貝方法看疗,使的在原密碼的最后一個數(shù)字后面還有多的空間給前面的數(shù)字排隊(duì)沙峻。


得到一個容器


head和tail

刪除一個數(shù)時,可以使用另一個數(shù)組來保存两芳,這里直接使用了打印在控制臺上來輸出顯示摔寨。我們使用循環(huán)來打印密碼的每一個數(shù)字,直到當(dāng)head與tail相等時怖辆,代表隊(duì)列為空是复,跳出循環(huán)。


依次輸出顯示

現(xiàn)在我們來總結(jié)一下隊(duì)列的概念竖螃,隊(duì)列使一種特殊的線性結(jié)構(gòu)淑廊,它只允許在隊(duì)列的首部(head)進(jìn)行刪除操作,這稱為“出隊(duì)”特咆,而在隊(duì)列的尾部(tail)進(jìn)行插入操作季惩,這稱為“入隊(duì)”。當(dāng)隊(duì)列中沒有元素時(即head == tail),稱為空隊(duì)列蜀备。隊(duì)列就像上面提到的排隊(duì)買票一樣关摇,在整個隊(duì)列中,新來的人總是站在隊(duì)列的最后面碾阁,來得越早的人越靠前输虱,也能越早買到票,就是先來的人先服務(wù)脂凶,我們稱為“先進(jìn)先出”(First In First Out宪睹,F(xiàn)IFO)原則。隊(duì)列將時我們以后要學(xué)習(xí)的廣搜(BFS)以及 Bellman-Ford最短路徑 算法的核心數(shù)據(jù)結(jié)構(gòu)蚕钦。

? 所以亭病,我們現(xiàn)在可以將隊(duì)列的三個基本元素(一個數(shù)組,兩個變量)封裝為一個類嘶居。如下罪帖。


一個簡單的隊(duì)列

到這里,我們使用一個封裝好了的簡單隊(duì)列來實(shí)現(xiàn)這個問題邮屁。這里才用內(nèi)部類的方式封裝整袁,方便主函數(shù)調(diào)用。


實(shí)例代碼


輸入和輸出
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佑吝,一起剝皮案震驚了整個濱河市坐昙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芋忿,老刑警劉巖炸客,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戈钢,居然都是意外死亡痹仙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門殉了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來开仰,“玉大人,你說我怎么就攤上這事宣渗《端” “怎么了梨州?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵痕囱,是天一觀的道長。 經(jīng)常有香客問我暴匠,道長鞍恢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮帮掉,結(jié)果婚禮上弦悉,老公的妹妹穿的比我還像新娘。我一直安慰自己蟆炊,他們只是感情好稽莉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涩搓,像睡著了一般污秆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昧甘,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天良拼,我揣著相機(jī)與錄音,去河邊找鬼充边。 笑死庸推,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浇冰。 我是一名探鬼主播贬媒,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼湖饱!你這毒婦竟也來了掖蛤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤井厌,失蹤者是張志新(化名)和其女友劉穎蚓庭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仅仆,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡器赞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了墓拜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片港柜。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖咳榜,靈堂內(nèi)的尸體忽然破棺而出夏醉,到底是詐尸還是另有隱情,我是刑警寧澤涌韩,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布畔柔,位于F島的核電站,受9級特大地震影響臣樱,放射性物質(zhì)發(fā)生泄漏靶擦。R本人自食惡果不足惜腮考,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玄捕。 院中可真熱鬧踩蔚,春花似錦、人聲如沸枚粘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馍迄。三九已至捞蛋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柬姚,已是汗流浹背拟杉。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留量承,地道東北人搬设。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像撕捍,于是被迫代替她去往敵國和親拿穴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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