成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

挨踢部落故事匯(25):剖析鏈?zhǔn)酱鎯Ec代碼實(shí)現(xiàn)

原創(chuàng)
移動開發(fā)
計(jì)算機(jī)中最常見的數(shù)據(jù)結(jié)構(gòu)棧和隊(duì)列,是怎么通過代碼來實(shí)現(xiàn)他們呢?很多童鞋可能會說,這還不簡單么?用集合或者數(shù)組,so easy!那么,如果為了提高執(zhí)行效率,不允許使用集合或者數(shù)組呢?下面,就由小妖來為大家剖析吧!

【51CTO.com原創(chuàng)稿件】小妖畢業(yè)于重慶郵電大學(xué)計(jì)算機(jī)系,目前是一枚小小Android移動應(yīng)用開發(fā)程序員,愛生活,愛女朋友,沒事的時候還愛玩兒游戲,愛死磕。目前人生目標(biāo):賺錢買房買車娶媳婦兒。

[[199073]]

小妖·Android開發(fā)

棧和隊(duì)列介紹

學(xué)過計(jì)算機(jī)編程基礎(chǔ)的朋友都知道計(jì)算機(jī)中最常見的數(shù)據(jù)結(jié)構(gòu)棧和隊(duì)列,這種線性表結(jié)構(gòu)之所以很常見,正是因?yàn)樗鼈兒唵螀s強(qiáng)大的功能特性是很多算法的基礎(chǔ)構(gòu)成。大三時小妖在北京一次實(shí)習(xí)面試中,面試官問過他一個問題,“怎么樣用棧來實(shí)現(xiàn)一個隊(duì)列?”當(dāng)時他陷入了一個誤區(qū),認(rèn)為面試官說的棧是指一個棧,由于棧的先入后出的特性,所以一個棧來完成隊(duì)列的功能在概念上是不可能的。俗話說,一個棧不行,那就兩個棧。OK,答對了,確實(shí)是至少需要兩個棧。言歸正傳,既然棧和隊(duì)列的應(yīng)用如此廣泛,那么怎么通過代碼來實(shí)現(xiàn)他們呢?很多童鞋可能會說,這還不簡單么?用集合或者數(shù)組,so easy!那么,如果為了提高執(zhí)行效率,不允許使用集合或者數(shù)組呢?下面,就由小妖來為大家小小的剖析一下吧!

鏈?zhǔn)酱鎯7治?/strong>

棧的概念,這里就不再多說了,不清楚的童鞋請自行百度。其先入后出的特性確實(shí)有很多的實(shí)現(xiàn)方式。如題,我們這里將實(shí)現(xiàn)鏈?zhǔn)酱鎯Γ螢殒準(zhǔn)酱鎯δ兀咳缦聢D:

鏈?zhǔn)酱鎯? title=

鏈?zhǔn)酱鎯Φ幕締挝皇荖ode(結(jié)點(diǎn)),在一個結(jié)點(diǎn)中,分為數(shù)據(jù)區(qū)和指針域,通過指針域指向下一個結(jié)點(diǎn)來將各個結(jié)點(diǎn)相連接。由于鏈?zhǔn)降奶匦裕迦牒蛣h除鏈中的某一個結(jié)點(diǎn)(除鏈頭和尾之外的其他結(jié)點(diǎn))相對而言是消耗比較大的,但是用來實(shí)現(xiàn)棧或者隊(duì)列是極好的。對于棧結(jié)構(gòu)來說,數(shù)據(jù)的入棧和出棧以及判斷是否到達(dá)棧底等方法是必不可少的。

代碼實(shí)現(xiàn)

