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

挨踢部落故事匯(25):剖析鏈式存儲棧與代碼實現

原創
移動開發
計算機中最常見的數據結構棧和隊列,是怎么通過代碼來實現他們呢?很多童鞋可能會說,這還不簡單么?用集合或者數組,so easy!那么,如果為了提高執行效率,不允許使用集合或者數組呢?下面,就由小妖來為大家剖析吧!

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

[[199073]]

小妖·Android開發

棧和隊列介紹

學過計算機編程基礎的朋友都知道計算機中最常見的數據結構棧和隊列,這種線性表結構之所以很常見,正是因為它們簡單卻強大的功能特性是很多算法的基礎構成。大三時小妖在北京一次實習面試中,面試官問過他一個問題,“怎么樣用棧來實現一個隊列?”當時他陷入了一個誤區,認為面試官說的棧是指一個棧,由于棧的先入后出的特性,所以一個棧來完成隊列的功能在概念上是不可能的。俗話說,一個棧不行,那就兩個棧。OK,答對了,確實是至少需要兩個棧。言歸正傳,既然棧和隊列的應用如此廣泛,那么怎么通過代碼來實現他們呢?很多童鞋可能會說,這還不簡單么?用集合或者數組,so easy!那么,如果為了提高執行效率,不允許使用集合或者數組呢?下面,就由小妖來為大家小小的剖析一下吧!

鏈式存儲棧分析

棧的概念,這里就不再多說了,不清楚的童鞋請自行百度。其先入后出的特性確實有很多的實現方式。如題,我們這里將實現鏈式存儲,何為鏈式存儲呢?如下圖:

鏈式存儲

鏈式存儲的基本單位是Node(結點),在一個結點中,分為數據區和指針域,通過指針域指向下一個結點來將各個結點相連接。由于鏈式的特性,插入和刪除鏈中的某一個結點(除鏈頭和尾之外的其他結點)相對而言是消耗比較大的,但是用來實現棧或者隊列是極好的。對于棧結構來說,數據的入棧和出棧以及判斷是否到達棧底等方法是必不可少的。

代碼實現

接下來看看如何用Java代碼實現:

  1. /** 
  2.  * Created by lxh on 2017/8/1. 
  3.  * QQ-632671653 
  4.  * 自定義鏈式存儲棧 
  5.  */ 
  6. public class LinkStack<T> { 
  7.  
  8.  
  9.     private Node<T> top = new Node<>();//初始化棧頂結點 
  10.  
  11.     /** 
  12.      * 數據入棧操作 
  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.      * 數據出棧操作 
  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.     //使用內部類構建結點 
  13.     private class Node<T> { 
  14.         T data; //使用泛型來定義數據域 
  15.         Node<T> next; //定義下一個結點 
  16.  
  17.         /** 
  18.          * 無參構造方法中初始化棧底部,為棧添加末端哨兵 
  19.          */ 
  20.         Node() { 
  21.             data = null; 
  22.             next = null; 
  23.         } 
  24.  
  25.         /** 
  26.          * 通過帶參構造方法來構造每一個添加的結點對象 
  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.          * 判斷是否到達棧底 
  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.  

從代碼中可以看到,在這里使用了泛型來保證入棧數據類型的通用,結點采用了內部類的方式來構造,因為其私有性,所以是可以保證數據安全的。基礎不太好的同學可能會比較懵逼,不太明白這個鏈式是鏈到哪里的,所以小妖在入棧操作時將棧內信息打印了出來,相信各位一看就明白了。如下圖:

結果

相信通過信息圖大家明白了,這個鏈式存儲棧是通過在結點對象中遞歸添加結點對象來構成了一個一個結點的鏈接,體現在字符集上則是一層一層的對象嵌套(由于采用了Java語言來編寫,沒有C中的指針,所以采用此方法來代替指針)。通過末端結點的哨兵,當出棧時數據集為null 則可以判斷出棧中數據出棧完畢了。

【寫在***】

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

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

51CTO開發者交流群③群 542270018

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

責任編輯:何星 來源: 51CTO
相關推薦

2017-06-09 16:27:40

開發者故事

2017-11-28 14:15:38

開發者故事

2016-12-30 16:43:53

開發者故事

2017-03-21 11:19:57

開發者故事

2017-01-18 16:37:43

開發者故事

2017-12-22 09:33:14

開發者故事

2017-08-21 16:41:29

開發者故事

2017-03-01 15:57:48

開發者故事

2017-01-11 17:25:23

開發者故事

2017-01-13 16:36:29

開發者故事

2017-01-10 14:59:03

開發者故事

2017-09-15 11:39:47

2017-10-23 13:15:51

2017-01-19 13:40:56

開發者故事

2017-03-10 11:32:49

開發者故事

2017-01-16 17:24:08

開發者故事

2017-01-18 11:07:20

開發者故事

2017-07-06 14:59:27

2017-03-24 16:43:09

開發者故事

2017-04-25 15:39:30

開發者故事
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人伊成久久人综合网站 | 天天干天天色 | 拍真实国产伦偷精品 | 一区二区三区在线免费 | 精品中文字幕在线观看 | 99精品国产一区二区三区 | 久久三区| 欧美一区二区 | 视频一区在线观看 | 国产精品不卡 | 99精品免费久久久久久日本 | 99久热| 日韩高清一区二区 | 天天干天天爱天天爽 | 欧美日韩国产精品一区 | 日韩免费一区二区 | 欧美福利三区 | 欧美成人不卡 | 一区二区三区视频在线观看 | 色综合99 | 中文字幕 国产 | 日本久久视频 | 亚洲国产视频一区二区 | 亚洲成av人片在线观看 | 又黄又爽的网站 | 四季久久免费一区二区三区四区 | 久久久精品网 | 黑色丝袜三级在线播放 | 成人一区二区电影 | 国产精品久久性 | 无码日韩精品一区二区免费 | 日韩av黄色 | 精品视频www | 成人影视网址 | 最新中文字幕第一页视频 | 久久久久高清 | 久久久久久久综合 | 久久99视频这里只有精品 | 秋霞电影院午夜伦 | 国产特级毛片 | 丝袜美腿一区 |