接下來看看如何用Java代碼實(shí)現(xiàn):

  1. /** 
  2.  * Created by lxh on 2017/8/1. 
  3.  * QQ-632671653 
  4.  * 自定義鏈?zhǔn)酱鎯?nbsp;
  5.  */ 
  6. public class LinkStack<T> { 
  7.  
  8.  
  9.     private Node<T> top = new Node<>();//初始化棧頂結(jié)點(diǎn) 
  10.  
  11.     /** 
  12.      * 數(shù)據(jù)入棧操作 
  13.      * @param data 
  14.      */ 
  15.     public void push(T data) { 
  16.         top = new Node<>(data, top); 
  17.         System.out.println(top.toString()); 
  18.     } 
  1. /** 
  2.      * 數(shù)據(jù)出棧操作 
  3.      * @return 
  4.      */ 
  5.     public T pop() { 
  6.         T result = top.data; 
  7.         if (top.hasNext()) { 
  8.             top = top.next; 
  9.         } 
  10.         return result; 
  11.     } 
  12.     //使用內(nèi)部類構(gòu)建結(jié)點(diǎn) 
  13.     private class Node<T> { 
  14.         T data; //使用泛型來定義數(shù)據(jù)域 
  15.         Node<T> next; //定義下一個結(jié)點(diǎn) 
  16.  
  17.         /** 
  18.          * 無參構(gòu)造方法中初始化棧底部,為棧添加末端哨兵 
  19.          */ 
  20.         Node() { 
  21.             data = null; 
  22.             next = null; 
  23.         } 
  24.  
  25.         /** 
  26.          * 通過帶參構(gòu)造方法來構(gòu)造每一個添加的結(jié)點(diǎn)對象 
  27.          * @param data 
  28.          * @param next 
  29.          */ 
  30.         public Node(T data, Node<T> next) { 
  31.             this.data = data; 
  32.             this.next = next; 
  33.         } 
  34.  
  35.         /** 
  36.          * 判斷是否到達(dá)棧底 
  37.          * @return 
  38.          */ 
  39.         boolean hasNext() { 
  40.             return data != null && next != null; 
  41.         } 
  42.  
  43.         @Override 
  44.         public String toString() { 
  45.             return "Node{" + 
  46.                     "data=" + data + 
  47.                     ", next=" + next + 
  48.                     '}'; 
  49.         } 
  50.     } 
  51.  

從代碼中可以看到,在這里使用了泛型來保證入棧數(shù)據(jù)類型的通用,結(jié)點(diǎn)采用了內(nèi)部類的方式來構(gòu)造,因?yàn)槠渌接行裕允强梢员WC數(shù)據(jù)安全的。基礎(chǔ)不太好的同學(xué)可能會比較懵逼,不太明白這個鏈?zhǔn)绞擎湹侥睦锏模孕⊙谌霔2僮鲿r將棧內(nèi)信息打印了出來,相信各位一看就明白了。如下圖:

結(jié)果

相信通過信息圖大家明白了,這個鏈?zhǔn)酱鎯J峭ㄟ^在結(jié)點(diǎn)對象中遞歸添加結(jié)點(diǎn)對象來構(gòu)成了一個一個結(jié)點(diǎn)的鏈接,體現(xiàn)在字符集上則是一層一層的對象嵌套(由于采用了Java語言來編寫,沒有C中的指針,所以采用此方法來代替指針)。通過末端結(jié)點(diǎn)的哨兵,當(dāng)出棧時數(shù)據(jù)集為null 則可以判斷出棧中數(shù)據(jù)出棧完畢了。

【寫在***】

同行中流傳著這樣一句話:不要重復(fù)的造輪子。但是小妖覺得,即便不需要你去造輪子,但是你也得明白輪子到底是怎樣造出來。如果你只會調(diào)用API,那么你將失去競爭力。

如果你也愿意分享你的故事,請加51CTO開發(fā)者QQ交流群 542270018聯(lián)系群主小官,期待你精彩的故事!

51CTO開發(fā)者交流群③群 542270018

【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

責(zé)任編輯:何星 來源: 51CTO
相關(guān)推薦

2017-06-09 16:27:40

開發(fā)者故事

2017-01-18 16:37:43

開發(fā)者故事

2017-11-28 14:15:38

開發(fā)者故事

2017-03-21 11:19:57

開發(fā)者故事

2016-12-30 16:43:53

開發(fā)者故事

2017-08-21 16:41:29

開發(fā)者故事

2017-01-10 14:59:03

開發(fā)者故事

2017-09-15 11:39:47

2017-12-22 09:33:14

開發(fā)者故事

2017-03-01 15:57:48

開發(fā)者故事

2017-01-11 17:25:23

開發(fā)者故事

2017-10-23 13:15:51

2017-01-13 16:36:29

開發(fā)者故事

2017-07-06 14:59:27

2017-01-19 13:40:56

開發(fā)者故事

2017-03-10 11:32:49

開發(fā)者故事

2017-01-16 17:24:08

開發(fā)者故事

2017-01-18 11:07:20

開發(fā)者故事

2017-01-05 15:30:59

開發(fā)者故事

2017-04-21 15:50:52

開發(fā)者故事
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品www久久久久久广东 | 91精品国产综合久久国产大片 | 99久热 | 亚洲在线一区二区 | 国产韩国精品一区二区三区 | 欧美11一13sex性hd | 欧美一级片免费看 | 欧美性大战久久久久久久蜜臀 | 91免费入口 | 国产亚洲一区二区三区在线观看 | 亚州av| 91久久综合亚洲鲁鲁五月天 | 91成人在线 | 久久精品视频在线免费观看 | 精品久久久久久久久久久院品网 | 国产精品美女久久久久久免费 | 精品欧美二区 | 免费av电影网站 | 不卡欧美 | 三级特黄特色视频 | 三级特黄特色视频 | 精品亚洲一区二区三区 | 第四色影音先锋 | 成人在线视频网站 | 一区二区三区视频在线免费观看 | 国产福利在线 | 天天搞天天操 | 在线成人免费视频 | 成人精品视频在线 | 亚洲一区二区视频 | 中文字幕亚洲视频 | 成人做爰9片免费看网站 | 国产精品久久久久无码av | 麻豆changesxxx国产 | 中文字幕视频网 | 日韩国产欧美 | 日本成人久久 | 成人精品一区二区三区中文字幕 | 在线看亚洲 | 99久久婷婷国产综合精品电影 | 九色.com |